php - 如何使用命令 2 发送推送通知二进制格式

标签 php ios binary apple-push-notifications

有一个相关问题,但已经 4 个月了,还没有答案:PHP Apple iOS Push Notifications: Command2 : Binary Interface and Notification Format

我正在将推送通知从命令 0 格式迁移到命令 2。

我正在使用苹果文档 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html而且我找不到我做错了什么。顺便说一句,我正在使用 php。

对于命令 0:(有效)

$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

对于命令 1:(有效)

$msg =
  chr(1)
. chr(1).chr(1).chr(1).chr(1) //id 1111
. pack('N', time() + 86400) //tomorrow expiration date
. pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

对于命令 2:(不起作用)

$msgInner =
  chr(1)
. pack('n', 32)
. pack('H*', $deviceToken)

. chr(2)
. pack('n', strlen($payload))
. $payload

. chr(3)
. pack('n', 4)
. chr(1).chr(1).chr(1).chr(1)

. chr(4)
. pack('n', 4)
. pack('N', time() + 86400)

. chr(5)
. pack('n', 1)
. chr(10);

$msg=
chr(2)
. pack('n', strlen($msgInner))
. $msgInner;

通知未到达命令 8 响应数据包

最佳答案

似乎我使用的是 2 字节的帧大小而不是 4 字节

$msg=
chr(2)
. pack('N', strlen($msgInner)) //N is for 32 bits big endian
. $msgInner;

关于php - 如何使用命令 2 发送推送通知二进制格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23659745/

相关文章:

ios - 如何检查用户是否已从设置中启用推送通知?

ios - Swift 中的实时录音

c - C 中的 fread 和 fwrite

binary - 用按位运算替换最低有效位

ios - 如何将可选字典中的项目转换为单个字符串

linux - 如何设置gdb运行在/bin/sh

php - Symfony,在哪里将自定义方法放在实体上?

php - mySql @变量在不同客户端的行为有所不同

php - Symfony 2 表单额外字段

php - MongoDB Limit() 是否加载内存中的所有文档?