我们可以从 iOS 设备向 APNs 发送推送通知吗?

Posted

技术标签:

【中文标题】我们可以从 iOS 设备向 APNs 发送推送通知吗?【英文标题】:Can we send push notification to APNs from iOS device? 【发布时间】:2014-06-26 09:57:20 【问题描述】:

我想在不使用后端服务器的情况下将推送通知从 ios 设备发送到另一台 iOS 设备。 iOS 设备是否可以充当服务器并将推送通知发送到 APNs 服务器? 提前致谢。

【问题讨论】:

【参考方案1】:

理论上,您可以将 Apple 推送通知从一台设备直接发送到另一台设备。您只需要应用程序的推送证书、您向其发送通知的设备的设备令牌,以及与 APNS 服务器建立安全 TLS 连接的代码。

然而,有几个实际问题使得使用服务器几乎是强制性的:

    您需要一个地方,安装您的应用程序的所有设备的所有设备令牌都将被发送到并保存在其中。最好的地方是服务器。如果没有服务器,设备 A 如何将其设备令牌发送给其他想要发送推送通知的设备?

    Apple 要求您尽可能长时间地打开与 APNS 服务器的连接,并使用同一连接发送许多通知。如果您在设备上打开与 APNS 服务器的连接,它可能会很短暂(因为设备会频繁切换网络,并且不会一直保持与互联网的连接)。因此,如果您尝试频繁发送许多通知,并且每次都使用新的 APNS 连接,您可能会被禁止(因为 Apple 会将其视为 DDoS 攻击)。

    如果您将推送证书存储在安装您的应用程序的每台设备中(以允许它直接向其他设备发送推送通知),除了在许多地方存储证书的安全问题之外,您将拥有每次推送证书到期(一年一次)时发布您的应用程序的新版本,并且推送通知将停止对未升级到新版本的用户起作用。

【讨论】:

感谢您的简洁解释...@Eran【参考方案2】:

试试NWPusher。

它有一个用于发送推送的 iOS 框架和一个 iOS 演示应用程序,可以将推送通知从 iOS 发送到 iOS。

【讨论】:

【参考方案3】:

您还需要考虑服务器成本(如果您编写自己的服务器,则需要考虑维护和开发时间)。

通过直接从应用设备发送推送: - 您可以获得更好的可扩展性(因为您不必将所有内容都集中在服务器上) - 您无需支付服务器费用或其他服务费用

您可以用于 iOS: - https://github.com/noodlewerk/NWPusher推送者

对于 android: - Send push notification GCM by java

【讨论】:

NWPusher(已在另一个答案中提出)的目的,如其创建者所述,不是替换服务器。它的目的是测试推送通知,而无需经历设置服务器的麻烦。这不是一个可扩展的解决方案,因为它需要存储您的应用想要向其发送通知的所有设备令牌。复制和粘贴几个设备令牌进行测试是一回事。对数千个设备令牌执行相同操作不太实际。生产中的真实应用需要服务器。 这不是真的,您可以在需要时从您的服务器请求设备令牌,然后从设备发送推送。你不需要在你的设备上存储所有的令牌,但即使你可以做到,如果你是一个应用程序消息你必须在你的应用程序中存储有关你的联系人的信息。 那么您同意我的观点,即需要服务器。您的回答并非如此。 您需要一个服务器,例如,如果您有一个需要存储信息的数据库,我同意您的看法。但是要有效地发送推送,您可以简单地在您的应用程序中进行,无需在另一台服务器之间跳转,只需联系苹果或谷歌服务器并发送即可。这更具可扩展性,因为您不必设置工作队列来处理推送,并且您没有与服务器相关的推送成本。 这是一个很好的解决方案。我有一个服务器供我的应用程序访问集线器,但由于没有端口 2195 访问权限,因此无法使用来自服务器的推送。现在我可以使用服务器收集设备令牌并将推送直接从应用程序发送到我喜欢的任意数量的设备。谢谢。

以上是关于我们可以从 iOS 设备向 APNs 发送推送通知吗?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:从 AWS SNS 向 APNS 发送推送通知

无法通过 APNS 向设备发送 MDM 推送通知。

FCM 是直接发送推送通知还是向 APNS 发送消息?

iOS - 从 APNS 重新发送 Apple 推送通知

Python - 通过 FCM / APNs 向 IOS 或 Android 设备推送通知

设备离线时,apns 丢弃了旧的推送通知