如果我使用苹果推送通知服务进行即时通讯,苹果会封锁我的账户吗?

8

我希望创建一个使用APNS的iOS聊天应用。如果我有10,000个活跃用户并且他们在持续聊天,苹果是否会封锁我的开发者账户?这方面是否有任何限制?

4个回答

14

我建议你不要把APNS作为“聊天应用”的主干。

如果你需要快速的聊天功能,你应该编写基于TCP套接字的服务器。

如果每隔几秒钟同步一次没有问题,你可以使用基于HTTP的服务器后端(但所有的拉取同步可能对网络流量造成压力 - 所以TCP套接字仍然是更好的选择)。

但是你可以将APNS用作备选方案 - 当某个设备上的应用程序没有响应(即未连接到服务器)时,你可以通过APNS发送初始消息(唤醒你的应用程序并通知用户有一条消息在等待他)。

只要用户打开你的应用程序,你就应该切换回基于TCP套接字或基于HTTP请求的服务器通信。

至于你的问题: 不,苹果很可能不会因为你使用APNS进行聊天而拒绝你的应用程序。但请注意(正如其他人已经说过的): 如果两个用户之间的消息互动过于频繁,消息将会“丢失” - 参见Roman Barzyczak给你的链接。


1
我倾向于不同意,虽然送达并不保证,但有一些成功的应用程序正是使用推送通知来实现这一目的。请参见此处http://blog.parse.com/2013/02/01/instadm-brings-private-messaging-to-instagram/。 - Alex

13

我已经测试了我的应用程序。当聊天时,实际上我没有错过任何文字。我的困惑是,如果成千上万的人同时聊天会发生什么!感谢您和苹果,他们不会封锁我的帐户.. :-) - sumon
APNS不是即时通讯的好选择。非常好的替代方案是websocket :) - Roman Barzyczak
所以,我需要实现套接字编程,并且需要创建自己的推送服务器,对吧? - sumon
3
当应用程序正在运行时,您需要自己的套接字服务器来进行即时通讯,但是当应用程序关闭并且您需要通知用户有新消息时,您需要使用APNS。 - Roman Barzyczak
4
我完全同意Roman的观点。拥有自己的套接字服务器和APNS用于备份(以启动“对话”)。这不是与1000个用户丢失消息的问题,如果在短时间内只向同一设备发送少量消息,你仍然会丢失消息。即使在生产测试模式下您没有丢失任何消息,也不能保证在分发模式下不会丢失消息。 - Rok Jarc

6
你可以用它们来发送消息,但你很快就会发现它们无法保证送达。这被称为推送通知的黑洞。;-)

推送通知应该作为奖励功能而不是完全可靠的交付方法。您最好使用本地通知。尽管后台应用程序有时间限制,但除了播放音乐、导航、常量外围支持(蓝牙)或voip应用程序之外,它们可以打开的时间有限。 https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW3 - Mark McCorkle
1
聊天应用的本地通知?那怎么可能实现呢?他应该使用推送来通知用户有新消息到达,但仅此而已。消息服务本身应该运行在专用服务器上。 - Chris Wagner

1

我喜欢这个这里的答案。

首先尝试使用仅限APNS的解决方案。 使您的推送通知无状态(它们仅用作“嘿,您在服务器上有一些新东西”)
因此,当客户端收到推送通知时,它会请求服务器获取新数据(消息或其他内容)。

使用OneSignal简化发送推送通知的代码(从后端)。如果应用程序中的用户在10秒钟后收到消息,则不关心您是否使用了TCP、socket.io还是xmpp...

即使Whatsapp的消息也可能需要几秒钟才能到达。

聊天应用程序不是实时游戏。终端用户可以接受几秒钟的延迟。


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