我有一个由JS开发的聊天应用程序。我想偶尔将PING发送到服务器。如果应用程序在前台运行,这不是问题。问题是当用户最小化它或打开另一个应用程序时。我的应用程序失去了重点并进入暂停状态。
我有两个用例。
PING
分钟将X
发送到服务器(它是一台IRC服务器),即使应用程序在后台运行也是如此。我发现苹果不允许在后台运行应用程序。如果他们允许他们需要特别许可。我发现一些应用通过请求有限长度的执行时间来完成它。
获得最高背景执行时间的最佳方法是什么?作为聊天应用,我可以申请voip
,location
或其他任何方式的许可吗?
注意:该应用将在没有互联网的环境中运行。因此推送通知无效。
更新:经过大量搜索后,我找到了background fetch。似乎后台提取将适应它。但问题仍然存在,未及时调用。
答案 0 :(得分:8)
这听起来像个有趣的问题。从阅读各种评论,听起来你想在本地网络上工作 - 所以你有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。当我在Telecoms R& D(很久以前)工作时,我们使用它来交换文本/语音/视频,所有这些都使用本地服务器。
你必须跳出很多箍来使这项工作,但它会非常棒。我从未尝试过这个实际的用例 - 尤其是iOS,但我相信它会起作用。这有点像软糖,但应该让你到达你需要去的地方。
祝你好运!答案 1 :(得分:4)
您可以使用类似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/
https://github.com/pubnub/objective-c/tree/master/iOS
https://github.com/pubnub/javascript/tree/master/phonegap
geremy