推送通知脚本中的 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() 警告的主要内容,如果未能解决你的问题,请参考以下文章

西里尔字母的 iOS 推送通知

推送通知警告?

为啥我收到此警告“缺少推送通知权利”

ios推送通知并不总是显示

Flutter iOS 应用提交问题警告:缺少推送通知权利

从 PHP 发送 iOS 推送通知