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 10:如何在应用程序处于后台时显示传入的 VOIP 呼叫通知?
iOS VoIP 推送通知/PushKit 不适用于增强通知格式