APNS拒绝通知,原因为“ DeviceTokenNotForTopic”

时间:2019-12-06 14:42:32

标签: ios objective-c apple-push-notifications pushkit usernotifications

仅当尝试使用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服务器或令牌格式是否不同。

2 个答案:

答案 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参数获取令牌并将其用于发送通知后,它再次开始工作。