美文网首页
iOS 如何使用VoIP

iOS 如何使用VoIP

作者: devchena | 来源:发表于2018-05-16 09:02 被阅读1337次

作者:闲鱼技术
链接:https://juejin.im/post/5ae194adf265da0b9d77eb87
来源:掘金

iOS8中苹果新引入了PushKit的框架和一种新的push通知类型:VoIP push,提供区别于普通APNS push的能力,通过这种push方式收到消息时会直接将已经杀掉的APP激活。

PushKit主要有3步操作:

1,通过PKPushRegistry注册VoIP服务(一般在APP启动代码里添加)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    PKPushRegistry *pushRegistry = [[PKPushRegistry alloc]  initWithQueue:dispatch_get_main_queue()];
    pushRegistry.delegate = self;
    pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
    return YES;
}

2,实现PKPushRegistryDelegate获取token方法

- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type {
    NSString *str = [NSString stringWithFormat:@"%@",credentials.token];
    NSString *tokenStr = [[[str stringByReplacingOccurrencesOfString:@"<" withString:@""]
                           stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
    //上传token处理
}

3,实现PKPushRegistryDelegate接收VoIP消息方法

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type {
    NSDictionary *alert = [payload.dictionaryPayload[@"aps"] objectForKey:@"alert"];
    //调用CallKit处理
}

==========
在做VoIP方案时可能会遇到的问题:
Q:锁屏时收不到VoIP消息的问题
A:开发时遇到一个非锁屏下能正常收到VoIP push,但锁屏时经常收不到的问题,经排查,是锁屏下收到VoIP时APP发生了crash,crash日志里显示的原因是Termination Reason: Namespace SPRINGBOARD,Code 0x8badf00d,这个错误是因为watchdog超时引起,程序启动时,超过了5-6秒APP会被系统杀掉,而系统在锁屏的状态下启动要比激活状态慢很多,很容易触发watchdog的crash。解决的方法就是优化APP启动时的代码,把可以延后的操作尽量延后执行,同时我对设备的cpu也做的了判断,armv7的低端设备启动慢容易超时不使用VoIP,保留APNS发送。
Q:APP启动时收不到VoIP token问题
A:要接收VoIP token 除了要引入PushKit库,注册并实现代理外,还要在工程的Capabilities中打开3个backmode:Background fetch、Remote nofications、Voice over IP,以及Push Notifications(在工程里打开设置,和手机里设置的接收通知权限没有关系,即使用户将设置里的APNS关闭也能收到VoIP消息)。

相关文章

  • iOS 如何使用VoIP

    作者:闲鱼技术链接:https://juejin.im/post/5ae194adf265da0b9d77eb87...

  • iOS VoIP实践

    简介 PushKit是苹果在iOS8之后推出的新框架,iOS10之后,苹果更是禁止VOIP应用在后台使用socke...

  • PushKit的使用

    1、为什么使用PushKit? iOS10之后,苹果推出了CallKit框架增强VoIP应用的体验,主要表现在3个...

  • iOS VOIP

    1、IOS允许App的一个Socket在App切换到后台后仍然保持连接. 这样,当有通话请求的时候,App能及时处...

  • 收藏博客

    iOS: iOS VOIP后台处理 python: tornado 翻译 tornado 框架 数据库: 数据库基...

  • 生成终端、服务器证书

    生成APNS或者VOIP证书后 生产环境 ios推送证书更换

  • iOS-app进入后台申请10分钟活跃时间

    IOS允许长时间在后台运行的情况有7种: audio VoIP GPS 下载新闻 和其它附属硬件进行通讯时 使用蓝...

  • iOS PushKit的使用

      由于iOS 10禁止了VoIP类应用常驻后台的权限,导致Xcode 8 打包出来的VoIP类应用后台长连接失效...

  • iOS CallKit使用微信更新6.6.0版本语音好像系统打电

    iOS10以上:CallKit的简单应用提供VoIP功能 其实QQ早已经实现了CallKit的VoIP这一个功能,...

  • VOIP

    最近在做IOS 版 的VOIP 功能 NSArray * array = [[UIApplication shar...

网友评论

      本文标题:iOS 如何使用VoIP

      本文链接:https://www.haomeiwen.com/subject/hewudftx.html