钱包通行证推送通知 APN

Wallet pass push notifications APNs

所以我已经完成了 Apple pass 的所有签名和压缩过程,并且已经能够将 pass 连接到我的服务器以进行更新。我唯一要解决的问题是实现推送通知。

我已经尝试了几天,但似乎无法管理,我想我错过了一些非常简单的东西。我不太精通网络,所以非常感谢您的帮助。

这是我尽最大努力从 guzzle 得到的日志。

我使用的是与通行证相同的证书,我正在尝试更新并发送我在注册通行证时收到的设备令牌。这是我的 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 更熟悉。

它对我有用,只是做了一些小改动:

$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 object(但存在)和主题的 header 名称,apns-topic 不是apns-id。我还直接构建了 URL,而不是通过 headers 并使用了一个包含私钥的 pem 文件,不确定这些是否重要。

也许你还应该检查你在 URL 末尾传递的内容,它不是 device_id,而是 device_push_token

注意:请记住始终将钱包推送通知发送到生产 apple 端点,而不是沙箱!