似乎如果我向同一设备发送多个推送通知,同时,每次发送的通知都不会调用didReceiveRemoteNotification
。假设我发送了6个通知,didReceiveRemoteNotification
平均只被调用3次。那就是应用程序当前正在运行。但如果我在应用程序之外并发送6个推送通知,则所有通知将被发送到通知中心/锁定屏幕。这是预期的行为吗?
答案 0 :(得分:4)
这是预期的行为:
Apple推送通知服务包括默认的服务质量 执行存储转发功能的(QoS)组件。
如果APN尝试发送通知但设备处于离线状态, 通知存储一段有限的时间,并交付 设备何时可用。
仅存储特定应用程序的最近通知。 如果在设备离线时发送了多个通知,则各自 新通知会导致先前通知被丢弃。这个 仅保留最新通知的行为称为 合并通知。
如果设备长时间处于离线状态,则会发出任何通知 被存放,因为它被丢弃。
虽然在您的情况下设备处于联机状态,但需要注意的重要事项是,APN仅为每个设备存储一个应用通知。假设您一次发送3个通知。当第二条消息到达时,APN服务器正在向设备发送第一条消息。它存储第二条消息。然后第三条消息到达而第一条消息仍然被传递,因此第三条消息会覆盖第二条消息,第二条消息永远不会传递。
这里有另一个引用,你可能会发现更有说服力:
收到了一些通知,但并非全部
如果要向同一设备发送多个通知或 计算机在短时间内,推送服务将发送 只有最后一个。
这就是原因。设备或计算机确认收到每个 通知。直到推送服务收到该确认,它 只能假设设备或计算机已脱机 理由并将通知存储在服务质量(QoS)中 排队等待将来重新开始。这里的往返网络延迟是 当然是一个主要因素。
如本地和推送通知编程指南中所述 QoS队列为每个设备或计算机的每个应用程序保留一个通知。 如果服务在收到通知之前收到另一个通知 队列被发送,新通知将覆盖前一个通知。
所有这些都指出意图是通知 向应用程序表明感兴趣的内容已经发生了变化 提供商,应用程序应该与提供商签入以获取 细节。通知不应包含不同的数据 可以在其他地方找到,也不应该是有状态的。
任何未立即发送的推送通知都已排队等候 未来的重新发送,因为您的设备未连接到 服务。 “立即”当然需要为你的延迟 连接考虑在内。边远案件将超过60秒 APN将在那时超时。