我一直在实现一个小的PHP脚本,它会将推送通知发送到Apple的APN服务器。 我有一个数据库,其中包含在我的应用程序中注册推送通知的所有设备令牌。 我的脚本将在数据库中查询令牌并将其发送给Apple。 一切都很好用但是...我手动将错误的令牌插入到我的表中并再次执行脚本。
我意识到在将错误的令牌发送给Apple之后,之后的所有通知都无法到达设备。 如果一切正常,Apple似乎不会返回任何正常但如果出现问题它会发送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并不是最好的选择,但它来自其他地方的要求,我们被迫以这种方式设置系统。
谢谢你,祝你有愉快的一天,
亚历。
答案 0 :(得分:0)
我终于找到了解决方案: 一旦我检测到令牌无效,我就会关闭连接并再次打开它,以便在错误的连接后立即开始发送令牌。