我有以下两个用例.
>要保持聊天会话打开,我需要每X分钟将PING发送到服务器(它的一个IRC服务器),甚至应用程序在后台运行.
>我们还需要检查新消息(通过本地http服务器上的ajax),并向通知队列添加本地通知,以便当用户单击应用程序时可以恢复
我发现苹果不允许在后台运行应用程序.如果他们允许他们需要特别许可.我发现一些应用程序通过请求有限的长度执行时间来实现.
获得最高可能的后台执行时间的最佳方法是什么?作为聊天应用程序,我可以请求voip,位置或任何其他方式的权限吗?
注意:应用程序将在没有Internet的环境中运行.因此,推送通知将不会在这里工作.
更新:做了很多搜索后,我发现了background fetch.它似乎背景提取将套装.但仍然是问题依然存在,并没有及时召开.
解决方法
因为后台刷新不可预测 – 你永远不会知道什么时候更新 – 你可能想要获得创意.
您可以研究利用iOS VOIP支持,只有没有Voice! Apple has some tips on VOIP here. VOIP基本上使用称为SIP(会话发起协议)的东西,它是呼叫的信令层,很像HTTP.这是您想要利用的这个SIP层.
这不是很容易,但应该是可以实现的.设置您的应用程序使用VOIP,然后查看像PJSip作为您的SIP库.然后,在您的本地网络上有一个SIP服务器(我确信有很多开源实现),您可以注册您的iPhone(所以您的服务器知道您的手机在哪里,假装是一个VOIP手机).这应该是有效的,因为我不知不觉中要通过苹果,而且会在本地网络上快乐地运行.
然后,服务器可以通过SIP向手机发送一条消息,好像是在煽动VOIP会话.你的应用程序被唤醒,获取消息 – 理想情况下,如果可能,从SIP消息 – 然后只是不启动会话. SIP仅用于创建会话,而不仅仅是VOIP.当我在电信研发(很久以前)工作时,我们正在使用它在文本/语音/视频之间交换,所有这些都使用本地服务器.
你必须跳过很多圈才能使这项工作,但这将是非常棒的.我从来没有尝试过这个实际的用例 – 尤其是在iOS中,但我相当肯定它会工作.这是一个软糖,但应该得到你需要去的地方.
祝你好运!