iOS VOIP PushKit 基本配置

前言

在做即时通讯实现音视频通话的时候,对方呼入,响起铃声和震动,提醒用户,对方挂断之后,铃声震动停止,普通的APNS通知,是达不到我们想要的效果,所以需要一种可以用通知就唤醒我们APP的技术,然后使用我们自己的代码进行本地通知,控制通知的出现和消失,苹果的解决方案就是VOIP,PushKit推送。

1、VOIP 配置

PushKit区别与普通APNs的地方是,它不会弹出通知,而是直接唤醒你的APP,进入回调,也就是说,可以在没点击APP启动的情况下,就运行我们自己写的代码,当然,推送证书和注册、回调的方法也和APNs不同。
首先配置VOIP证书:


iOS VOIP PushKit 基本配置_第1张图片
8014766-d7af7a139a2c8551.png

和注册普通的证书方法相同,我们只要类型选择VoIP Services Certificate注册就好,VoIP的证书只用配置一个即可,不需要与APNs一样配置两个,所以不必纠结。


iOS VOIP PushKit 基本配置_第2张图片
8014766-190ef547eb0f3de9.png

和APNs一样,需要在Project-> Capabilities里打开推送开关和设置后台,但是需要注意的是,xcode9以上Background Modes里面取消了勾选voip的选项,结果导致pushkit注册不成功,xcode8才会有专门的VoIP选项也需要打开,这里xcode8就不多说了。
所以我需要手动在info.plist 文件加上 : App provides Voice over IP services


3569202-902292103bbefa0b.png

2、注册PushKit

导入 #import
然后在 application: didFinishLaunchingWithOptions 方法里注册 PushKit 如下:

- (void)setupPushKit
{
    PKPushRegistry *registry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()];
    registry.delegate = self;  
    NSSet *set = [NSSet setWithObject:PKPushTypeVoIP];
    registry.desiredPushTypes = set;
}
#pragma mark - PKPushRegistryDelegate
- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)pushCredentials forType:(PKPushType)type
{
    /// 申请token更新后回调
    if (pushCredentials.token.length > 0) {
        NSData *token = pushCredentials.token;
        DeLog(@"注册成功:%@", token);
    }
}

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type NS_DEPRECATED_IOS(8_0, 11_0)
{
    /// 收到推送后执行的回调
}
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler:(void(^)(void))completion NS_AVAILABLE_IOS(11_0)
{
    /// 收到推送后执行的回调, 最后的block需要在逻辑处理完成后主动回调
}

- (void)pushRegistry:(PKPushRegistry *)registry didInvalidatePushTokenForType:(PKPushType)type
{
    /// token 失效回调
}

你可能感兴趣的:(iOS VOIP PushKit 基本配置)