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


14

我有与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。


现在解决了。不得不从开发人员门户网站创建Xcode 11的所有证书,并且可以正常工作。
IOS Dev

@IOSDev请记录您的工作。我现在正遇到同样的事情;我认为这里有很好的业力。
达伦·布莱克

1
您找到任何解决方案吗?我正在运行相同的问题。
Aman.Samghani

1
@ Aman.Samghani:是的,这不是第一次为推送通知生成警报。我不得不再次调用推送通知寄存器的相同代码,然后得到设备令牌。因此,在两次或三次尝试中,我得到了令牌。
IOS Dev

Answers:



2

https://appleid.apple.com/上登录,然后打开URL“ https://developer.apple.com/account/ios/identifier/bundle ”或“ https://developer.apple.com/account/resources / certificates / list ”。

首先,创建两个新证书:(1)您的iOS,macOS,tvOS和watchOS应用程序的Apple Development Sign开发版本。用于Xcode 11或更高版本。(2)Apple发行版对您的应用程序签名,以提交到App Store或进行临时发行。与Xcode 11或更高版本一起使用。

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

接下来,通过URL“ https://developer.apple.com/account/resources/profiles/list ” 打开菜单“ Profiles ”。确保将在Xcode 11或更高版本中使用的Certificates作为DistributionFor类型,并保存

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

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


1

我也面临同样的问题。我尝试了许多方案。完成以下步骤后,我获得了成功:

  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];
            });
        }
    }];

希望这会有所帮助。


根本不起作用
Vyachaslav Gerchicov

0

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

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

  1. 达到目标功能。
  2. 关闭推送通知
  3. 在设备上生成并运行应用程序,然后等待。
  4. 然后检查控制台,您收到失败推送通知错误消息。
  5. 停止运行该应用程序。
  6. 再次打开推送通知。
  7. 转到https://developer.apple.com/选择“帐户”->“证书,标识符”并选择您的项目“临时配置文件”->“密钥”->单击“编辑并保存”,然后下载该省份概要文件并双击。
  8. 在设备上生成并运行该应用。
  9. 然后它的工作正常。

    我希望这可以帮助某人。


-2

与您的XCode安装中缺少的DeviceSupport有关,因为您的部署设备使用的平台版本。

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

Xcode.app/内容/开发人员/平台/iPhoneOS.platform/DeviceSupport

您可以从以下网址下载缺少的DeviceSupport:https//github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport


@Giuseppe真不走运,甚至无法在12.4.2下工作
IOS Dev

现在解决了。不得不为Xcode 11创建所有证书,并且可以正常工作。
IOS Dev

我创建了两个证书,但仍然无法使用。我还检查了DeviceSupports并找到了13.1。我正在使用xcode 11.1,并在带有iOS 13.1的iphone 7上进行测试。有什么建议么?
Ugo Chirico

1
我添加了后台模式:获取,处理和远程通知,我重新启动了iPhone,然后它开始工作了。我真的不明白为什么,但是现在可以了
Ugo Chirico

对模拟器的设备支持如何属于与真实设备相关的问题?
Vyachaslav Gerchicov

-2

尝试这个。

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

它为我工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.