$usersStmt = self::$db->query("SELECT `token` FROM `tokens`");
$users = $usersStmt->fetchAll(PDO::FETCH_COLUMN);
foreach ($users AS $userToken) {
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $userToken)) . chr(0) . chr(strlen($payload)) . $payload;
$result = fwrite($fp, $apnsMessage);
}
我有一张表,里面有 10 个推送通知 token 。我使用 PHP 获取这些 token 并将每个 token 的通知发送到 APNS。
问题是,实际上只有一半收到了通知。我有一种感觉,这是因为其中一个 token 无效(或类似的东西)并且它阻止它发送其余的 token 。
我检查了 $result
的值,每个都返回 true。这意味着所有通知都已成功发送到 APNS,但并未传送到所有设备。
是否有可能无效的 token 会中断其余通知到达设备?我不确定这里发生了什么,但我知道所有通知都已成功发送到 APNS,但未到达设备。
有什么想法吗?
最佳答案
无效的 token 不会中断其余通知到达设备。 我之前也遇到过同样的问题,问题出在消息本身。 检查您的消息长度,通知负载为 256 字节)。 检查您的消息编码,对非 ASCII 消息使用转义序列。 如果您多次向同一设备发送通知,Apple 将只发送最后一次通知。 确保您的 token 适用于相同的工作环境,沙盒 token 不适用于生产服务器。 查看 Apple 技术说明以获取更多信息: https://developer.apple.com/library/mac/technotes/tn2265/_index.html#//apple_ref/doc/uid/DTS40010376-CH1-TNTAG23
关于php - 只有一半的推送通知到达设备 (APNS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831207/