iOS推送通知是如何工作的?

133

iOS的“推送”通知是如何无需设备轮询服务器直接投递到特定设备的?

例如,假设我在Facebook上收到了一条新消息。Facebook通知Apple我的设备应该接收此类通知。但是,苹果是如何知道要将消息推送到哪个设备/IP地址的呢?


3
@Wain 我希望你能够以技术层面详尽地解释一下。那篇文章的内容非常高层次。那么我的设备是否一直保持着与苹果的推送服务器的开放连接? - Andy Hin
我更熟悉Android推送,但通常情况下,当您安装应用程序时,它会向Apple注册设备的唯一ID。然后,当Facebook向Apple发送消息时,Apple将把它转发到设备的唯一ID。 - Panama Jack
8
是的,但由于我的设备不断切换不同的基站和WiFi网络,苹果是如何得知我的唯一ID的IP地址的? - Andy Hin
@whydna 感谢您提出这个问题。我也想准确地了解同样的事情。我相信这里的回答可以解决我的问题: https://dev59.com/fXbZa4cB1Zd3GeqPL_QK - MightyMouse
@AndyHin 设备操作系统(iOS)知道哪些APNs服务器是有效的。设备正在连接到这些服务器并保持连接打开状态。该连接可能与设备ID和其他元数据(电话号码)相关联。当需要“推送”消息时,APNs会找到正确的连接并将其发送到已经打开的连接中。因此,APNs不会尝试建立与设备的连接,而始终是设备打开该连接。每个设备一个连接。 - Kind Contributor
5个回答

117

每个设备都可以使用其独特的设备令牌更新数据。这张图片能够清楚地解释一切。. .

输入图像描述


你知道设备令牌的用途吗?它是用于加密APNS服务器和应用程序之间通信还是其他地方使用? - Mugen
1
@Mugen:设备令牌由APNS用于识别应该转发提供者发送的有效载荷的设备! - D4ttatraya
1
@Karan - 通知在用户和应用程序之间有区别吗?例如,“嘿,用户,您有一条消息!”和那些旨在唤醒应用程序并静默告诉它执行一些后台处理的通知。 - Howiecamp
如果您正在使用推送通知,则在应用程序正在运行时收到通知时会收到通知。同时,当用户从通知中心点击通知并启动应用程序时,可以访问活动通知的详细信息。在此期间,您可以执行所需的流程。 - Karan Alangat
通常我们会从通知负载中获取徽章信息。我们也可以从应用程序中更改它。 - Karan Alangat
显示剩余3条评论

67

这对我来说太多了,无法在评论中概括。

根据文档说明:

Apple推送通知服务(APNs)向已注册接收这些通知的设备传播推送通知。每个设备与服务建立一个被授权和加密的IP连接,并通过此持续连接接收通知。提供程序通过持久且安全的通道连接到APNs,同时监视发送给其客户端应用程序的传入数据。当应用程序的新数据到达时,提供程序通过通道准备并发送通知到APNs,APNs将通知推送到目标设备。

我建议阅读文档以获取更多信息以及如何使用和配置。所有信息都在那里。

推送通知


7
苹果公司给您的设备分配了一个静态IP地址吗? - CMCDragonkai
当我意识到我的服务器必须为每个目标设备发送通知给APNS时,我感到很惊讶和失望!:( - Vladimir
5
设备建立连接,而不是服务器。 - Hitechcomputergeek
@Panama jack 您好,如果我设置 note.expiry = Math.floor(Date.now() / 1000) + 43200 秒,那么留言会在服务器上保留多长时间?是否会保留12小时?我想知道这个到期时间是否有限制,或者它是按我们的要求来处理的。 - kisor
8
那么这些设备始终与APN服务保持着一种长轮询/套接字连接?如果是这样,那么APN服务如何处理这么多的连接 - 如果一个服务器可以容纳50k个连接,并且始终有5亿个用户,那么服务至少需要10000台服务器。这是否是一个实际的场景? - AV94
显示剩余3条评论

27

我创建了一张信息图,用于解释推送通知的工作流程。希望这对你有所帮助。

输入图像描述


很棒的信息图。然而,它缺少最后的第6步:APNS向APNS已知连接到该令牌的设备发送通知。 - not2savvy

15

设备不会持续轮询服务器以获取推送通知。

简单地说,假设iPhone已连接到互联网。连接到互联网后,iPhone建立与Apple推送通知服务器的连接。该连接是一个开放式连接,这意味着数据可以从服务器传输到iPhone,而只要数据到达服务器,它就会被立即推送到iPhone上。

Apple不使用HTTP协议进行推送通知,但如果您了解HTTP协议,它几乎采用相似的方法。

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push


如果不使用HTTP,他们会使用什么? - Howiecamp

2
在iOS中,应用程序不能在后台做很多事情,只能进行有限的活动,以保护电池寿命。但是,如果发生了一些有趣的事情,并且您希望通知用户即使他们当前没有使用您的应用程序,该怎么办?在这篇文章中有一个非常好的推送通知说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接