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

Posted

技术标签:

【中文标题】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 10:如何在应用程序处于后台时显示传入的 VOIP 呼叫通知?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Parse 推送通知:当应用程序处于后台时显示警报

如何在 iOS 后台模式下获取信标广告数据

移动应用程序是不是总是在录制音频时显示?

Flutter IOS 通知的 FCM 在应用程序处于后台或终止时不显示

iOS Swift Webview 在加载时显示图像

当应用程序进入后台时显示覆盖所有内容的窗口