ios后台运行-Voip后台实现过程中的问题,底层用sip的库,求支援求帮助求分析解决

问题描述

Voip后台实现过程中的问题,底层用sip的库,求支援求帮助求分析解决

公司目前在做一个voip网络电话的项目,底层的库是用的sip。我是负责写上层app的,底层的库都是封装在.a的静态库里面。我看不到底层的实现内容。
我以前有实现过在后台一直运行,但是这个项目怎么弄都弄不出来,有各种问题。由于公司的帐号是个人帐号,需要上架审核。我有以下问题,希望大家有会的能帮忙回答一下。谢谢大家。我现在是用xcode5,然后是用ios7的4s来写程序测试。
1、这个类似网络电话的app,如果需要上架的话,能实现怎么样的后台?通过在info.plist里的UIBackgroundModes那边设置voip,是可以实现无限后台(就是程序内的任何操作都不会停止)还是间歇性会挂起然后有消息(比如来电消息)时才唤醒程序?哪种方式才可以通过app的审核?

2、无限后台有可以在后台通过一直放静音文件实现,也可以通过设置地理信息在后台实现。这两种方式因为要审核的话不会通过,因为不是音乐应用和定位应用。所以只考虑voip。
voip能实现吗?
我试过这两种方法:
都在info.plist里设置了voip项的。
第一种是在applicationDidEnterBackground:里面写了以下代码。
UIApplication *app = [UIApplication sharedApplication];
? ? ? ? __block? ? UIBackgroundTaskIdentifier bgTask;
? ? ? ? bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? ? ? if (bgTask != UIBackgroundTaskInvalid)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? bgTask = UIBackgroundTaskInvalid;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? });
? ? ? ? }];
? ? ? ? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? ? ? if (bgTask != UIBackgroundTaskInvalid)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? bgTask = UIBackgroundTaskInvalid;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? });
? ? ? ? });
这种情况下,如果手机连着电脑来运行程序,程序退到后台后程序会一直运行,丝毫不停止,控制台的信息会一直打印输出。但是,当不连着电脑时,单独在手机上点开运行,程序就会在后台过了一会就挂起,当重新点开程序时和第一次打开程序一样,从头开始运行,就是没有在后台一直跑。

第二种是在applicationDidEnterBackground:里面写了以下代码。
BOOL backgroundAccpeted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{
? ? ? ??UIApplication?*app = [UIApplication?sharedApplication];
? ??__block? ??UIBackgroundTaskIdentifier?bgTask;
? ??bgTask = [appbeginBackgroundTaskWithExpirationHandler:
? ? ? ? ? ? ??^{
? ? ? ??[app?endBackgroundTask:bgTask];
? ? ? ??bgTask =?UIBackgroundTaskInvalid;
? ??}];
? ? }];

UIApplication *app = [UIApplication sharedApplication];
? ? __block? ? UIBackgroundTaskIdentifier bgTask;
? ? bgTask = [app beginBackgroundTaskWithExpirationHandler:
? ? ? ? ? ? ? ^{
? ? ? ? [app endBackgroundTask:bgTask];
? ? ? ? bgTask = UIBackgroundTaskInvalid;
? ? }];
?? ?
? ? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
? ? ? ? while (1)
? ? ? ? {
? ? ? ? ? ? NSLog(@"%d",temptest);
? ? ? ? ? ? sleep(1);
? ? ? ? ? ? temptest++;
? ? ? ? }
? ? });

这种情况下,不管是手机连着电脑运行还是手机单独运行都是相同的情况。当进入后台后,前三分钟都是一直在运行的,但一旦到了三分钟之后,程序会被暂停,暂停时间大概7-10分钟,过了暂停时间程序会又自己在后台运行起来,就是接着刚刚暂停的位置继续跑,就是比如前三分钟一个int值跑到了175这样,继续在后台运行时会接着跑176.177...。然后这时候能跑1分钟,接着又暂停,7-10分钟之后又在底层自己跑起来。依次循环。不管过多久,只要点开程序就会从暂停的地方继续运行,不会像第一种情况一样整个程序从头开始运行。当程序在后台处于暂停状态时,点开后会继续跑。就是间断性,那7-10分钟暂停的话,有来电信息我是接受不到的,但是如果在那跑起来的1分钟内是可以接收到的。

