iOS Voip通知处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS Voip通知处理相关的知识,希望对你有一定的参考价值。

参考技术A      相信大家常用的都是apns通知,大部分也是集成极光的SDK进行处理,除了软电话以及即时通讯类的APP大家也很少接触Voip通知。在这里就给大家讲一下,一个小白,从了解到完成Voip的过程。

    首先Voip通知会在收到通知的时候后台唤醒我们要接收通知的APP,但APNS不会,在Voip唤醒APP后我们就可以做出相应的操作。比如震动,声音,以及其他等等操作。

    Voip通知需要大家引入<PushKit/PushKit.h>库,需要在BuildPhase -> Link Binary Witn Libraries 中倒入PushKit以及callKit库,如果没有即时通讯功能引入callKit库容易被拒哦。

    证书在这就不给大家多说了,进入开发者后台,点击证书选项很容易就能找到Voip证书。

给大家看一下实现吧

    1、初始化

    2、三个代理方法

        (1)APP启动时通过此代理方法,获取VoipToken以及推送方式Type

  - ( void )pushRegistry:(PKPushRegistry*)registrydidUpdatePushCredentials:(PKPushCredentials*)pushCredentialsforType:(PKPushType)type

           (2) 收到消息后的代理方法 (收到的通知内容都在 payload 参数内,在这个方法里,大家可以做一些收到通知后的内容)

- ( void )pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler:( void (^)( void ))completion

          (3)过期token的类型

- ( void )pushRegistry:(PKPushRegistry *)registry didInvalidatePushTokenForType:(PKPushType)type

如果童鞋们的服务端没有处理过Voip也无从下手的话,可以把下面这篇文章发给他们看哦。https://www.programmersought.com/article/81816206615/

说一下坑,就是处理VoipToken,因为它是data类型,而服务端要的是string类型,所以要进行转换,找了很多方法,最后的方法是这样的,希望大家不要像我一样再次踩坑。

NSMutableString *str = [NSMutableString string];

    const char *bytes = pushCredentials.token.bytes;

    for ( int i =0; i < pushCredentials.token.length; i++)

        [strappendFormat:@"%02x",bytes[i]&0x000000FF];

   

iOS 10:如何在应用程序处于后台时显示传入的 VOIP 呼叫通知?

【中文标题】iOS 10:如何在应用程序处于后台时显示传入的 VOIP 呼叫通知?【英文标题】:iOS 10: How to show incoming VOIP call notification when app is in background? 【发布时间】:2017-01-25 07:16:58 【问题描述】:

我正在处理 audio/video call 并试图让来电 notification 循环 1 分钟,就像 WhatsApp 在 iOS 中显示的应用程序是后台时一样,Notification banner 隐藏并显示铃声 1 分钟。

我试过这段代码,它只触发一次:

 UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
    content.title = [NSString stringWithFormat:@"Video Call from %@",userId];
    content.body = @"";
    content.userInfo = [userInfo mutableCopy];
    content.sound = [UNNotificationSound soundNamed:@""];

    NSDate *now = [NSDate date];
    now = [now dateByAddingTimeInterval:3];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    [calendar setTimeZone:[NSTimeZone localTimeZone]];

    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitTimeZone fromDate:now];

    UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:NO];
    UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"INCOMING_VOIP_APN" content:content trigger:trigger];

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) 
        if (!error) 
            NSLog(@"PUSHKIT : INCOMING_VOIP_APN");
        
    ];

我怎样才能做到这一点?我正在使用UserNotifications.framework (iOS 10)PushKit

【问题讨论】:

@Jayprakash Dubey:你能帮忙解决这个问题吗? 您希望在此处收到连续 1 分钟或 1 分钟间隔的通知? 我希望通知显示 3 秒并隐藏,这个过程应该只运行 1 分钟,就像应用程序在 ios 中处于后台时的 whatsapp 来电一样 @AbhishekThapliyal 我面临同样的问题,你能帮我解决这个问题吗? @siva krishna : 使用带有过期处理程序的后台任务raywenderlich.com/29948/backgrounding-for-ios 在同一线程中显示带有计时器的本地通知 1 分钟播放音频 请也支持我的问题 :) 【参考方案1】:

我的建议是本地通知仅在特定时间可见。您需要做的是在通话时设置本地通知或通知。当通知触发时,在通知的委托方法中,您必须借助 NSTimer 构建自定义逻辑。

创建一个类似于推送通知的视图/或您要为通话显示的视图。将其添加到应用程序窗口,使其显示在所有视图的顶部。 3 秒后移除此视图,在逻辑中您可以显示相同的视图 1 分钟。

【讨论】:

在 backgroundExecution 和 Expiration Handler 的帮助下,我已经完成了我真正需要的 95%,因为我只能在 30 秒内完成 :) 很高兴为您提供帮助 :) 快乐的编码朋友【参考方案2】:

iOS 10 CallKit 好多了,没有更多通知,只有系统调用 UI,就像原生调用一样。 Github 上有一些示例代码,比苹果的 Speakerbox 示例更容易阅读。

【讨论】:

请帮我解决这个问题:***.com/questions/42266258/… 我的意思是我对另一个问题的回答。不是这个:)

以上是关于iOS Voip通知处理的主要内容,如果未能解决你的问题,请参考以下文章

iOS:使用 VOiP 通知而不是“普通”通知

拒绝来电推送后无法处理取消VOIP推送

iOS 10:如何在应用程序处于后台时显示传入的 VOIP 呼叫通知?

iOS VoIP 推送通知/PushKit 不适用于增强通知格式

iOS voip 应用程序休眠和可达性已更改,我可以收到通知吗?

iOS 13 在后台没有收到 VoIP 推送通知