繁体   English   中英

使用PHP脚本的Apple推送通知服务

[英]Apple Push Notification Service with PHP Script

我正在尝试发送推送通知我的iPhone(APNS)。 我读了这篇文章并尝试实现它。 所以我所有的证书都很好(正常)。

现在我有这个PHP脚本:

$device = '4f30e047 c8c05db9 3fa87e7d ca5325f7 738cb2c0 0b4a02d4 d4329a42 a7128173'; // My iphone deviceToken
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');
$payload['server'] = array('serverId' => $serverId, 'name' => $name);
$output = 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);

当我运行这个脚本时,什么都没发生 没有错误只是一个空页面,但我的iPhone没有收到推送通知...

你有个主意吗?

非常感谢 !

剥离设备令牌中没有空格

对于开发证书,您需要URL

'ssl://gateway.sandbox.push.apple.com:2195'
但是为了生产
  'SSL://gateway.push.apple.com:2195' 

从令牌中剥离空格,然后它就不起作用了

$apnsHost = 'gateway.sandbox.push.apple.com';

从此网址中删除“沙盒”,它将运行。

如果你有多个设备并且你遍历它们,我发现你必须为每个fwrite创建一个新的stream_context_create,以防止苹果关闭一个坏令牌的连接。

FYI

要完全发送通知成功,您还需要做一件事。

替换$ output = json_encode($ payload);

to $ payload = json_encode($ payload);

您缺少provice证书私钥。 添加以下行:stream_context_set_option($ streamContext,'ssl','passphrase',$ certificatePrivateKey);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM