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.
apple-push-notifications
ios13
xcode11
IOS Dev
quelle
quelle
Antworten:
Starten Sie einfach Ihr iPhone neu. So einfach ist das und in 90% der Fälle wird es Ihr Problem lösen.
quelle
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.
quelle
Ich hatte auch das gleiche Problem. Ich habe viele Szenarien ausprobiert. Ich habe Erfolg, nachdem ich die folgenden Schritte ausgeführt habe:
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:
Hoffe das wird helfen.
quelle
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.
Dann funktioniert es gut.
Ich hoffe das hilft jemandem.
quelle
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
Sie können fehlendes DeviceSupport von folgender Adresse herunterladen: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport
quelle
Versuche dies.
Es hat bei mir funktioniert.
quelle