从我们的服务器发送推送通知时,胜负的关键(Critical outcome when sending

2019-10-17 16:09发布

我们有一个应用程序在AppStore上,并与注册的推送通知。 他们成功地工作所有的时间,但我们现在试图发送一个“全球性”推,和奇怪的事情发生了。 这是我们在我们的服务器端的PHP文件:

//Loop through tokens in tokenArray
$i = 0;
$t = 0;
foreach($tokenArray as $token)
{
    $t++;
    // Make notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $token) . pack('n', strlen($payload)) . $payload;

    // Send
    $result;
    if($message != null)
    {
        $result = fwrite($fp, $msg, strlen($msg));
    }

if ($result)
    $i++;
}
// Close the connection to the server
fclose($fp);

if($i == 0)
{
    echo 'The message was not delivered to anyone out of '.$t.'.';
}
else
{
    echo 'The message was delivered to '.$i.' out of '.$t.'.';
}

在此之前的代码一直工作,并且它种仍然如此。 所述tokenArray包含令牌表,如在SELECT Token FROM Tokens; 从我们的SQL。 这工作。

在开发过程中,当只有我们自己令牌进行了登记,它总是说:“该消息被送到4全”,尽管我们已经从我们的手机中删除我们的应用程序。 现在我们努力传递给所有≈1100注册标记与此代码。 消息被发送,并且输出是“消息被递送到588总分1194” 而且,我们也未收到通知的自己! 这意味着什么?

约5分钟后,我换了tokenArray使用数组仅包含我自己的令牌,并发送一个新的推动,我收到了一个我的手机上。 我也知道一个事实,即在前面的“tokenArray”的失败“工作”令牌存在(我检查)。

是推送通知机会游戏!? 这是什么意思时if($result)失败? 还有,为什么它不能超过500次?

证书和.PEM或.p12等等都在努力,我的确从push1到push2唯一不同的是使用另一个表,它是由我的SQL服务器的原始表的克隆。 表2只有我的令牌,和它的工作。 没有其他的变化作出。 只有SELECT Token FROM Tokens2 ,后来我证明,在所有令牌Tokens2中存在的Tokens ,我不知道,如果任何人有推可言,或者如果仍然安装了应用程序的1200的“幸运” 588收到。

是什么原因造成的? 我们不敢发的情况下,一半的另一个已经收到了吧..有一些限制我的速度有多快可以一次发送推? 或者我们在做什么错? 请帮忙,谢谢。

Answer 1:

你的主循环不考虑案件中,苹果将关闭套接字连接。 正如伊兰提到的,如果你发送一个无效的令牌,苹果公司将关闭在该点连接,任何进一步的使用写入fwrite的将失败。 所以,如果你的589次令牌是无效的,没有其他的推将被发送到苹果公司。

下面是这是适合你的逻辑,简单的修复; 这部分取代了主循环的if语句:

if ($result) {
    $i++;
} else {
    fclose($fp);
    // Add code here to re-open socket-connection with Apple.
}

除了由伊兰提到的增强通知的格式,你也可以使用APNS反馈API查询苹果的错误的记号,并从数据库中清除它们。 你可以找到这里查看详细信息: http://bit.ly/14RPux4

没有限制多少推送通知,你可以一次发送。 我在几秒钟内发送数千个。 唯一真正的限制是你和APNS服务器之间的连接。



Answer 2:

好了,我不知道PHP的,所以你的代码并不能帮助我。 然而,根据您的描述很可能一些在你的数据库设备令牌是无效的。 当苹果的服务器获取通知,无效的设备令牌它关闭套接字。 如果你已经是一个与坏令牌之后写更多的消息,他们将无法达到苹果。 你检测到套接字已关闭,并打开一个新的只有后您的邮件将达到苹果。 如果不使用增强的通知格式,这将是开始使用它是一个好主意 - 这样你可以从苹果公司获得的无效消息的ID和无效的令牌清理你的数据库。 然而,即使使用增强的格式并不能保证你会发现所有的错误(除非你愿意真的慢慢地发送消息,并且每次发送的消息后,检查来自苹果错误响应)。



文章来源: Critical outcome when sending push notification from our server