IOS后台聊天应用同步
Posted
技术标签:
【中文标题】IOS后台聊天应用同步【英文标题】:Chat app synchronization on background in IOS 【发布时间】:2014-01-12 18:52:21 【问题描述】:我有一个由 JS 开发的聊天应用程序。我想偶尔向服务器发送 PING。如果应用程序在前台运行,这不是问题。问题是当用户最小化它或打开另一个应用程序时。我的应用失去焦点并进入暂停状态。
我有以下两个用例。
-
为了保持聊天会话打开,我需要每隔
X
分钟向服务器(它是一个 IRC 服务器)发送一次 PING
,即使应用程序在后台运行。
我们还需要检查新消息(通过本地 http 服务器上的 ajax)并将本地通知添加到通知队列,以便当用户点击它时应用可以恢复
我发现苹果不允许在后台运行应用程序。如果他们允许,他们需要特别许可。我发现一些应用程序通过请求有限长度的执行时间来做到这一点。
获得尽可能高的后台执行时间的最佳方法是什么?作为聊天应用程序,我可以请求voip
、location
或任何其他方式的权限吗?
注意:应用程序将在没有互联网的环境中运行。因此推送通知在这里不起作用。
更新:经过大量搜索,我找到了background fetch。 background fetch 似乎适合它。但是问题依然存在,没有及时调用。
【问题讨论】:
没有解决办法。如果您的应用程序不是基于位置的,则您不能使用位置或类似的东西试图继续在后台运行。如果您的应用程序符合条件,最好的选择是 voip,但您没有提供足够的信息来评估它是否符合条件。如果不是,那么唯一的选择是后台获取。这就是 ios,你必须忍受它的限制,如果根据 Apple 的限制,你的应用程序没有资格获得后台执行,那么没有什么神奇的解决方案可以尝试后台执行。 如果你真的做到了,你肯定会获得诺贝尔奖。您如何在没有任何网络活动且同时运行 HTTP 服务器的情况下提供聊天服务? @Mert 如果使用企业分发,是否可以避免苹果批准?那样的话voip应该解决吗? AFAIK,您无法在虚假 VOIP 使用上欺骗 Apple。除此之外,没有IP就无法使用VOIP,反正你需要网络。 没有没有互联网,但IP可用。有网络。 【参考方案1】:这听起来是个有趣的问题。通过阅读各种 cmets,听起来您希望它在本地网络上工作 - 所以您有 wifi,但 wifi 路由器/基站没有连接到实际的互联网?
因为后台刷新是不可预测的 - 你永远不知道它什么时候会更新 - 你可能想要发挥创意。
您可以考虑利用 iOS VOIP 支持,只有在没有 Voice 的情况下! Apple has some tips on VOIP here。 VOIP 基本上使用称为 SIP(会话发起协议)的东西,它是呼叫的信令层,很像 HTTP。您想要利用的正是这个 SIP 层。
这不会很容易,但应该可以实现。设置您的应用程序以使用 VOIP,然后将 PJSip 之类的内容作为您的 SIP 库。然后,在你的本地网络上有一个 SIP 服务器(我相信有很多开源实现),你可以注册你的 iPhone (所以你的服务器知道你的电话在哪里,假装是一个 VOIP 电话)。这应该可行,因为据我所知,它不需要通过 Apple... 并且可以在您的本地网络上愉快地运行。
然后,服务器可以通过 SIP 向手机发送消息,就好像它正在发起 VOIP 会话一样。您的应用程序被唤醒,获取消息 - 如果可能的话,最好从 SIP 消息中获取消息 - 然后只是不启动会话。 SIP 仅用于创建会话,而不仅仅是 VOIP。当我在电信研发部门工作时(很久以前),我们使用它在文本/语音/视频之间进行交换,所有这些都使用本地服务器。
你必须跳很多圈才能完成这项工作,但它会非常棒。我从未尝试过这个实际用例——尤其是在 iOS 上,但我相当确定它会起作用。这有点软糖,但应该能让你到达你需要去的地方。
祝你好运!
【讨论】:
是的,路由器没有联网 还有一点,该应用似乎不会公开,而是在企业内部。所以我认为在这种情况下不需要苹果的批准。虽然我们想把它分发给几家企业 在这种情况下,你应该没问题。 SIP 应该完成这项工作。 iPhone 将保持套接字打开,您可以像打电话一样向设备推送消息!听起来很有趣。我有点嫉妒你能建造它! 如果苹果不需要验证企业应用程序,我不能只在xcode上启用voip模式并且能够在没有SIP的情况下发送http请求吗? 我今天正在考虑这个问题。我不是 100% 肯定,但很有可能。这意味着您可以只使用您的专有协议来完成整个事情!【参考方案2】:您可以使用 PubNub 之类的工具,使用原生 Objective-C 代码或 Phonegap (Cordova) 库在 iOS 上构建这个聊天应用程序。
使用像 PubNub 这样的实时消息网络的美妙之处在于,当应用程序进入后台时,您可以轻松地让聊天消息进入 APNS。
当应用程序在前台时,它可以将它们作为本机 (PubNub) 消息接收。如果它需要“赶上”它在后台错过的消息(但通过 APNS 接收),实现起来很简单。
此外,PubNub 与平台无关——因此您也可以轻松地在 Web、android、BB、Windows Phone 等平台上使用它。
http://www.pubnub.com/blog/build-real-time-chat-10-lines-code/
http://www.pubnub.com/blog/html5-websockets-beautiful-real-time-chat-on-mobile-using-pubnubs-channel-presence/
https://github.com/pubnub/objective-c/tree/master/iOS
https://github.com/pubnub/javascript/tree/master/phonegap
杰瑞米
【讨论】:
但是,如果你的意思是你永远不会有互联网(不仅在某些情况下),这可能不适合你:) 没有互联网。我们正在为没有互联网的人提供聊天和其他服务。 @shiplu.mokadd.im 你认为如何连接没有互联网连接的人?还是您的意思是本地 WiFi 网络上的 bonjour? @moonlight 不,我们没有使用 bonjour。它是一项专有技术。我们只提供聊天服务。 @shiplu.mokadd.im 为了让 PubNub 客户端能够工作,他们应该能够访问 PubNub 远程服务(在 HTTP、HTTPS 端口上)。 PubNub 客户端现在是否可以使用您的proprietary
技术正常工作?至于在后台工作 - 您不能只选择所需的后台模式而不实际使用所选模式。如果您选择voip
并停止与服务器的通信,应用程序将被暂停+Apple 可能会决定拒绝它。与其他模式相同。以上是关于IOS后台聊天应用同步的主要内容,如果未能解决你的问题,请参考以下文章
Twilio 可编程聊天 — 使应用程序徽章与未读消息计数保持同步