以上两种方式有什么问题吗?

3、我网上查了挺多资料的了,当然可能有些重要的我没查到。
用voip后台,是需要配合TCP/IP socket来实现的。但是说实在的我看不大懂要怎么去实现这样的后台运行,因为处理tcp连接信息是在底层控制的。我看到资料说需要设置NSURL,NSStream,CFStream中的一样,所以我该怎么设置,需要在底层那边修改还是我在程序内就能自己编写?
我查了资料,是这么写的
CFReadStreamRef readStream;?CFWriteStreamRef writeStream;??//用CFStreamCreatePairWithSocket 在已有的socket 上创建输入输出流?CFStreamCreatePairWithSocket(NULL, m_socket, &readStream, &writeStream);??//设置属性kCFStreamNetworkServiceTypeVoIP?CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);?CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);??CFReadStreamOpen(readStream);?CFWriteStreamOpen(writeStream);
这些代码应该写在哪个地方?是底层吗?还是在程序内就可以写?

资料上说系统接管一个socket流,然后这个流上有信息过来会唤醒程序10秒。?是需要这样实现的吗?具体应该怎么实现?

底层是sip,我这边上层可以切换是udp还是tcp/ip协议,当使用udp的时候底层会在控制台有这样的输出
ortp-message-keep alive: 0
ortp-message-eXosip: Keep Alive sent on UDP!
ortp-message-eXosip: Reseting timer to 10s before waking up!
当使用tcp的时候会有这样的输出
ortp-message-keep alive: 0
ortp-message-tcp_tl_keepalive socket node:61.142.220.193:5060 , socket 21 [pos=0], connected
ortp-message-eXosip: Reseting timer to 10s before waking up!
是不是底层已经设置好了可以voip后台运行?这些信息大概会10s打印输出一次。

4、还有ios7在设置-通用-后台应用程序刷新里面有显示就是在后台可以运行的一些程序,我用上面问题2中提到的两种情况去运行后,程序不会在这里面显示出来。而一些类似于印象笔记,line,linphone这样的程序就会在这里面显示,这些程序是不是也设置了voip程序,我要如何做才能在这里面显示出来?

5、如果我用APNS可以和VOIP scoket后台一起使用吗?

其实我最想让程序能一直无限后台运行,不会暂停,又担心这样不能通过审核。
哪位知道的朋友请帮助我一下。我找了很多帖子,很多问答区,很多这样的问题都是没有人回答的,我不知道是不是知道的人太少了。当然我这个问答贴可能也没有人回答。
如果你看完了这么一大串问题,不回答也没关系,谢谢你把问题看完。
但是我还是好希望有人能给我处理的办法啊。谢谢啊。

解决方案

我也遇到了一样的问题,请问你现在解决了吗?方便的话请加下QQ,大家可以方便交流

解决方案二:

QQ281187134

时间: 2024-09-18 01:25:23

ios后台运行-Voip后台实现过程中的问题,底层用sip的库,求支援求帮助求分析解决的相关文章

ios-VideoToolBox 后台运行

问题描述 VideoToolBox 后台运行 大神,请问IOS用VideoToolBox进行硬件编码,可以在后台运行吗?(按hone键后) 解决方案 ios 后台运行在后台运行rtorrent 解决方案二: http://www.xuebuyuan.com/2069133.html 解决方案三: 硬解可以用,但是硬编不可以,回到前台时重启编码器就可以用了,不然就卡死了哦,这个问题我遇到过哈

详解Android 视频播放时停止后台运行的方法

