【发布时间】:2016-10-04 10:25:39
【问题描述】:
我正在尝试向 APNS 推送通知以更新我在 Apple Wallet 应用中的通行证。根据this document,我们只需要将pass type identifier和push token发送给APNs即可。然后他们会处理剩下的事情。
$apnsHost = 'gateway.push.apple.com';
$apnsPort = 2195;
$apnsCert = base_path('app/config/passbook/certificates.pem');
$payload = ['aps' => []];
$payload = json_encode($payload);
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', 'xxxxxx');
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if(!$apns) {
Logger::logError(1, "Passbook push notification error", ['serial_number' => $serialNumber, 'pass_type_id' => $passIdentify]);
return "Failed to connect (stream_socket_client): $error $errorString";
} else {
foreach($push_tokens as $idx => $push_token) {
$msg = chr(0) . pack('n', 32) . pack('H*', $push_token) . pack('n', strlen($payload)) . $payload;
fwrite($apns, $msg);
}
}
@socket_close($apns);
fclose($apns);
没有返回错误,但似乎不起作用。我做错了什么?请帮忙。
【问题讨论】:
-
您确定它没有返回错误吗?正如我所看到的,您只是在写入套接字而不是读取。您正在尝试向正在生产的应用程序发送通知。您是否在开发过程中使用沙盒网关向应用程序发送通知?此外,可能有一些类似的问题可以帮助您。 stackoverflow.com/questions/26865331/…
-
对不起,我没有解释清楚。我正在尝试向 APNS 推送通知以更新我在 Apple Wallet 应用中的通行证。根据this document,我们只需要将pass type identifier和push token发送给APNs即可。然后他们会处理剩下的事情。
-
你用的是什么证书?
-
您还实现了 Web 服务的所有 5 个端点。如果你拉下你的通行证背面,它会刷新吗?
-
@PassKit 我正在使用的证书是我用来签署创建通行证的证书(成功)。我用这个命令导出了.pem证书
$ openssl pkcs12 -in WenderCastPush.p12 -out WenderCastPush.pem -nodes -clcerts