APNS-Gerätetoken auf iOS 13 nicht erhalten

14

Ich habe ein Problem mit dem APNS-Gerätetoken. Vorher habe ich Xcode 10.2 und iOS 12.1 verwendet. In diesem Moment habe ich das Geräte-Token in der Delegate-Methode abgerufen

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

Ich registriere mich so für APNS und es hat gut funktioniert.

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

Wenn nun iOS 13 auf meinem iPhone-Gerät installiert ist und Xcode 11 verwendet wird, wird die Delegatmethode didRegisterForRemoteNotificationsWithDeviceToken nicht aufgerufen. Dieses Problem kann nicht verstanden werden. Ich habe diesbezüglich bereits Nachforschungen angestellt. Ich weiß, dass es einige Änderungen beim Abrufen von Token von der Delegate-Methode gibt, aber in meinem Fall wird die Delegate-Methode nicht einmal aufgerufen. Wieder funktioniert es gut für iOS 12.

IOS Dev
quelle
Es ist jetzt gelöst. Musste alle Zertifikate für Xcode 11 vom Entwicklerportal erstellen und es hat funktioniert.
IOS Dev
@IOSDev Bitte dokumentieren Sie, was Sie getan haben. Ich stoße jetzt auf dasselbe; Ich denke, hier gibt es gutes Karma.
Darren Black
1
Haben Sie eine Lösung dafür gefunden? Ich laufe mit dem gleichen Problem.
Aman.Samghani
1
@ Aman.Samghani: JA, es kommt nicht zum ersten Mal, wenn eine Warnung für die Push-Benachrichtigung generiert wird. Ich musste erneut den gleichen Code des Push-Benachrichtigungsregisters aufrufen, dann bekam ich ein Gerätetoken. Also habe ich zweimal oder dreimal versucht, einen Token zu bekommen.
IOS Dev

Antworten:

14

Starten Sie einfach Ihr iPhone neu. So einfach ist das und in 90% der Fälle wird es Ihr Problem lösen.

Aleksandr Honcharov
quelle
1
Ich wünschte, ich hätte diesen Kommentar früher gelesen. Wurde 5 Stunden ++ verschwendet, um zu debuggen und verrückt auf das Profil usw. zu starren
zuyao88
1
Arbeite für mich, iOS 13.3.1
Jhonattan
Es ist eine seltsame Sache, ich habe 3 Stunden damit verbracht herauszufinden, was los ist
Fakiho
2

Melden Sie sich unter https://appleid.apple.com/ an und öffnen Sie die URL " https://developer.apple.com/account/ios/identifier/bundle " oder " https://developer.apple.com/account/resources " / certificates / list ".

Erstellen Sie zunächst zwei neue Zertifikate: (1) Apple Development Sign-Entwicklungsversionen Ihrer iOS-, macOS-, tvOS- und watchOS-Apps. Zur Verwendung in Xcode 11 oder höher. (2) Apple Distribution Unterzeichnen Sie Ihre Apps zur Übermittlung an den App Store oder zur Ad-hoc-Verteilung. Zur Verwendung mit Xcode 11 oder höher.

Suchen Sie dann das Menü "Bezeichner" über die URL " https://developer.apple.com/account/resources/identifiers/list ". Bearbeiten Sie Ihre Kennungen Ihrer App und stellen Sie sicher, dass das Entwicklungs-SSL-Zertifikat und das Produktions-SSL-Zertifikat zu den Push-Benachrichtigungen hinzugefügt wurden.

Öffnen Sie anschließend das Menü "Profile" über die URL " https://developer.apple.com/account/resources/profiles/list ". Stellen Sie sicher, dass die Zertifikate als Verteilungstyp für Xcode 11 oder später verwendet werden, und speichern Sie sie

Laden Sie zum Schluss die Bereitstellungsprofildatei und die auf Ihrem MAC erstellten CA-Zertifikatdateien herunter, die XCode und der Schlüsselkettenanwendung hinzugefügt werden, indem Sie separat auf die Dateien doppelklicken.

