如果应用程序从后台终止,则不会收到 Pushkit 通知

Posted

技术标签:

【中文标题】如果应用程序从后台终止,则不会收到 Pushkit 通知【英文标题】:Pushkit notification is not received if application is killed from background 【发布时间】:2017-08-26 05:40:31 【问题描述】:

我正在使用 PKPushkit 进行 voip 呼叫通知。

如果我的应用从后台被杀死,那么我将无法在内部收到通知:

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, forType type: PKPushType)

如果应用程序在后台,通知仍然有效。我已启用项目本身的以下设置。

1) 在功能内部,推送通知处于开启状态。

2) 后台模式开启:

一个。应用程序使用 AirPlay 播放音频或流式传输音频/视频。

b.应用从网络下载内容。

c。应用下载内容以响应推送通知。

d。应用提供 IP 语音服务。

谁能帮我找出我失踪的地方?

【问题讨论】:

【参考方案1】:

当你的应用程序处于终止状态时,它可能会崩溃。

检查如何调试处于终止状态的应用程序。

https://github.com/hasyapanchasara/PushKit_SilentPushNotification

【讨论】:

同意。当应用程序在后台重新启动时,您需要重新启动 WebRTC 进程。例如等待网络或信令服务器准备好可能需要一些时间。【参考方案2】:

ios 13 上,应该调用一个新的 pushkit 委托方法:

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void

它不同于原型末尾的完成处理程序(现已弃用)。

未能调用完成处理程序将禁止您的应用在处于后台或强制退出状态时接收 pushkit 通知。当应用程序在前台时它仍然有效。

【讨论】:

对我不起作用,设置 fcm 后 pushkit 不再起作用【参考方案3】:

一般而言,VoIP 实施包含以下步骤:

    添加 VoIP 功能 注册 voip-Pushes:
    private func registerForVoIPPushes() 
        voipRegistry = PKPushRegistry(queue: nil)
        voipRegistry?.delegate = self
        voipRegistry?.desiredPushTypes = [.voIP]
    
    UNUserNotificationCenterDelegate 的实现
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void)

    Offcourse服务器端部分实现

    !最隐蔽和可能的问题: 一旦应用程序收到 VoIP 通知并且没有将其报告给 CXProvider 对象,它就不会再收到通知,直到您重新安装它。因此,请务必报告您获得的每个 VoIP。

【讨论】:

以上是关于如果应用程序从后台终止,则不会收到 Pushkit 通知的主要内容,如果未能解决你的问题,请参考以下文章

如何测试 PushKit Voip?

当应用程序处于终止状态时,iOS 静默推送通知不会收到

如果应用程序被杀死/运行,ios显示/隐藏通知

如果在 ios 中收到通知时从后台删除应用程序,didReceiveLocalNotification 不会触发

应用程序被终止时未收到推送通知 - iOS

在 IOS 中未收到 FCM 推送通知。而应用程序在后台或终止。我使用 FirebaseMessaging 6.0.9 Pub