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

Posted

技术标签:

【中文标题】如何使用命令 2 发送推送通知二进制格式【英文标题】:how to send a push notification binary format with command 2 【发布时间】:2014-05-14 16:03:46 【问题描述】:

有一个相关的问题,但已经 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 格式,但它对命令 1 格式几乎没有改进,所以除非你需要优先级字段,否则我建议使用命令 1(你说它有效给你)。 【参考方案1】:

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

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

【讨论】:

以上是关于如何使用命令 2 发送推送通知二进制格式的主要内容,如果未能解决你的问题,请参考以下文章

使用 curl 命令发送推送通知时出现无效注册错误

如何使用 GCM 和 java 向多个设备发送推送通知

如何使用 Firebase 从我的服务器发送 iOS 推送通知?

如何使用 RabbitMQ 发送移动推送通知?

如何将 FCM 推送通知限制为应用程序 ID?

如何使用单一平台发送推送通知国家明智?