我已经问了相关的问题:
任何知道苹果应用程序是否获得推送通知的选项?
我得到了一个答案,当应用程序在后台并且用户没有打开时,无法知道推送通知是否到达iPhone ...
但我发现了一些有趣的东西
我用WhatsApp带2部iPhone。我打开,在第一部iPhone,WhatsApp并退出它(WhatsApp现在在后台),然后在第二部iPhone,我发送WhatsApp按摩到第一部iPhone。
当WhatsApp的推送通知到达第一个iPhone时,我可以在消息附近看到两个“V”(符号)(我不打开推送通知)。在此之后,我在第一部iPhone中关闭了互联网和3G,并再次将第二部iPhone的WhatsApp消息发送到第一部iPhone。 - 我可以看到按摩附近只有一个“V”(不读 - 不通过推送通知)。
现在,在第一部iPhone重新启用互联网后,我收到推送通知后,我可以看到两个“V”(再次 - 我不打开推送通知)。
它是如何工作的?当WhatsApp在后台运行时,WhatsApp如何知道iPhone是否收到推送通知?
让我们在关闭WhatsApp应用程序的情况下致电iPhone 收件人 和你发送消息的其他iPhone - 发件人,让我们使用通用术语 应用 代替 WhatsApp的
申请时 发件人 无法获知推送通知已达到 收件人。这是推送通知的本质。
然而, 发件人 可以向应用程序发送另一个 - 不是推送通知,而是专有协议 - 消息 收件人 它((收件人)欢迎致谢 发件人 以任何特定于应用程序的方式。
所以,我猜(我不知道 - 我与WhatsApp无关),你得到的双v图标是当应用程序消息到达应用程序时 接收器 - 与推送通知无关。
你的意思是推技术的基础知识:
whatsapp软件在后台运行,侦听特定端口
传入消息。它不断地这样做。
BTW:
一个V =从您的手机发送到whatsapp服务器的消息
两个V =从whatsapp服务器推送到收件人移动设备的消息
蓝色V表示已读取消息
Whatsapp不会显示该人是否阅读该消息。它只是通知消息何时被发送到whatsapp服务器(一个V)以及何时发送到个人电话(2个V)。双重并不意味着消息被读取它只是意味着whatsapp连接到手机并且能够传递消息。
收到推送通知后,接收方可以从推送通知的有效负载中包含的URL下载数据。通过请求该URL,服务器知道接收方已收到推送通知,并且可以将此状态传递给您的发送方应用程序。
像这样:
- 在推送通知有效内容中添加特定URL
- 实施
application:didReceiveRemoteNotification:fetchCompletionHandler: method
在您的应用程序委托和该方法中调用有效负载中的URL。
- 在服务器上实现一个逻辑,该逻辑将URL调用识别为已接收的通知
- 让您的发件人应用程序不断从服务器获取当前通知状态。
以上海报都是正确的。只是添加一件事。如果Whatsapp最近关闭,它仍然在后台运行,仍然可以收到消息(因此返回收据)。但是,在应用程序暂时闲置(或其他应用程序具有更高优先级)后,Whatsapp将被终止,然后它将不再接收传入消息并且不会返回收据。
当然,观察者会注意到打开应用程序和显示的新消息之间存在小的延迟,这似乎表明消息不是在后台下载,而是仅在打开应用程序时下载。那么为什么它在后台运行时返回收据呢?