【问题标题】:Warning on pack() in the push notifications script推送通知脚本中的 pack() 警告
【发布时间】: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”

标签: php iphone push-notification apple-push-notifications pack


【解决方案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))));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        • 2023-03-11
        • 2015-11-25
        • 1970-01-01
        相关资源
        最近更新 更多