即使启用了设备“请勿打扰”,如何显示 VoIP 推送呼叫的传入 CallKit 窗口?

Posted

技术标签:

【中文标题】即使启用了设备“请勿打扰”,如何显示 VoIP 推送呼叫的传入 CallKit 窗口?【英文标题】:How to show incoming CallKit window for VoIP push call even if the device "Do not Disturb" is enabled? 【发布时间】:2021-02-24 03:23:02 【问题描述】:

我们有一个具有 CallKit 功能的应用程序。我面临的一个问题是,如果用户将设备 请勿打扰 模式设置为开启,那么如果设备被锁定,则不会显示 CallKit 传入通知。 当设备处于此模式时,会出现 CXErrorCodeIncomingCallErrorFilteredByDoNotDisturb 的 CallKit 错误,但如果有来电,我仍想向用户显示通知。

注意:我发现即使启用 DND,WhatsApp 仍会显示传入的 CallKit 通知。任何帮助/建议将不胜感激。

【问题讨论】:

【参考方案1】:

如果您想在收到CXErrorCodeIncomingCallErrorFilteredByDoNotDisturb 错误时显示通知,您可以执行以下操作:

cxProvider.reportNewIncomingCall(
    with: aCallId,
    update: vCallUpdate,
    completion:  error in
        guard let vError = error as? CXErrorCodeIncomingCallError else  return 
        if vError.code == .filteredByDoNotDisturb 
            let content = UNMutableNotificationContent()
            content.title = "Call"
            // ...

            let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)

            UNUserNotificationCenter.current().add(request)  error in
                if let vError = error 
                    print(vError.localizedDescription)
                
            
        
    )

当“请勿打扰”处于活动状态时,WhatsApp 在收到音频通话后不会显示通知,它只会显示视频通话通知。那是因为他们仅将 CallKit 和 PushKit 用于音频通话。对于视频通话,他们使用正常的推送通知。

【讨论】:

以上是关于即使启用了设备“请勿打扰”,如何显示 VoIP 推送呼叫的传入 CallKit 窗口?的主要内容,如果未能解决你的问题,请参考以下文章

UNNotification 本地通知和请勿打扰

为啥小米设备未激活请勿打扰?

Android:检测请勿打扰状态?

以编程方式检查 OS X 上的请勿打扰状态

在 Redmi 设备上启用“在锁定屏幕上显示”权限

推送通知 vs 本地通知 vs 电话 vs 请勿打扰