热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

iOS13Killing应用程序,因为它在收到PushKitVoIP回调后从未向系统发布来电

如何解决《iOS13Killing应用程序,因为它在收到PushKitVoIP回调后从未向系统发布来电》经验,为你挑选了1个好方法。

升级到iOS Beta 13之后,我注意到了一件不愉快的事情:我的应用有时会因传入的VoIP推送而崩溃。

在崩溃报告中,我看到以下内容:

iOS 13 Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP callback 

Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x1af21b9f0 __exceptionPreprocess
1  libobjc.A.dylib                0x1af7284fc objc_exception_throw
2  CoreFoundation                 0x1af11efec + 
 [_CFXNotificationTokenRegistration keyCallbacks]
3  Foundation                     0x1aeda1330 -[NSAssertionHandler 
 handleFailureInMethod:object:file:lineNumber:description:]
4  PushKit                        0x19caa6b54 -[PKPushRegistry 
 _terminateAppIfThereAreUnhandledVoIPPushes]
5  libdispatch.dylib              0x1afa441ec _dispatch_client_callout
6  libdispatch.dylib              0x1af9f6c6c 
_dispatch_lane_barrier_sync_invoke_and_complete
7  PushKit                        0x19caa5b74 __73-[PKPushRegistry 
 voipPayloadReceived:mustPostCall:withCompletionHandler:]_block_invoke
8  libdispatch.dylib              0x1afa43678 
 _dispatch_call_block_and_release
9  libdispatch.dylib              0x1afa441ec 
  _dispatch_client_callout

10 libdispatch.dylib              0x1af9f61f8 
_dispatch_main_queue_callback_4CF$VARIANT$mp
11 CoreFoundation                 0x1af1992a0 
CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE
12 CoreFoundation                 0x1af1942a8 __CFRunLoopRun
13 CoreFoundation                 0x1af1937ac CFRunLoopRunSpecific
14 GraphicsServices               0x1ae395180 GSEventRunModal
15 UIKitCore                      0x1b6e60244 UIApplicationMain
16 VOIPProject                    0x1009822d8 main + 25 
(AppDelegate.swift:25)
17 libdyld.dylib                  0x1af6e9e7c start

我不明白如何解决该问题。每当收到VoIP推送消息时,我是否必须发布CallKit来电屏幕?这听起来很疯狂,因为在显示带有来电的屏幕之前,我检查通知是否有效。谁能解释我该怎么办?



1> pepsy..:

在此线程从苹果论坛上,来自苹果的工作人员解释说有人这样:

在iOS 13.0和更高版本上,必须使用CallKit框架在收到传入IP语音呼叫时,并且在didReceiceIncomingPush()方法执行完毕之前,报告传入的IP语音呼叫,否则系统将终止您的应用程序。

反复未能报告呼叫可能会阻止您的应用接收更多来电通知。

基本上,您不能再将VoIP推送用于非VoIP消息传递,而将需要使用常规的推送通知。

这是在WWDC会议“应用程序后台执行的进展”会议期间宣布的:https://developer.apple.com/videos/play/wwdc2019/707/


我一直在寻找有关如何适应此更改的应用程序的答案,我可以收集以下内容:

语音推送

当您的应用收到这种推送时,它将需要使用CallKit报告新的来电。因此,这种推送仅适用于使用CallKit的呼叫。

建议您将通知的apns-expiration值设置为0或很小的值,这样您就不会收到推送通知,并且会被迫为已过期的呼叫显示呼叫屏幕。

推送通知

定期推送通知是另一种选择。如果您的服务器具有编写通知文本所需的所有信息,则可以发送甚至不会在后台运行应用程序的通知。如果需要在将通知内容呈现给用户之前修改通知的内容,则可以使用Notification Service应用程序扩展,并且如果需要唤醒应用程序并在后台执行某些操作,则可以发送静默推送通知。

通知服务应用程序扩展

要使用此功能,必须将通知的设置mutable-content为1。这样,扩展程序将在收到通知之前将其显示给用户,允许您在30秒的时间内更改其内容。

缺点是您的应用程序将保留在后台,仅允许您的扩展程序运行。这可能意味着您将需要在应用程序和扩展之间共享信息和代码,方法是使用用户默认值,钥匙串或共享整个数据库(如果您的应用程序没有为此做好准备,这可能不是一个简单的任务) 。

静默推送通知

要发送静默推送通知,您必须将通知的设置content-available为1并删除它的alertbadgesound。该通知将在后台唤醒您的应用,并调用您的应用代表的didReceiveRemoteNotification

该选项的缺点很烦人:

您将只获得30秒的运行时间。

这些通知必须apns-priority为5,这可能导致它们被分组并突发发送,甚至被限制或不发送。

如果用户强行关闭应用程序,它将完全忽略所有静默通知,直到用户再次打开应用程序为止。


@MehulThakkar是的,iOS13上的这一更改带来了很多麻烦。我对自己的解决方案仍然不满意,但是感觉别无选择。在我正在使用的应用程序中,用户可以选择不使用callkit ...然后,我们使用自己的呼叫屏幕,并向用户显示通知,以供他打开应用程序并查看呼叫屏幕。但是,我们曾经使用voip push来进行此通知,现在我们不得不使用常规的push,这可能会延迟到达,可能是在被叫方已经放弃通话之后。
推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 探索如何使用公共数据集为您的编程项目提供动力。无论您是编程新手还是有经验的开发者,本文将为您提供实用建议和资源,帮助您启动并运行一个创新的数据驱动型项目。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 本文探讨了如何在Swift编程语言中先声明函数,随后再定义其具体实现的方法。 ... [详细]
  • 本文探讨了在iOS平台上开发BLE(蓝牙低功耗)应用程序时遇到的挑战,特别是如何实现应用在后台模式下仍能持续扫描并连接蓝牙设备。文章提供了具体的配置方法和常见的问题解决方案。 ... [详细]
  • 本文探讨了一个场景:用户成功登录后,如何确保Master-Detail视图控制器以模态形式展示。 ... [详细]
author-avatar
023597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有