使用Api的推送通知

我试图使用推送通知使用Api,我没有得到任何错误信息,我没有得到任何回应。

我已经使用PHP脚本检查了Apple推送通知服务

并相应地在我的代码中应用更改,但仍然不起作用。

我不能得到如何获得我必须使用的serverId

 $device = 'fbb5a9c71066794d57fee33b4005a89f1bb8941a68660fd6e91f466be1299ab6'; // My iphone deviceToken $payload['aps'] = array( 'alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default' ); $payload['server'] = array( 'serverId' => 1, 'name' => 'keyss.in' ); $payload = json_encode($payload); $apnsCert = 'apple_push_notification_production.pem'; $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); $apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload; fwrite($apns, $apnsMessage); //socket_close($apns); seems to be wrong here ... fclose($apns); 

获取错误:

警告:stream_socket_client():无法连接到ssl://gateway.sandbox.push.apple.com:2195(连接超时)

警告:fwrite()期望参数1是资源,布尔给定

警告:fclose()期望参数1是资源,布尔给定

您没有得到任何回应,因为您使用的是旧的二进制通知格式:

 $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload; 

为了获得回应(只有在出现错误时才会返回回复),请使用增强的格式:

 $apnsMessage = pack("C", 1) . pack("N", $apple_identifier) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n", strlen($payload)) . $payload; 

你可以在这里看到示例代码。