我们能否从iOS设备发送推送通知到APNs?

9

我希望能够在不使用后端服务器的情况下,从一个iOS设备向另一个iOS设备发送推送通知。一个iOS设备是否可以像服务端一样,将推送通知发送到APNs服务器呢? 谢谢。

3个回答

6
理论上,你可以直接从一个设备向另一个设备发送Apple推送通知。你所需要的是应用的推送证书、要发送通知的设备的设备令牌以及建立安全的TLS连接到APNS服务器的代码。
然而,有几个实际问题使得使用服务器几乎成为必须:
  1. 你需要一个唯一的地方,将所有已安装你的应用的设备的设备令牌发送并持久化。最好的位置是服务器。没有服务器,设备A如何将其设备令牌发送给其他想要向它发送推送通知的设备呢?
  2. 苹果要求您尽可能长时间保持与APNS服务器的连接,并使用同一连接发送许多通知。如果你在设备上打开一个连接到APNS服务器,它可能很短暂(因为设备经常切换网络,并且不会一直连接到互联网)。因此,如果您频繁地尝试发送许多通知,并且每次都使用新连接到APNS,您可能会被禁止(因为苹果会将此视为DDoS攻击)。
  3. 如果你在每个安装你的应用的设备中存储推送证书(以允许它直接向其他设备发送推送通知),除了在许多位置存储证书的安全问题外,你每年需要发布新版本的应用程序(一次)以更新推送证书,对于不升级到新版本的用户,推送通知将停止工作。

感谢您简明扼要的解释... @Eran - Sazzad Hissain Khan

2

试试NWPusher

它有一个iOS框架用于发送推送,并且有一个iOS演示应用程序,可以从iOS向iOS发送推送通知。


2
您还需要考虑服务器成本(除非您编写自己的服务器,否则除了维护和开发时间之外)。
通过直接从应用程序设备发送推送: - 您可以获得更好的可扩展性(因为您不必将所有内容集中在您的服务器上) - 您不必支付服务器成本或其他服务成本
您可以使用以下工具: - iOS:https://github.com/noodlewerk/NWPusher Pusher - Android:Send push notification GCM by java

NWPusher的目的(已在另一个答案中提到)是不是替换服务器。它的目的是测试推送通知,而无需设置服务器。这不是可扩展的解决方案,因为它需要存储您的应用程序想要发送通知的所有设备令牌。复制和粘贴一些设备令牌进行测试是一回事。对成千上万个设备令牌执行相同操作则不太实际。生产中的真实应用程序需要一个服务器。 - Eran
这不是真的,当你需要时,你可以从你的服务器请求设备令牌,然后从设备发送推送。你不需要在你的设备上存储所有的令牌,但即使你这样做了,如果你是一个应用程序消息传递者,你也必须在你的应用程序中存储有关你的联系人的信息。 - dynamic
那么你同意我的观点,服务器是必需的。你的回答似乎有所不同。 - Eran
如果你有需要存储信息的数据库,我同意你需要一个服务器。但是,为了有效地发送推送通知,你可以直接在你的应用程序中完成,无需在不同的服务器之间跳转,只需联系苹果或谷歌服务器并发送即可。这样更具可扩展性,因为你不必设置工作队列来处理推送通知,并且你的服务器也不会因推送而产生额外成本。 - dynamic
这是一个非常好的解决方案。我有一个用于我的应用程序的中心访问服务器,但由于没有2195端口访问权限,无法从服务器使用推送功能。现在,我可以使用服务器收集设备令牌,并直接从应用程序向任意数量的设备发送推送通知。谢谢。 - Simon Tillson

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