Brak pobierania tokena urządzenia APNS na iOS 13


14

Mam problem związany z tokenem urządzenia APNS. Przed użyciem Xcode 10.2 i iOS 12.1. W tej chwili uzywałem tokena urządzenia metodą delegowania

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

Rejestruję się w APNS w ten sposób i działało dobrze.

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

Teraz po zainstalowaniu iOS 13 na moim urządzeniu iPhone i przy użyciu Xcode 11 metoda delegowania didRegisterForRemoteNotificationsWithDeviceToken nie jest wywoływana. Nie można zrozumieć tego problemu. Przeprowadziłem już badania nad tym, wiem, że istnieją pewne zmiany w pobieraniu tokena z metody delegowania, ale w moim przypadku metoda delegowania nie jest nawet wywoływana. Znowu działa dobrze dla iOS 12.


Teraz rozwiązane. Musiałem utworzyć wszystkie certyfikaty dla Xcode 11 z portalu dla programistów i działało.
IOS Dev.

@IOSDev Proszę udokumentować swoje działania. Wpadam teraz na to samo; myślę, że jest tu dobra karma.
Darren Black

1
Czy znalazłeś na to rozwiązanie? działam z tym samym problemem.
Aman.Samghani,

1
@ Aman.Samghani: TAK, nie pojawia się po raz pierwszy, gdy generowany jest alert dla powiadomienia push. Musiałem ponownie zadzwonić do tego samego kodu rejestru powiadomień push, a następnie dostałem token urządzenia. Więc w dwa lub trzy razy spróbuj dostałem token.
IOS Dev

Odpowiedzi:



2

Zaloguj się na https://appleid.apple.com/ , a następnie otwórz adres URL „ https://developer.apple.com/account/ios/identifier/bundle ” lub „ https://developer.apple.com/account/resources / certyfikaty / lista ”.

Najpierw utwórz dwa nowe certyfikaty: (1) Wersje programistyczne Apple Development Sign dla aplikacji na iOS, macOS, tvOS i watchOS. Do użytku w Xcode 11 lub nowszym. (2) Dystrybucja Apple Podpisuj swoje aplikacje w celu przesłania do App Store lub dystrybucji Ad Hoc. Do użytku z Xcode 11 lub nowszym.

Następnie znajdź menu „Identyfikatory” za pośrednictwem adresu URL „ https://developer.apple.com/account/resources/identifiers/list ”. Edytuj swoje identyfikatory swojej aplikacji, upewnij się, że do powiadomień wypychanych został dodany certyfikat rozwoju SSL i certyfikat produkcji SSL.

Następnie otwórz menu „Profile” za pośrednictwem adresu URL „ https://developer.apple.com/account/resources/profiles/list ”. Upewnij się, że Certyfikaty jako typ DistributionFor, które będą używane w Xcode 11 lub później, i zapisz

Na koniec pobierz plik profilu informacyjnego i pliki certyfikatów CA utworzone na komputerze MAC, które zostaną dodane do XCode i aplikacji łańcucha kluczy, klikając dwukrotnie pliki osobno.

Co więcej, pamiętaj o ponownym uruchomieniu telefonu komórkowego i upewnij się, że poprawnie skonfigurowałeś zdalne powiadomienie.


1

Też napotkałem ten sam problem. Próbowałem wielu scenariuszy. Odniosłem sukces po wykonaniu poniższych kroków:

  1. Zrestartowane urządzenie
  2. Wywołana registerForRemoteNotifications metoda w głównym wątku.

W moim przypadku otrzymywałem token urządzenia, ale odpowiedź jest opóźniona (myślę, że ze względu na rejestrowanie zdalnych powiadomień w wątku w tle). Ale po przejściu [[UIApplication sharedApplication] registerForRemoteNotifications]do głównego wątku wszystko działa dobrze.

Oto mój kod:

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

Mam nadzieję, że to pomoże.


w ogóle nie działa
Wiaczasław Gerchicow

0

Właśnie rozwiązałem ten problem w następujący sposób.

Dodaj wydruk w metodzie didRegisterForRemoteNotificationsWithDeviceToken i utrzymuj urządzenia podłączone.

  1. Udało się do docelowych możliwości.
  2. Wyłącz powiadomienie push
  3. Zbuduj i uruchom aplikację na urządzeniu i poczekaj.
  4. Następnie sprawdź wyświetloną konsolę Komunikat o błędzie powiadomienia o wypchnięciu.
  5. Przestań uruchamiać aplikację.
  6. Ponownie włącz powiadomienie push.
  7. Idź do https://developer.apple.com/ Wybierz Konto -> Certyfikaty, identyfikatory i wybierz swój projekt ProvisionalProfiles -> Klucze -> kliknij edytuj i zapisz po pobraniu profilu tymczasowego i kliknij go dwukrotnie.
  8. Zbuduj i uruchom aplikację na urządzeniu.
  9. Potem działa dobrze.

    Mam nadzieję, że komuś to pomoże.


-2

Jest to związane z brakiem DeviceSupport w instalacji XCode dla wersji platformy używanej przez urządzenie do wdrażania.

W moim przypadku brakowało platformy 13.1. Aby rozwiązać, po prostu dodaj DeviceSupports w folderze

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

Możesz pobrać brakujące DeviceSupport z: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport


Brak szczęścia @Giuseppe, nawet nie pracuje dla 12.4.2
IOS Dev

Teraz rozwiązane. Musiałem utworzyć wszystkie certyfikaty dla Xcode 11 i działało.
IOS Dev

Utworzyłem oba certyfikaty, ale nadal nie działa. Sprawdziłem również, czy są dostępne DeviceSupports, a 13.1 już tam jest. Używam xcode 11.1 i testuję na iPhonie 7 z iOS 13.1. Jakieś sugestie?
Ugo Chirico

1
Dodałem tryby tła: pobieranie, przetwarzanie i zdalne powiadamianie, ponownie uruchomiłem iPhone'a, a potem zadziałało. Naprawdę nie rozumiem dlaczego, ale teraz to działa
Ugo Chirico

jak obsługa urządzenia dla symulatora należy do problemu związanego z rzeczywistym urządzeniem?
Vyachaslav Gerchicov

-2

Spróbuj tego.

  1. Usuń swoją aplikację.
  2. Uruchom ponownie telefon.
  3. Zbuduj i uruchom (ponownie zainstaluj aplikację) na swoim urządzeniu.

To zadziałało dla mnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.