在 ios 13 上未获取 APNS 设备令牌



我有与 APNS 设备令牌相关的问题。在我使用 Xcode 10.2 和 iOS 12.1 之前。此时我曾经在委托方法中获取设备令牌

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

我正在注册这样的APNS,它工作正常。

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];

现在,当将iOS 13安装到我的iPhone设备并使用Xcode 11时,不会调用委托方法didRegisterForRemoteNotificationsWithDeviceToken。无法理解这个问题. 我已经对此进行了研究,我知道从委托方法获取令牌有一些变化,但在我的情况下,甚至没有调用委托方法。同样,它在iOS 12上运行良好。

只需重新启动iPhone即可。就这么简单,在90%的情况下,它将解决您的问题。

登录 https://appleid.apple.com/,然后打开网址"https://developer.apple.com/account/ios/identifier/bundle" 或"https://developer.apple.com/account/resources/certificates/list"。

首先,创建两个新证书: (1)苹果开发 对 iOS、macOS、tvOS 和 watchOS 应用的开发版本进行签名。用于 Xcode 11 或更高版本。 (2)苹果分销 对你的应用进行签名,以便提交到 App Store 或进行临时分发。适用于 Xcode 11 或更高版本。

然后通过网址"https://developer.apple.com/account/resources/identifiers/list"找到菜单"标识符"。 编辑应用的标识符,确保将开发 SSL 证书和生产 SSL 证书添加到推送通知中。

接下来,通过网址"https://developer.apple.com/account/resources/profiles/list"打开菜单"配置文件"。 确保证书类型为 DistributionFor 将在 Xcode 11 或更高版本中使用,并保存

最后,下载配置文件和创建的 CA 证书文件到您的 MAC,这些文件将通过双击文件分别添加到 XCode 和钥匙串应用程序中。

此外,请记住重新启动手机,并确保已正确设置远程通知。

我也遇到了同样的问题。我尝试了很多场景。执行以下步骤后,我获得了成功:

  1. 重新启动的设备
  2. 称为registerForRemoteNotifications主线程中的方法。

就我而言,我正在获得一个设备令牌,但响应有延迟(我认为是由于在后台线程中注册远程通知(。但是在主线程中移动[[UIApplication sharedApplication] registerForRemoteNotifications]后,一切正常。

这是我的代码:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = delegate;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
[self callCompletion:TRUE completion:completion];
});
}
}];

希望这会有所帮助。

我只是按照以下步骤以这种方式解决了这个问题。

在didRegisterForRemoteNotificationsWithDeviceToken方法中添加一些打印,并保持设备连接。

  1. 转到目标功能。

  2. 关闭推送通知

  3. 在设备上构建并运行应用程序并等待。

  4. 然后检查您收到的控制台失败推送通知错误消息。

  5. 停止运行应用。

  6. 再次打开推送通知。

  7. 转到 https://developer.apple.com/选择帐户 ->证书,标识符和选择您的项目 临时配置文件 ->密钥 ->单击编辑并保存 之后下载临时配置文件并双击它。

  8. 在设备上构建并运行应用程序。

  9. 然后它工作正常。

    我希望这对某人有所帮助。

它与 XCode 安装中缺少的设备支持有关,适用于部署设备使用的平台版本。

就我而言,缺少 13.1 平台。 要解决,只需在文件夹中添加设备支持

Xcode.app/Contents/Develper/Platforms/iPhoneOS.platform/DeviceSupport

您可以从以下位置下载缺少的设备支持: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport

试试这个。

  1. 删除您的应用程序。
  2. 重新启动手机。
  3. 在您的设备上构建并运行(重新安装您的应用程序(。

它对我有用。

相关内容

  • 没有找到相关文章

最新更新