1
我试图将通知推送至APNS以更新Apple Wallet应用程序中的通行证。根据this document,我们只需要将传递类型标识符和推送令牌发送给APN。然后他们会照顾其余的。无法将通知推送至APNS以更新Apple Wallet中的通行证
$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);
没有错误返回,但它似乎不起作用。我做错了什么?请帮忙。
你肯定没有返回错误?正如我所看到的,你只是写信给socket而不是阅读。您正尝试将通知发送给正在生产的应用程序。您是否设法在使用沙箱网关进行开发时向应用发送通知?另外,可能有一些类似的问题可以帮助你。 http://stackoverflow.com/questions/26865331/stream-socket-client-unable-to-connect-to-ssl-gateway-sandbox-push-apple-co – astrocrack
对不起,我没有解释清楚。我正在尝试将通知推送给APNS以更新Apple Wallet应用程序中的通行证。根据[本文档](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/PassKit_PG/Updating.html#//apple_ref/doc/uid/TP40012195-CH5-SW1),我们只需要将通行证类型标识符和推送令牌发送给APN。然后他们会照顾其余的。 –
你使用什么证书? – PassKit