来自 Apple 的文档:
在 iOS 8 及更高版本中,IP 语音 (VoIP) 应用程序注册 registerForRemoteNotifications 远程通知,而不是使用此方法。使用远程通知无需超时处理程序来签入 VoIP 服务。相反,当用户的呼叫到达时,VoIP 服务会向用户的设备发送 VoIP 远程通知。收到此通知后,设备会根据需要启动或唤醒应用程序,以便它可以处理来电。
过去,setKeepAliveTimeout 调用用于允许在结束时间调用处理程序,并且最多有 10 秒的时间退出或强制终止,也不保证对处理程序的调用在超时值内.
新的 (registerForRemoteNotifications) 可以使用,因为处理程序是内部的(对于 IOS),并且会在发生远程事件时反过来调用您的应用程序(如果它处于睡眠状态,这甚至会唤醒您的应用程序)。
无论哪种方式,两者都应该做同样的事情,旧版本您将处理代码,新版本您将收到通知(也在某处处理它),但您将不再控制超时。
来自苹果文档:
调用此方法以使用 Apple Push Notification 服务启动注册过程。如果注册成功,应用程序会调用您的应用程序委托对象的 application:didRegisterForRemoteNotificationsWithDeviceToken: 方法并将设备令牌传递给它。您应该将此令牌传递给用于为设备生成远程通知的服务器。如果注册失败,应用程序会调用其应用程序委托的 application:didFailToRegisterForRemoteNotificationsWithError: 方法。
如果您希望应用程序的远程通知显示警报、播放声音或执行其他面向用户的操作,则必须调用 registerUserNotificationSettings: 方法来请求您要使用的通知类型。如果您不调用该方法,系统会以静默方式将所有远程通知传递给您的应用程序。由于注册过程会考虑用户的首选通知设置,因此请求访问面向用户的通知类型也不能保证它们会被授予。要找出可用的通知设置,请使用 currentUserNotificationSettings 方法。
最后(用于取消注册):
您应该仅在极少数情况下调用此方法,例如当应用程序的新版本不再支持所有类型的远程通知时。用户可以通过“设置”应用的“通知”部分暂时阻止应用接收远程通知。通过此方法取消注册的应用程序始终可以重新注册。
不确定,但我希望这会有所帮助。
问候,
海德·萨蒂