我在PHP中使用推送通知脚本时遇到了问题,但它取决于令牌。
我有一些令牌,转换后(使用pack())似乎在2行。
因此,当我在套接字上写字时,我的所有其余数据包都不会接收推送。
我尝试了一个带有4个令牌的非常简单的脚本。
我有一个非常奇怪的标记:" 2f9c2239c85e4705171e379691ace8fd0e68ad984912de530a1f969ebb655fd7"当我尝试向这个推送时,没有发送任何东西。
如果我把这个标记放在最后,第一个标记会收到推送,如果我把它放在第二个位置,只有第一个设备会收到推送....
当我进行调试时,我可以看到换行符,但我不确定是不是问题
Token : string(64) "2f9c2239c85e4705171e379691ace8fd0e68ad984912de530a1f969ebb655fd7"
Concersion: string(131) " /�"9�^G7�����h��I�S
���e_�^{"aps":{"alert":"Xxxxx XX - Test - Push"},"main_node_id":"756516","contentobject_id":"634997"}"
Token: string(64) "b0ddb6a64fb546494d14759d1f62050fa6bab81a8bd34a2448eb9c6a650adc21"
Conversion: string(131) " �ݶ�O�FIMu�b�����J$H�je
�!^{"aps":{"alert":"Xxxxx XX - Test - Push"},"main_node_id":"756516","contentobject_id":"634997"}"
Token : string(64) "3a7c392fc642b946a5604579ef3fce8174dcb9eb70688d9d429ab3000427638a"
Conversion: string(131) " :|9/�B�F�`Ey�?tܹ�ph��B��'c�^{"aps":{"alert":"Xxxxx XX - Test - Push"},"main_node_id":"756516","contentobject_id":"634997"}"
Token : string(64) "2a4c36091a2169d1276e14d657b8d58a98b8a10b0376980adb8706ff87737ee4"
Conversion: string(131) " *L6 !i�'n�W�Պ���
v�
ۇ��s~�^{"aps":{"alert":"Xxxxx XX - Test - Push"},"main_node_id":"756516","contentobject_id":"634997"}"
这是我的PHP函数创建发送到套接字的数据包:(我尝试了一些其他库..它是一样的)
protected function _buildPacket( array $body, $token ) {
$payload = json_encode( $body );
return chr( 0 ) . pack( "n", 32 ) . pack( 'H*', str_replace( ' ', '', $token ) ) . pack( "n", strlen( $payload ) ) . $payload;
}
你们已经看过了吗?
请注意,我重复使用相同的套接字,因此这个令牌会破坏某些内容,但我不明白这一点。
感谢您的帮助
答案 0 :(得分:2)
根据您的描述,2f9c2239c85e4705171e379691ace8fd0e68ad984912de530a1f969ebb655fd7
令牌无效。也许它是一个沙箱令牌,您正在使用它来推送到生产环境,反之亦然。
当您向APNS服务器发送带有无效设备令牌的推送通知时,Apple会返回错误响应(如果您使用的是较新的二进制格式)并关闭套接字。 因此,在具有无效令牌的套接字之后通过同一套接字发送的任何消息都将被丢弃,并且需要通过新套接字重新发送。这就是为什么根据消息的顺序会遇到不同的结果。
阅读有关Apple推送通知here的错误处理的更多信息。