我有与 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 和钥匙串应用程序中。
此外,请记住重新启动手机,并确保已正确设置远程通知。
我也遇到了同样的问题。我尝试了很多场景。执行以下步骤后,我获得了成功:
- 重新启动的设备
- 称为
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方法中添加一些打印,并保持设备连接。
-
转到目标功能。
-
关闭推送通知
-
在设备上构建并运行应用程序并等待。
-
然后检查您收到的控制台失败推送通知错误消息。
-
停止运行应用。
-
再次打开推送通知。
-
转到 https://developer.apple.com/选择帐户 ->证书,标识符和选择您的项目 临时配置文件 ->密钥 ->单击编辑并保存 之后下载临时配置文件并双击它。
-
在设备上构建并运行应用程序。
-
然后它工作正常。
我希望这对某人有所帮助。
它与 XCode 安装中缺少的设备支持有关,适用于部署设备使用的平台版本。
就我而言,缺少 13.1 平台。 要解决,只需在文件夹中添加设备支持
Xcode.app/Contents/Develper/Platforms/iPhoneOS.platform/DeviceSupport
您可以从以下位置下载缺少的设备支持: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport
试试这个。
- 删除您的应用程序。
- 重新启动手机。
- 在您的设备上构建并运行(重新安装您的应用程序(。
它对我有用。