Не получается токен устройства APNS на ios 13


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: ДА, это не первый раз, когда генерируется предупреждение для Push-уведомления. Мне пришлось снова вызвать тот же код регистра push-уведомлений, после чего я получил токен устройства. Так что дважды или трижды я получаю токен.
IOS Dev

Ответы:


15

Просто перезагрузите свой iPhone. Это так просто, и в 90% случаев это решит вашу проблему.


1
Я хотел бы прочитать этот комментарий ранее. Потратил впустую 5 часов ++ на отладку и
безумный

1
Работа для меня, iOS 13.3.1
Jhonattan

это странная вещь, я потратил 3 часа, чтобы понять, что не так,
fakiho

2

Войдите на https://appleid.apple.com/ , затем откройте URL-адрес « https://developer.apple.com/account/ios/identifier/bundle » или « https://developer.apple.com/account/resources». / сертификаты / список ".

Во-первых, создайте два новых сертификата: (1) Apple Development Sign версии для разработки приложений для iOS, macOS, tvOS и watchOS. Для использования в Xcode 11 или позже. (2) Apple Distribution Подпишите свои приложения для отправки в App Store или для специального распространения. Для использования с Xcode 11 или позже.

Затем найдите меню «Идентификаторы» через URL « https://developer.apple.com/account/resources/identifiers/list ». Отредактируйте свои идентификаторы своего приложения, убедитесь, что SSL-сертификат разработки и производственный SSL-сертификат добавлены в Push-уведомления.

Далее откройте меню «Профили» через URL « https://developer.apple.com/account/resources/profiles/list ». Удостоверьтесь, что Сертификаты как тип DistributionFor, который будет использоваться в Xcode 11 или позже, и сохраните

Наконец, загрузите файл профиля обеспечения и файлы сертификатов CA, созданные на ваш MAC, который будет добавлен в приложение 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];
            });
        }
    }];

Надеюсь, это поможет.


вообще не работает
Вячеслав Герчиков

0

Я только что решил эту проблему следующим образом.

Добавьте некоторую печать в метод didRegisterForRemoteNotificationsWithDeviceToken и оставьте устройства подключенными.

  1. Пошел к целевым возможностям.
  2. Выключите push-уведомление
  3. Создайте и запустите приложение на устройстве и подождите.
  4. Затем проверьте консоль, вы получили сообщение об ошибке Fail push-уведомления.
  5. Прекратите запуск приложения.
  6. Включите Push-уведомление снова.
  7. Перейти https://developer.apple.com/ Выберите данные -> Сертификаты, идентификаторы и выберите ваш ProvisionalProfiles проект -> Ключи -> нажмите на редактирование и сохранить после этого загрузки provisonal профиля и дважды щелкните по нему.
  8. Сборка и запуск приложения на устройстве.
  9. Тогда это работает нормально.

    Я надеюсь, что это поможет кому-то.


-2

Это связано с отсутствием DeviceSupport в вашей установке XCode для версии платформы, используемой вашим устройством развертывания.

В моем случае платформа 13.1 отсутствовала. Чтобы решить, просто добавьте DeviceSupports в папку

Xcode.app/Contents/Develper/Platforms/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 и тестирую на iphone 7 с iOS 13.1. Какие-либо предложения?
Уго Кирико

1
Я добавил фоновые режимы: выборка, обработка и удаленное уведомление, я перезагрузил свой iphone, и затем он заработал. На самом деле я не понимаю, почему, но теперь это работает
Уго Кирико

Как поддержка устройства для симулятора относится к проблеме, связанной с реальным устройством?
Вячеслав Герчиков

-2

Попробуй это.

  1. Удалить ваше приложение.
  2. Перезагрузите свой телефон.
  3. Сборка и запуск (переустановка приложения) на вашем устройстве.

Это сработало для меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.