我们有一个当前的AppStore应用程序,我们正在对其进行更新以包括VOIP功能。我们正在使用Apple PushKit。
该用户当前已安装该应用程序的当前版本,并且已经授予允许推送通知的权限。
我们已经更新了该应用程序,用户将通过AppStore升级到该新应用程序,但是我们遇到以下问题。
在AppDelegate中,我们有以下内容:-
class AppDelegate: UIResponder, UIApplicationDelegate, LocationServiceDelegate, UNUserNotificationCenterDelegate, PKPushRegistryDelegate {
var voipRegistry:PKPushRegistry?
func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
NSLog("pushRegistry:didUpdatePushCredentials:forType:")
if (type != .voIP) {
return
}
Shared.credentials = pushCredentials
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
voipRegistry = PKPushRegistry.init(queue: DispatchQueue.main)
voipRegistry?.delegate = self
voipRegistry?.desiredPushTypes = Set([PKPushType.voIP])
}
}
问题是,当我们在PKPushRegistry.init()
中调用didRegisterForRemoteNotificationsWithDeviceToken
时,未调用委托方法pushRegistry
。
奇怪的是,如果电话重新启动,则成功调用了委托方法。
新应用是否需要明确请求PushKit VOIP通知权限,或者标准的“推送通知”权限(将在该应用的旧版本中授予)就足够了?
值得一提的是,旧的代码库(当前的AppStore版本)是用Objective-C编写的,而新版本的App(实际上是同一个Bundle Identifier)是用Swift 4.0编写的。