gpt4 book ai didi

php codeigniter 使用 curl 进行 ios 推送通知

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:43 24 4
gpt4 key购买 nike

我已经制作了网络服务,可以使用 curl 向 ios 发送推送通知,我有用于开发的 ck.pem 文件,其中包含证书和 RSA 私钥,并正确引用它。

但是每次我调用网络服务时我都会得到同样的错误Curl 失败:无法使用客户端证书(未找到 key 或密码短语错误?)

所有相关的解决方案都不起作用,除了使用“stream_context_create”的替代方案,但我想用 curl 和 idk 来解决问题。

在下面找到我的代码:

function test_push_to_ios() {
$url = 'https://gateway.sandbox.push.apple.com:2195';
$cert = base_url() . 'backend_includes/ios_cert/ck.pem';

$gcm_ids = array("xxxxxx");
$passphrase = "passphrase";
$message = 'nbad_notification';
$aps = array('alert' => $message, 'sound' => 'default');
$fields = array('device_tokens' => $gcm_ids, 'data' => $message, 'aps' => $aps);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
//curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $passphrase);
curl_setopt($ch, CURLOPT_SSLKEY, $cert);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $passphrase);
curl_setopt($ch, CURLOPT_CERTINFO, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode($result);
}

最佳答案

我没有仔细阅读你的问题。

您正在尝试通过 HTTPS 请求向 Apple 发送推送通知。那是行不通的。 Apple Push Notifications 仅适用于通过 TCP 协议(protocol)的特定二进制格式。

As a provider you communicate with Apple Push Notification service over a binary interface. This interface is a high-speed, high-capacity interface for providers; it uses a streaming TCP socket design in conjunction with binary content. The binary interface is asynchronous.

你的代码有很多问题:

您似乎将 GCM 代码与 APNS 代码混合在一起。$fields = array('device_tokens' => $gcm_ids, 'data' => $message, 'aps' => $aps); 看起来类似于向 Google 发送消息时的操作云消息服务器。但是 GCM 与 APNS 完全不同,那么您为什么认为它会起作用?

您发送的是 JSON 正文,这适用于 GCM,但 APNS 使用二进制格式。虽然发送到 APNS 的二进制消息中的有效负载包含一个编码的 JSON 字符串(看起来类似于您的 $aps JSON),但您不能将它打包在另一个 JSON 中并期望它起作用。

并且在 APNS 服务器前面添加 https:// 不能使其支持 HTTPS,因为它没有实现支持 HTTPS(也不支持 HTTP)。

我建议您使用有效的 stream_context

关于php codeigniter 使用 curl 进行 ios 推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19802848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com