推送通知脚本中的 pack() 警告
Posted
技术标签:
【中文标题】推送通知脚本中的 pack() 警告【英文标题】:Warning on pack() in the push notifications script 【发布时间】:2011-09-13 16:57:29 【问题描述】:我正在用 php 编写我的推送通知脚本。
$deviceToken
是正确的,但我在这一行有一个警告:
$b = pack('H*', str_replace(' ', '', $deviceToken));
警告是这样的:
警告:pack() [function.pack]:类型 H:第 33 行 /myurl.com/send_push_notification.php 中的非法十六进制数字
通知没有到达。
你知道为什么吗?
【问题讨论】:
你错过了一个结束)
(虽然我猜这是一个复制/粘贴错误,因为它不会解析)而且,当你 echo str_replace(' ', '', $deviceToken);
时你会得到什么?
是的,抱歉,这是一个复制和粘贴错误...当然,在 php 脚本中有 )
$deviceToken 的价值是多少?如果它有123ABCZ
,那么Z
将触发非法十六进制数字警告。 Z 可以是任何东西,甚至是换行符/回车符。
另外,如果它以0x
开头,它将不起作用(烦人)
$deviceToken 类似于“a9e3a660924c2bf96b6540fe78697bed9fe85332e44323cbe4dbd6b04120eaaf”
【参考方案1】:
我遇到了同样的问题。 我最终使用了
trim($device_token)
而不是
str_replace(' ', '', $deviceToken)
最终解决了这个问题。
【讨论】:
是的,这对我有用。设备令牌后面有一个空格。 当我使用trim($device_token)
而不是 str_replace(' ', '', $deviceToken)
时,推送通知未到达 iphone 设备【参考方案2】:
我遇到了同样的问题。最后,我发现我的网址中有一个空格字符! 所以,只要检查你的网址,也许就是这个错误。
【讨论】:
【参考方案3】:我也遇到了同样的问题。它解决了我的问题。尝试使用以下代码:
chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $item[0])) . chr(0) . chr(strlen($payload)) . $payload;
【讨论】:
【参考方案4】:如果还有人遇到此问题,请尝试
$deviceToken = pack('H*', str_replace(' ', '', sprintf('%u', CRC32($deviceToken))));
【讨论】:
以上是关于推送通知脚本中的 pack() 警告的主要内容,如果未能解决你的问题,请参考以下文章