好吧,我对此进行了进一步调查,但首先我应该指出,我没有通过实际尝试为此构建一个项目来验证这一点,因为现在对我来说太耗时了。
I found this(评论中已经提到),this,最重要的是本技术问答.
我从这些帖子中特别是 Apple 技术人员的各种评论中收集到的信息显示,iOS 10 的行为确实发生了变化。这意味着,如果您将构建链接到最新的 SDK(即 iOS 10 库),则在过去版本的 iOS 中连接到 VoiP 服务器的相同代码将不再执行此操作。
现在,就您的情况而言,您实际上并不需要真正的 VoIP 连接,对吧?您只是对“重新启动后启动”功能感兴趣,对吗?至少您链接的演示项目实际上并没有进行任何 VoiP 连接,setKeepAliveTimeout:handler:
例如,方法甚至没有实现。
我知道这个特定问题没有在链接线程中讨论或在问答中解决,但是:
重启功能连同整个传统 VoiP 行为一起消失,这是有道理的。如果您切换到 Push-Kit VoiP,您的应用程序不需要在重新启动后启动,它会在下一个远程通知到达时重新启动(并且 VoiP 通知具有高优先级,因此应该没有延迟)。
显然,我在这里推断整个事情背后的基本原理,并不能保证苹果真的按照这些思路思考,但它是有道理的:(传统)VoiP 应用程序在重新启动后(重新)启动的全部原因是它需要建立连接,即它需要运行一些代码。由于不再需要推送通知(操作系统基本上在幕后为您执行此操作以获取这些通知),因此他们完全删除了此功能以及整个旧版 VoiP 方法是有道理的。
您可以通过针对较旧的 SDK 进行编译来测试这一点(即按照问答建议使用 Xcode 7),然后查看它是否重新启动。一位苹果员工实际上解释说,操作系统确实在应用程序的构建 SDK 上进行了区分,这对我来说完全违反直觉。显然在这种情况下,对于在 Xcode 7 上构建的应用程序,它会决定“嘿,这是一个较旧的应用程序,因此它希望重新启动,因为它的 SDK 是这样记录的”,而“哦,这个应用程序是一个新应用程序,所以我不这样做”否则不需要坚持旧的方式”。哇西。
TL;DR:对我来说,看起来是的,iOS SDK 改变了这种行为,并放弃了整个旧的、无通知的 VoiP 方法。针对新 SDK 进行编译将导致应用程序在重新启动后无法重新启动。
作为记录:我能理解这些帖子中人们的愤怒。虽然这一变化可能存在技术原因,但这种具体后果远非显而易见。如果某个方法已被弃用,但项目仍然可以编译并运行,我不希望这样的过程会以这种方式失败。这些应用程序不会崩溃,它们只是“操作系统以不同的方式对待”,这并不完全相同。至少我希望新 SDK 中的文档对此更加清晰。