因此,我已经完成了Apple通行证的所有签名和压缩过程,并且能够将通行证连接到我的服务器以进行更新。我剩下要解决的唯一问题是实施推送通知。
我已经尝试了几天,但似乎无法解决,我想我缺少了一些非常简单的东西。我对网络不是很熟练,所以我非常感谢您的帮助。
这是我从最大的努力中得到的日志。
我使用的密码与尝试更新密码时使用的证书相同,并且正在发送注册密码时收到的设备令牌。这是我的php代码。
$client = new Client();
try {
$result = $client->post('https://api.push.apple.com:443', [
'headers' => ['apns-id' => <pass_type_id> , ':path' => '/3/device/<device_id_received_upon_registration>'],
'json' => ['apns'=>''],
'debug'=>true,
'version'=>2.0,
'ssl_key' => [<path_to_key>, <key_password>],
'cert' => [<path_to_certificate (same one used for signing pass)>, <certificate_password>]]);
}
catch (GuzzleHttp\Exception\ClientException $e) {
dd($e);
}
我真的迷失了这个。请帮帮我。我还尝试使用复制的其他代码连接到端口1295,但是它无法正常工作,并且由于我对端口443更加熟悉,调试起来更加困难。
答案 0 :(得分:0)
它对我有用,但有一些小的变化:
$pem_file = '<path_to_your_pem_file_including_private_key>';
$pem_secret = '<private_key_password>';
$url = "https://api.push.apple.com/3/device/" . $device_push_token;
$response = $client->post($url, [
'headers' => ['apns-topic' => $pass_type_id],
'json' => json_decode('{}'),
'debug' => true,
'version' => 2.0,
'cert' => [$pem_file, $pem_secret]
]);
var_dump($response->getStatusCode());
var_dump($response->getReasonPhrase());
更改的是需要为空JSON对象(但存在)的有效负载以及该主题的标头名称,它是apns-topic
而不是apns-id
。我还直接构造了URL,而不是通过标题构造了URL,并使用了包含私钥的pem文件,不确定这些是否重要。
也许您还应该检查URL末尾传递的内容,它不是device_id
,而是device_push_token
。
注意:请记住始终将钱包推送通知发送到生产Apple端点,而不是沙盒!