WhatsApp如何将带有消息内容的推送通知发送到Apple Push Notification服务?
一种可能的解决方案是从应用程序内部将未加密的消息发送到APN,但这很容易被滥用,并且会破坏端到端加密的目的。
更新:
根据Apple的文档,我刚刚对其进行了更多测试:
但是,如果用户强制退出应用程序,系统不会自动启动您的应用程序。在这种情况下,用户必须重新启动您的应用程序或重新启动设备,然后系统才会尝试再次自动启动您的应用程序。
我进行了测试,导致我仍然收到纯文本推送通知。这会让我相信该应用程序未在后台运行,无法解密收到的任何通知,然后将其重新发布。
2017年5月更新: VoIP API(如下面的答案中所述)可以在演示应用程序中有效地实现相同的结果。效果很好。
2017年7月更新:
Apple不再允许将API用于非VOIP应用的推送通知。但是,它们确实允许WhatsApp无限公平地做到这一点。
2018年9月更新:
通知应用程序扩展现在可以用于解密推送通知。但是,不鼓励在此类扩展中使用动态库,因此您必须具有可静态编译以进行解密等的代码库。
#1 楼
WhatsApp可能将VOIP后台模式与PushKit一起使用来解决此问题。考虑了高优先级的通知,并及时发送。
即使应用程序被用户强行退出也可以提供。
有关详细信息,请参阅IP语音(VoIP)最佳做法。 VOIP推送被解密,并在解密的消息中显示“本地通知”。那么,Whatsapp在iOS的早期版本中是如何做到的呢?
事实并非如此。它们不允许您在iOS 8之前的版本的通知中查看消息预览(在iOS 7上进行了验证,请参见屏幕截图)
#2 楼
您所称的Push Notifications
(在通知中心看到的)和Remote Notifications
(通过APN发送的信息)并不完全相同。 在Android上,两者完全不同。第一个称为Notification,第二个称为Message或
Downstream Message
。 但是回到iOS,该应用程序可以生成本地通知,该通知将显示在您的通知中心中。这些不需要由任何远程通知触发,这取决于应用程序中的逻辑,iOS应用程序确实可以执行后台任务并进行同步以生成这些通知。
由于iOS7, iOS应用程序还可以在后台无限期地执行HTTP操作(因为该应用程序将网络传输委派给系统,因此在传输完成后将在有限的时间内唤醒应用程序)。另一方面,
远程通知最初是为向用户直接发送APN推送而设计的。但是苹果公司意识到开发人员需要向其应用程序而不是通知中心发送推送通知,并向远程通知添加了一个静默标志,以便服务器可以发送通知以唤醒应用程序而不会打扰用户。然后,应用程序将执行一些同步和逻辑,并自行决定是否创建本地通知(将在通知中心显示)。
此外,直到最近,远程通知的有效载荷都受到256个字节的限制,这迫使许多开发人员可以将这些通知用作“推送同步”消息,而不是数据通道。
如果您对我的理解很好,那么您将了解Whatsapp不需要使用APN在“远程通知”中发送消息有效负载。
评论
我喜欢这个答案。如果您设法添加一些参考文献,我将表示赞同。
– GnP
16年4月13日在21:37
@gnp在这里,你去。
– Thibault D.
16年4月14日在8:21
苹果公司有关静默通知的文档位于:developer.apple.com/documentation/usernotifications/…-它具有以下注释:“系统将静默通知视为低优先级。您可以使用它们来刷新应用程序的内容,但是系统不能保证其交付速度……...每小时不要尝试发送两个或三个以上的静默通知。“我不认为这将是Whatsapp使用的途径
– Orion Edwards
18-09-6在2:43
评论
只是要清楚一点,这仍然是推测,对吗?这是一个很好的解释,不同版本之间的区别是一个很好的旁证,但听起来我们还是不确定。
–octern
16-4-6在19:28
@octern我计划在越狱的iPhone上使用LLDB附加到whatsapp
– Antwan van Houdt
16年4月6日在23:24
这是很合理的。但是,为什么Threema仍然声称存在技术限制?还是他们只是缓慢/懒惰地更新软件?
–mrclschstr
16-4-7在10:50
我只是想知道为什么他们不显示您给联系人的姓名,而不显示发件人的用户名。在此功能之前,它是公平的,但现在完全有可能显示联系人。
–奇闻趣事
16年5月8日,0:10
在iOS10中,WhatsApp可能正在使用Notification Service Extensions,使用此扩展应用程序可以在后台接收有效负载,对其进行修改/解密,然后将其显示给用户。
– D4ttatraya
17年1月9日在13:41