0

我一直在实现一个小的 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 不是最好的选择,但它是其他地方的要求,我们被迫以这种方式设置系统。

谢谢你,祝你有美好的一天,

亚历克斯。

4

1 回答 1

0

我终于找到了解决方案:一旦检测到令牌无效,我就会关闭连接并再次打开它,以便在错误的令牌之后立即开始发送令牌。

于 2012-11-06T16:57:07.050 回答