仅当尝试使用UserNotifications框架注册远程通知时,我才收到此错误。 使用PushKit时,一切正常。
dispatch_queue_t mainQueue = dispatch_get_main_queue();
// Create a push registry object
self.voipRegistry = [[PKPushRegistry alloc] initWithQueue: mainQueue];
// Set the registry's delegate to self
self.voipRegistry.delegate = self;
// Set the push type to VoIP
self.voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
自Xcode 11和iOS13以来,PushKit中进行了一些更改以支持CallKit,因此我正尝试使用UserNotifications,如Apple's documentation
中所述Important
If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications. Instead, configure your app's push notification support with the UserNotifications framework.
我正在以这种方式注册远程通知
- (BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotifications];
并接收令牌:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
但是,当我从服务器发送通知时,我得到了DeviceTokenNotForTopic。 我不确定,如果UserNotifications框架使用不同的APNs服务器或令牌格式是否不同。
答案 0 :(得分:4)
如果您的应用程序的bundleID与您从服务器发送的voip push请求中的apns-topic
不同,则APNS发送此类错误。
或者为另一个bundleID生成了voip push的证书。
错误代码https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html 这里有更多讨论。 https://github.com/QuickBlox/quickblox-ios-sdk/issues/1020
答案 1 :(得分:0)
对我来说,我已经更改了应用程序的名称和捆绑包ID,并且没有续订设备令牌和带有图像通知的证书。
为解决这个问题,我首先进入了我的Apple Developer帐户的Certificates, Identifiers & Profiles
部分,并生成了具有AppGroups
功能的新证书。
然后我在AppDelegate
函数的调用中获得了一个新的设备令牌
application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
从deviceToken
参数获取令牌并将其用于发送通知后,它再次开始工作。