【问题标题】:How do iOS Push Notifications work?iOS 推送通知如何工作?
【发布时间】:2013-06-20 04:40:14
【问题描述】:

iOS“推送”通知如何发送到特定设备而不需要轮询服务器?

例如,假设我在 Facebook 上收到一条新消息。 Facebook 通知 Apple 我的设备应该收到这样的通知。但是 Apple 如何知道将消息推送到哪个设备/IP?

【问题讨论】:

  • @Wain 我正在寻找技术层面的详细解释。那篇文章水平极高。所以我的设备始终与 Apple 的推送服务器保持开放连接?
  • 我更熟悉 android push,但通常,当您安装应用程序时,它会使用唯一 ID 向 Apple 注册设备。然后当 facebook 向苹果发送消息时,苹果会将其转发到设备唯一 ID。
  • @Pjack 是的,但是随着我的设备不断更换不同的基站、不同的 wifi 网络,Apple 如何知道我唯一 ID 的 IP?
  • @whydna 感谢您提出这个问题。我想完全理解同样的事情。我相信这回答了我的问题:stackoverflow.com/questions/18859732/…
  • @AndyHin 设备操作系统 (iOS) 知道哪些 APNs 服务器是有效的。设备正在连接到这些服务器并保持连接打开。此连接可能与设备 ID 和其他元数据(电话号码)相关联。当需要“推送”消息时,APN 会找到正确的连接并将其发送到该已打开的连接。因此 APNs 不会尝试与设备建立连接,它始终是打开该连接的设备。每台设备一个连接。

标签: ios push-notification apple-push-notifications


【解决方案1】:

每台设备都可以使用自己唯一的设备令牌更新数据。这张照片说明了一切。 .

【讨论】:

  • 知道设备令牌的用途是什么吗?是用来加密APNS服务器和App之间的通信还是其他地方?
  • @Mugen:APNS 使用设备令牌来识别它应该转发提供商发送的有效负载的设备!
  • @Karan - 针对用户的通知(例如“嘿,用户,您有消息!”)和用于唤醒应用程序并静默告诉它的通知之间是否存在区别?做一些后台处理?
  • @Howiecamp 如果您使用推送通知,如果应用程序正在运行,则只要收到通知,您就会收到通知。当用户从通知中心点击通知并启动应用程序时,还可以访问活动通知详细信息。在此期间,您可以执行您希望执行的过程。
  • @KaranAlangat,这里如何处理徽章计数?服务器是怎么知道的?
【解决方案2】:

这样评论对我来说太过分了。

来自文档。

Apple 推送通知服务 (APN) 将推送通知传播到已注册应用程序以接收这些通知的设备。每台设备都与服务建立认证和加密的 IP 连接,并通过此持久连接接收通知。提供者通过持久且安全的通道与 APN 连接,同时监控用于其客户端应用程序的传入数据。当应用程序的新数据到达时,提供者准备并通过通道向 APNs 发送通知,APNs 将通知推送到目标设备..

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

Push Notifications

【讨论】:

  • 所以 Apple 会为您的设备维护一个静态 IP?
  • 当我了解到我的服务器必须针对每个目标设备向 APNS 发送通知时,我很纳闷! :(
  • @CMCDragonkai 设备建立连接,而不是服务器。
  • @Panama jack 你好先生,如果我输入 note.expiry = Math.floor(Date.now() / 1000) + 43200 秒,消息将在服务器中保留多长时间,而不是最多保留12 小时。我只是想知道到期时间有限制还是按我们的方式进行。
  • 所以设备始终与 APN 服务保持长轮询/套接字类型的连接?如果是这种情况,那么 APN 服务如何处理这么多的连接 - 如果一个服务器可以容纳 50k 连接并且始终有 5 亿用户,那么服务至少需要 10000 台服务器吧。这是一个实际的场景吗?
【解决方案3】:

我创建了一个信息图来解释推送通知的工作流程。希望这会有所帮助。

【讨论】:

  • 很棒的信息图表。但是,它错过了最后的第 6 步:APNS 向 APNS 知道已连接到令牌的设备发送通知。
【解决方案4】:

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

为简单起见,请考虑将 iPhone 连接到互联网。在连接到互联网时,iPhone 会与 Apple Push Notifications 服务器建立连接,此连接是开放连接,这意味着数据可以在数据到达服务器时从服务器发送到 iPhone。

Apple 不将 HTTP 协议用于推送通知,但如果您了解 HTTP 协议,它几乎是一种类似的方法。

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

【讨论】:

  • 如果不是http,他们用什么?
【解决方案5】:

this article 中对推送通知有一个非常好的解释。

在 iOS 中,应用不能在后台执行很多操作。应用只允许执行有限的活动,以节省电池寿命。

但是,如果发生了一些有趣的事情,并且您希望让用户知道这件事,即使他们目前没有使用您的应用程序怎么办?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-20
    • 2017-02-04
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多