我有一个由JS开发的聊天应用程序.我想在一段时间内发送PING到服务器一次.如果应用程序在前台运行,这不是问题.问题是用户最小化或打开其他应用程序.我的应用程序失去了重点,并处于暂停状态.

我有以下两个用例.

>要保持聊天会话打开,我需要每X分钟将PING发送到服务器(它的一个IRC服务器),甚至应用程序在后台运行.
>我们还需要检查新消息(通过本地http服务器上的ajax),并向通知队列添加本地通知,以便当用户单击应用程序时可以恢复

我发现苹果不允许在后台运行应用程序.如果他们允许他们需要特别许可.我发现一些应用程序通过请求有限的长度执行时间来实现.
获得最高可能的后台执行时间的最佳方法是什么?作为聊天应用程序,我可以请求voip,位置或任何其他方式的权限吗?

注意:应用程序将在没有Internet的环境中运行.因此,推送通知将不会在这里工作.

更新:做了很多搜索后,我发现了background fetch.它似乎背景提取将套装.但仍然是问题依然存在,并没有及时召开.

解决方法

这听起来像一个有趣的问题.从阅读各种评论,听起来你希望在当地网络上工作,所以你有wifi,但是路由器/基站的WiFi路由器没有连接到实际的网络?

因为后台刷新不可预测 – 你永远不会知道什么时候更新 – 你可能想要获得创意.

您可以研究利用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中,但我相当肯定它会工作.这是一个软糖,但应该得到你需要去的地方.

祝你好运!

在IOS的背景上聊天应用程序同步的更多相关文章

  1. 配置iOS VoIP应用程序以在睡眠/后台模式下运行

    我正在开发基于VoIP的iOS(7.1)应用程序.它的底层套接字编程是用C而不是客观C编写的.应用程序在前台运行良好,但在进入睡眠/后台模式时,它无法从服务器接收任何通信.根据apple文档,我们必须为VoIP使用配置一个appsocket.我无法弄清楚如何配置C套接字.目的是在睡眠模式下运行应用程序,直到它被杀死.从SO中尝试了几个链接甚至几个链接,但由于我是新手,我希望这个配置有一步一步的过程.[注意:在某个地方我发现了CoreFoudation框架,我是否需要使用它?

  2. ios – 为什么在推出APNS通用客户端SSL证书时,Pushkit需要单独的Voip证书?

    只是一个小小的混乱.当我们为APNS提供支持主应用程序,voip等的通用客户端SSL证书时,为什么我们需要为Pushkit提供单独的Voip服务证书?这也将确保相同的连接可用于提供VoipPush和标准Push.解决方法你没有.通用将适用于APNS和PushKit.您的服务器通过在推送通知上设置适当的“主题”来发出它想要的信号.

  3. ios – 什么是VOIP服务证书?

    在证书,标识符和创建证书以创建VOIP服务证书时,iOS开发者门户网站上的配置文件有一个新选项:我在iOS上使用VOIP应用程序,之前从未看过这个选项.有谁知道这个证书是必要的,它将用于什么?

  4. iOS – 通过VoIP应用发送来电通知的最佳做法

    可以想到的来电通知的第一个解决方案是苹果推送通知服务.然而,它不能保证..有一个相对较高的机会可能会丢失..在VoIP应用程序,来电通知是如此重要,我不能错过它太频繁…我无法确定远程通知是否到达.我想知道什么是处理VoIP应用程序的来电通知的最佳做法?

  5. 在IOS的背景上聊天应用程序同步

    作为聊天应用程序,我可以请求voip,位置或任何其他方式的权限吗?

  6. iOS:无法完成套接字错误操作断管

    我每隔一段时间就会从iOS应用程序向套接字服务器发送一些数据.它正确地发送数据.我看到一个奇怪的问题,如果iOS设备屏幕在从iOS应用程序发送数据时关闭,然后如果我在设备上屏幕,然后我收到以下错误,应用程序已经与套接字断开连接或有时它会崩溃应用程序:当设备屏幕关闭时,我的iOS应用程序停止向套接字发送数据.然后再打开屏幕,插座连接断开/断开管道错误.怎么解决?

  7. ios – 如何使用UIRemoteNotificationTypeVoIP?

    解决方法如果有人对此文档感到困惑,他们可能意味着在WWDC2014中提出的PushKitFramework和PKPushTypeVoIP,编写节能代码,第2部分

  8. android – 如何将新字段和记录添加到呼叫日志(呼叫历史)数据库?

    我正在尝试制作VoIP应用程序,我想知道是否可以使用“呼叫日志”内容提供商执行以下操作–>我想为VoIP呼叫添加新的呼叫记录记录以及常规呼叫的呼叫记录.如何将新记录添加到现有的呼叫日志内容提供商?>我想将自定义字段添加到呼叫日志中,例如会话ID和SIP地址字段.如何自定义通话记录数据库?

  9. Doze模式下的Android VOIP应用程序行为

    我正在研究Android上的传统VOIP应用程序.它现在不使用GoogleCloudMessaging技术,而是永远保持自己的TCP连接.最近谷歌推出了Dozemode的AndroidM预览版所以问题是:是否有任何解决方法如何在不重新设计整个系统以使用GCM的情况下,应用程序如何在打盹模式下接收传入呼叫/消息?解决方法您可以使用ACTION_REQUEST_IGNORE_BATTERY_OPTIM

  10. .net – 是否有Windows Phone 7的SIP库?

    或者,最后,在WindowsPhone7上使用某种VoIP吗?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部