我正在尝试向一堆iPad发送推送通知,并首先使用我的设备对其进行测试。它运作得很好。然后我尝试将其扩展为包括多个设备,包括我自己的设备,它似乎不起作用(与其他相关设备持有人核实只是为了确保)。设备令牌信息似乎没问题。可能有什么不对?也许这是一个限制问题?
我尝试重写以下教程中的所有内容,问题仍然相同: http://learn-php-by-example.blogspot.co.il/2013/01/working-with-apple-push-notification.html
我在checkAppleErrorResponse
函数中没有错误。
以下是从一个设备更改为多个设备时更改的代码:
foreach ($device_tokens as $token)
{
$apple_identifier = '[censored]';
$payload = json_encode($body);
$msg = pack("C", 1) . pack("N", $apple_identifier) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $token)) . pack("n", strlen($payload)) . $payload;
/* Actually sends the notification */
fwrite($fp, $msg);
$this->checkAppleErrorResponse($fp);
}
更新:我尝试手动复制一些令牌,并在设备收到通知时进行随机测试。虽然我不能说结果是确凿的,但事实证明,当所有令牌肯定有效时(我们公司中存在的设备),消息就会通过。但是,当我添加至少一个我无法亲自检查的设备(意味着它可能无效或用户拒绝通知)时,列表中的所有设备都不会收到消息。
问题是,这是否意味着Apple要求整个令牌阵列是其所有者授权APN的有效设备? (似乎完全不合逻辑,但这是我能想到的唯一解释)。