详解Android 视频播放时停止后台运行的方法 在项目中,遇到了视频播放,可是后台播放的音乐也同时播放,我们要的效果肯定是视频播放的时候,音乐暂停,视频播放完了我们就继续播放音乐,于是就找到了这个方法. /**@param bMute 值为true时为关闭背景音乐.*/ @TargetApi(Build.VERSION_CODES.FROYO) public static boolean muteAudioFocus(Context context, boolean bMute) { if(c

jsp-tomcat后台运行JSP OA可行吗?

问题描述 tomcat后台运行JSP OA可行吗? 我们公司用JAVA写的网上办公自动化系统(OA) 最近给我下达个任务 叫我研究一下 怎么实现TOMCAT后台运行带起 公司开发的 JSP OA系统... 我刚毕业对这方面不熟 求大神帮帮忙 解决方案 找到方法了.....tomcat有两种一种是zip版本会有dos界面另外一种是window server 安装版那个没有后台哈哈哈哈 解决方案二: 把项目部署进去跑起来就行了 解决方案三: 你直接新建web项目,运行后讲你的项目部署到tomcat就

android 后台服务-android app安装时最后一步提示后台运行 这个radiobutton 怎样才能实现:默认勾选

问题描述 android app安装时最后一步提示后台运行 这个radiobutton 怎样才能实现:默认勾选 android app安装时最后一步提示后台运行 这个radiobutton 怎样才能实现:默认勾选 如微信,京东 都实现了 解决方案 LZ解决了吗?特地下载了微信安装测试,发现它默认勾选了! 解决方案二: lz解决了吗?我也一直被这个问题困扰

使用ExpressionBuilder 类 在分析页的过程中计算表达式

ExpressionBuilder 类是在分析页的过程中创建代码表达式的表达式生成器的基类. 表达式生成器分析声明性表达式,并创建代码来检索绑定到控件属性的值.在非编译方案中,支持非编译功能的表达式生成器在运行时计算表达式. 页分析器如果遇到用 <%$ %> 字符串分隔的表达式,则根据字符串中的前缀为表达式创建表达式生成器.前缀是字符串中冒号 (:) 左侧的部分.例如,分析器如果遇到字符串 <%$ ConnectionStrings:MessageDB %>,则创建一个 Conne

网站优化过程中站长需要监控那些有效数据

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 众所周知,网站优化过程中,网站流量是否正常,网站权重是否在循序渐进的不断提升,除了表面上直接搜索关键词观察网站排名之后,我们还必须注意到网站潜在面临的危险因素,这些风险因素,我们就要通过网站的一些隐形数据去帮助我们调整优化思路,发现优化过程中的存在问题,具体这些细节都包含那些方面呢?好,咱们闲话短续进入今天主题,网站优化过程中站长需要监控那些有效数据. 第一:统计网站每个阶段的流量变化情况.很多站长都有这个习惯每天打开网站后台分析网站数据,

无线路由器拨号过程中可能会遇到的问题以及解决方法

在使用无线路由器拨号的过程中总会遇到这个那个的问题,也许你不会不知道如何解决,在这里就为大家列出可能会发生的问题的以及解决的方法! [问题] 用户用QUIDWAY路由器连接时广域网口的PPP协议不通,判断问题所在. [解决]:PPP协议属ISO二层协议,所以判断问题所在要从第一层起判断,用show in s N (N为所用串口)查看底层DTR,DSR,RTS,CTS,DCD信号是否都UP, 如不是,说明DTE与DCE间物理线路没连好,查一下连接电缆问题,当串口提示UP且无错帧时,说明物理层正常.

iPad mini2升级iOS7.1.2过程中卡死 ? iPad mini2升级iOS7.1.2过程中卡死解决方法

小编提示:此解决方法可用于iPod touch5  iPad mini2 iPad mini iPad air,iphone4,iphone5,iphone4s/5s,ipad系列产品哦. 故障现象 我的iPad mini2升级iOS7.1.2过程中卡死了,不过怎么等待多长时间都无法再有进展了 解决办法

ios-新手IOS后台运行实现问题

问题描述 新手IOS后台运行实现问题 要想实现程序可以在后台运行,而且10分钟后不被kill掉,要怎么做呢? 网络连接使用voip可以实现长连接,查了下长连接是一直与服务器保持通信, 可以使你处于活跃状态,但是长连接建立以后,第一次可以发送数据到服务端,第二次要怎么做呢? 毕竟长连接是连接-发送数据-心跳-发送数据-心跳....断开这样的吧,第二次获取数据的话是再次请求吗?还有是客户端向服务端发送心跳,还是服务向客户发送心跳呢?毕竟这时客户端已经进入了后台运行啊! 还有就是app进入后台可以定义