ios8新特性:pushkit实战总结(voip开发者必读)

Question:pushkit是什么?

Answer:ios8苹果新引入了名为pushkit的框架和一种新的push通知类型,被称作voip push.该push方式旨在提供区别于普通apns push的能力,通过这种push方式可以使app执行制定的代码(在弹出通知给用户之前);而该通知的默认行为和apns通知有所区别,它的默认行为里面是不会弹出通知的。目前来看push kit的用途还局限于voip push(根据笔者的实战经验来看,其他类型的push暂时不能够起作用,sdk也正处于演进中)。

Question: pushkit能帮我们做什么?

Answer:pushkit中的voippush,可以帮助我们提升voip应用的体验,优化voip应用的开发实现,降低voip应用的电量消耗,它需要我们重新规划和设计我们的voip应用,从而得到更好的体验(voip push可以说是准实时的,实侧延时1秒左右);苹果的目的是提供这样一种能力,可以让我们抛弃后台长连接的方案,也就是说应用程序通常不用维持和voip服务器的连接,在呼叫或者收到呼叫时,完成voip服务器的注册;当程序被杀死或者手机重启动时,都可以收到对方的来电,,正常开展voip的业务。也就是说,我们当前可以利用它来优化voip的体验,增加接通率;条件成熟时我们就可以完全放弃后台的长连接,走到苹果为我们规划的道路上。

对于pushkit,除了苹果framework官方文档:https://developer.apple.com/library/prerelease/ios/documentation/NetworkingInternet/Reference/PushKit_Framework/index.html#protocols 以外,能够找到的帮助理解pushkit的莫过于wwdc的视频:712_sd_writing_energy_efficient_code_part_2。该视频也可以从苹果官网下载。

pushkit的局限:

在当前,pushkit仅支持ios8;且该功能正处于演进中,稳定性和在不同ios8小版本设备上的表现也可能有差异,在苹果开发者论坛上也有不少人反馈问题;根据经验,在下个大版本(也就是ios9)上可以期待该功能可以稳定下来。

如果需要在ios8之前的设备上支持pushkit功能,那么需要开发者付出很多额外的努力,这里不展开,有兴趣的同学可以到苹果论坛的相关板块去了解,有一些开发者在这方面走的比较远:

在下面的链接中搜索pushkit关键字,可以查找到相关内容:https://devforums.apple.com/community/ios/connected/push

在简单介绍了pushkit和它能做的事并且了解到它的局限以后,还对pushkit感兴趣的童鞋可以往下继续看了(:)为了避免浪费大家的宝贵时间)。

pushkit的voip功能的实现:

1.跟apns push类似,pushkit的voippush也需要申请证书(apns证书的申请流程参考:https://www.pushwoosh.com/programming-push-notification/ios/ios-configuration-guide/);voip push的证书申请步骤截图如下:

2.使用该证书导出并加载到push服务器上,服务器侧无需做改动,仅替换证书相关的东西即可(具体流程和此前apns证书的加载完全类同);服务器和客户端的交互流程也基本类似。

3.客户端实现:

step1:在工程中添加pushkit;

step2:在工程设置里面的backgroundmode里面添加voip、backgroundfetch、remotenotifications的支持。

step3:保险起见,建议开发者使用最新版本的xcode和最新的sdk;也建议重新申请一个mobile provision文件用于打包。

step4:类似apns通知的客户端实现流程,voip push客户端相关的流程也类似:注册voip push通知,实现pushkit相关的代理。

贴出主要代码:

在应用启动(appdelegate的didfinishlaunchwithoptions)后或根控制器的初始化等方法内调用如下代码: PKPushRegistry *pushRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; pushRegistry.delegate = self; pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; UIUserNotificationSettings *userNotifySetting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:userNotifySetting]; 上面的代码实现了在应用启动时对voip push的注册;

在appdelegate或框架viewcontroller类中实现voip push的代理:

@interface EPTabBarController : UITabBarController<PKPushRegistryDelegate>

– (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type{ if([credentials.token length] == 0) { NSLog(@"voip token NULL"); return; } ZeroPush * push = [[ZeroPush alloc] init]; // push.apiKey = @"iosdev_1Z6JR3PKBWrAWbuHLbLQ"; push.apiKey = @"iosprod_HZDimW5ssYsRQgaSaEoE"; // iosprod_HZDimW5ssYsRQgaSaEoE [push registerDeviceToken:credentials.token channel:@"me"];

}

是不是因为心痛的麻木了,我才笑得最美丽。

ios8新特性:pushkit实战总结(voip开发者必读)

相关文章:

你感兴趣的文章:

标签云: