2013-05-08 50 views

回答

13

我会阻止你使用APNS作为“聊天应用程序”的支柱。

如果您需要快速聊天功能,您应该编写自己的基于TCP-socket的服务器。

如果每几秒钟同步是o.k.你可以逃脱一个基于HTTP的服务器后端(但所有的拉同步都可能对网络流量很难 - 所以TCP-socket仍然是更好的选择)。

但是,您可以使用APNS的后备 - 当你的某些设备上的应用程序没有响应(即未连接到服务器),您可以发送初始消息槽APNS(唤醒你的应用程序&通知用户有一条消息在等着他)。

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

至于你的问题:不,苹果很可能(一个永远不知道肯定)不会因为使用APNS聊天而拒绝你的应用程序。但是请注意(正如其他人所说的那样):如果两个用户之间的交互过于频繁,两个用户之间的消息将会“丢失” - 请参阅Roman Barzyczak给您的链接。

+1

我倾向于不同意,虽然确实无法保证交付,但有一些成功的应用程序使用推送通知来达到这个目的。看到这里http://blog.parse.com/2013/02/01/instadm-brings-private-messaging-to-instagram/ – Alex 2013-05-08 23:08:39

13

“如果您要在短时间内向同一设备或计算机发送多个通知,推送服务将只发送最后一个。”

的更多信息:http://developer.apple.com/library/ios/#technotes/tn2265/_index.html

但苹果不会阻止开发者帐户:)

+0

我测试了我的应用程序。聊天时,我不会错过任何文字。我的困惑是,如果成千上万的人同时聊天,会发生什么! 感谢你和苹果,他们不会阻止我的帐户..:-) – sumon 2013-05-08 15:53:51

+0

APNS对于即时通讯不是个好主意。很好的选择是f.e. websocket :) – 2013-05-08 15:56:53

+0

所以,我需要实现套接字编程,我需要创建自己的推送服务器,对吧? – sumon 2013-05-08 15:59:11

6

您可以使用他们的消息,但你会很快发现,也不能保证他们会到达。这被称为推送通知的黑洞。 ;-)

+0

:-( 所以,我需要找出一种不同的方式即时通讯.. – sumon 2013-05-08 15:54:33

+0

推送通知通常应该使用奖金功能,而不是完整的递送方式。最好的选择是使用本地通知。尽管后台应用程序对时间限制可以打开应用程序播放音乐,导航,不断周边支持(蓝牙)或voip应用程序。https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPh oneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#// apple_ref/doc/uid/TP40007072-CH4-SW3 – 2013-05-08 15:57:31

+1

聊天应用程序的本地通知?这是如何工作的?他应该使用Push来通知用户新消息已经到达,但应该是这样。消息传递服务本身应该位于专用服务器上。 – 2013-05-08 16:28:20

1

我喜欢这个answer here.

首先尽量只使用一个APNS的解决方案。 使你的推送通知无状态(它们只能作为“嘿,你有一些新的东西在服务器”)。
因此,当客户端得到推送通知时,它会向服务器请求新数据(消息或其他内容)。

使用OneSignal来简化发送推送通知的代码(来自后端)。如果你的应用程序中的用户在10秒后得到消息,他不关心你是否使用TCP,socket.io或xmpp ...

甚至Whatsapp的消息可能需要几秒钟才能到达。

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