我一直在实现一个小的 PHP 脚本,它将推送通知发送到 Apple 的 APN 服务器。我有一个数据库,其中包含在我的应用程序中注册推送通知的所有设备令牌。我的脚本将查询数据库中的令牌并将它们发送给 Apple。一切都很好,但是......我手动将错误的令牌插入到我的表中并再次执行脚本。
我已经意识到,在将错误的令牌发送给 Apple 之后,之后的所有通知都不会到达设备。如果一切正常,Apple 似乎不会返回任何 OK,但如果出现问题,它会发送一个 KO 代码。对于那个错误的令牌,我收到了 Apple 的错误消息,但之后我没有收到所有其他通知的任何回复。
我只为数据库中的所有令牌打开一个连接。
我用这一行准备了一个套接字上下文:
$streamContext = stream_context_create(array(
'ssl' => array(
'local_cert' => $this->signFile
)
));
然后启动与 APN 服务器的通信通道:
$this->hFile = stream_socket_client(self::$serverUrl[$environment], $err, $errstr, 60, STREAM_CLIENT_CONNECT, $streamContext);
最后我发送消息:
fwrite($this->hFile, $command);
我想为每个通知设置一个新的连接,但我想先询问 SO 意见......
顺便说一句,我知道 PHP 不是最好的选择,但它是其他地方的要求,我们被迫以这种方式设置系统。
谢谢你,祝你有美好的一天,
亚历克斯。