Denken Sie außerdem daran, Ihr Mobiltelefon neu zu starten und sicherzustellen, dass Sie die Remote-Benachrichtigung korrekt eingerichtet haben.

Dengshan Tian
quelle
1

Ich hatte auch das gleiche Problem. Ich habe viele Szenarien ausprobiert. Ich habe Erfolg, nachdem ich die folgenden Schritte ausgeführt habe:

  1. Gerät neu gestartet
  2. Rief die registerForRemoteNotifications Methode im Hauptthread auf.

In meinem Fall habe ich ein Geräte-Token erhalten, aber es gibt eine Verzögerung bei der Antwort (ich denke, aufgrund der Registrierung von Remote-Benachrichtigungen in einem Hintergrund-Thread). Aber nach dem Verschieben [[UIApplication sharedApplication] registerForRemoteNotifications]im Haupt-Thread funktioniert alles gut.

Hier ist mein Code:

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

Hoffe das wird helfen.

Kirti Nikam
quelle
funktioniert überhaupt nicht
Vyachaslav Gerchicov
0

Ich habe dieses Problem auf die folgende Weise gelöst.

Fügen Sie etwas Druck in der didRegisterForRemoteNotificationsWithDeviceToken-Methode hinzu und halten Sie die Geräte in Verbindung.

  1. Ging zu den Zielfähigkeiten.
  2. Schalten Sie die Push-Benachrichtigung aus
  3. Erstellen und führen Sie die App auf dem Gerät aus und warten Sie.
  4. Überprüfen Sie dann die Konsole, die die Fehlermeldung Push-Benachrichtigung fehlgeschlagen erhalten hat.
  5. Stoppen Sie die App.
  6. Schalten Sie die Push-Benachrichtigung wieder ein.
  7. Gehen Sie zu https://developer.apple.com/. Wählen Sie Konto -> Zertifikate, Kennungen und wählen Sie Ihr Projekt aus. ProvisionalProfiles -> Schlüssel -> klicken Sie auf Bearbeiten und speichern, nachdem Sie das vorläufige Profil heruntergeladen haben, und doppelklicken Sie darauf.
  8. Erstellen und Ausführen der App auf dem Gerät.
  9. Dann funktioniert es gut.

    Ich hoffe das hilft jemandem.

Gangireddy Rami Reddy
quelle
-2

Dies hängt mit DeviceSupport zusammen, das in Ihrer XCode-Installation für die von Ihrem Bereitstellungsgerät verwendete Plattformversion fehlt.

In meinem Fall fehlte die 13.1-Plattform. Fügen Sie zum Lösen einfach die DeviceSupports im Ordner hinzu

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

Sie können fehlendes DeviceSupport von folgender Adresse herunterladen: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport

Giuseppe
quelle
Kein Glück @Giuseppe, auch nicht für 12.4.2 arbeiten
IOS Dev
Es ist jetzt gelöst. Musste alle Zertifikate für Xcode 11 erstellen und es hat funktioniert.
IOS Dev
Ich habe beide Zertifikate erstellt, aber es funktioniert immer noch nicht. Ich habe auch nach DeviceSupports gesucht und die 13.1 ist da. Ich verwende xcode 11.1 und teste auf dem iPhone 7 mit iOS 13.1. Irgendwelche Vorschläge?
Ugo Chirico
1
Ich habe Hintergrundmodi hinzugefügt: Abrufen, Verarbeiten und Remote-Benachrichtigung, ich habe mein iPhone neu gestartet und dann hat es funktioniert. Wirklich ich verstehe nicht warum, aber jetzt funktioniert es
Ugo Chirico
Wie gehört die Geräteunterstützung für den Simulator zu einem Problem im Zusammenhang mit einem realen Gerät?
Vyachaslav Gerchicov
-2

Versuche dies.

  1. Entfernen Sie Ihre Anwendung.
  2. Starten Sie Ihr Telefon neu.
  3. Erstellen und Ausführen (Neuinstallation Ihrer Anwendung) auf Ihrem Gerät.

Es hat bei mir funktioniert.

Kylie Kim
quelle