Ich mache eine Anwendung, in der ich den Apple Push-Benachrichtigungsdienst implementieren möchte. Ich folge den schrittweisen Anweisungen in diesem Tutorial .
Trotzdem werden die Methoden nicht aufgerufen. Ich weiß nicht, was das Problem verursacht. Kann mir jemand helfen?
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
//NSString * token = [[NSString alloc] initWithData:deviceTokenencoding:NSUTF8StringEncoding];
NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
NSLog(@"Device Token:%@",str);
//NSLog(@"Device token is called");
//const void *devTokenBytes = [deviceToken bytes];
//NSLog(@"Device Token");
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSString *str = [NSString stringWithFormat: @"Error: %@", err];
NSLog(@"Error:%@",str);
}
objective-c
apple-push-notifications
Muzammil
quelle
quelle
Antworten:
Ich hatte das gleiche Problem: Anruf
registerForRemoteNotificationTypes:
wederapplication:didRegisterForRemoteNotificationsWithDeviceToken:
noch aufgerufenapplication:didFailToRegisterForRemoteNotificationsWithError:
Ich habe dieses Problem schließlich mithilfe des technischen Hinweises TN2265 von Apple behoben .
Das habe ich getan:
Zunächst habe ich überprüft, ob ich mich tatsächlich korrekt für Push-Benachrichtigungen registriert habe , einschließlich der Überprüfung meines Bereitstellungsprofils für den Schlüssel "aps-environment" und der Codesignierung der .app-Datei selbst. Ich hatte alles richtig eingerichtet.
Ich musste dann Push-Benachrichtigungsstatusmeldungen in der Konsole debuggen (Sie müssen das Bereitstellungsprofil PersistentConnectionLogging.mobileconfig auf Ihrem Gerät installieren und neu starten . Siehe TN2265 unter "Push-Statusmeldungen beobachten"). Ich habe festgestellt, dass der apns-Prozess einen Timer startet und ein Mindestfeuerdatum berechnet, was mich vermuten ließ, dass die Bestätigungsnachricht für die Push-Benachrichtigung, die normalerweise an dieser Stelle angezeigt wird, von APNS unterdrückt wird, wie in TN2265 angegeben:
Also habe ich die App vom Gerät entfernt, dann das Datum des iPhones in den Einstellungen manuell geändert, das Gerät neu gestartet und die App neu installiert.
Beim nächsten Aufruf meines Codes
registerForRemoteNotificationTypes
wurden erwartungsgemäß Rückrufe empfangen.Dies löste das Problem für mich. Ich hoffe es hilft.
quelle
In iOS 8 sind einige Methoden veraltet. Führen Sie die folgenden Schritte aus, um die Kompatibilität mit iOS 8 zu gewährleisten
1. Benachrichtigung registrieren
2. Fügen Sie neue 2 Methoden hinzu
Hinweis: Oben sind in iOS 8 zusätzlich zu
didRegisterForRemoteNotificationsWithDeviceToken
und zwei neue Methoden erforderlich.didReceiveRemoteNotification
Andernfalls wird die Delegatmethode nicht aufgerufen.Siehe: Remote-Benachrichtigung iOS 8
quelle
[application registerForRemoteNotifications];
In iOS 8 müssen Sie nicht nur den Push-Benachrichtigungszugriff anders anfordern, sondern auch anders registrieren.
Anfrage Zugang:
Registriertes Gerät handhaben:
quelle
application:didRegisterForRemoteNotificationsWithDeviceToken:
Beachten Sie, dass Remote-Benachrichtigungen im Simulator nicht unterstützt werden. Wenn Sie Ihre App im Simulator ausführen,
didRegisterForRemoteNotificationsWithDeviceToken
wird sie daher nicht aufgerufen.quelle
Stellen Sie sicher, dass Sie Ihren Code aufrufen (Aktualisierung gemäß den unterstützten Benachrichtigungsarten).
und das Bereitstellungsprofil ist APNS-fähig. Möglicherweise müssen Sie das Bereitstellungsprofil erneut herunterladen, nachdem Sie APNS aktiviert haben. Wenn Sie Probleme haben und Fehler erhalten, sollten Sie möglicherweise eine Entitlements.plist erstellen und den Schlüssel "aps-environment" mit dem Wert "development" oder "Production" hinzufügen, abhängig von der Art des Builds (normalerweise ist dieses Schlüssel-Wert-Paar im Bereitstellungsprofil enthalten, aber manchmal Xcode mit ihnen durcheinander bringen).
quelle
Wenn die Bereitstellungsprofile zuvor zum Aktivieren und Konfigurieren des Apple Push Notification-Dienstes verwendet wurden, müssen Sie die Bereitstellungsprofile erneut herunterladen.
Löschen Sie Bereitstellungsprofile aus Xcode Organizer und vom iPhone / iPad. Gehe zu
Settings -> General -> Profiles -> [Your provisioning] -> Remove
.Installieren Sie die neuen heruntergeladenen Bereitstellungsprofile. Bereinigen Sie dann das Projekt und führen Sie es über XCode aus. Jetzt
didRegisterForRemoteNotificationsWithDeviceToken
sollte gerufen werden.quelle
Ich habe einen Fehler gemacht und ein Implementierungsdetail übersehen, das mich hierher geführt hat. Ich habe versucht , Lust zu bekommen und den Benutzer für Push Notifications später in der Anwendung Onboarding - Prozess zu stellen, so dass ich meine hatte
registerForRemoteNotificationTypes
,didRegisterForRemoteNotificationsWithDeviceToken
unddidFailToRegisterForRemoteNotificationsWithError
alle in einem benutzerdefinierten UIView.UPDATE: Die
didRegisterForRemoteNotificationsWithDeviceToken
unddidFailToRegisterForRemoteNotificationsWithError
müssen in derUIApplicationDelegate
(YourAppDelegate.m
) sein, um ausgelöst zu werden.scheint jetzt offensichtlich, heh.
quelle
AppDelegate
. Ich kann nicht glauben, dass ich meine letzten Stunden mit dieser einfachen Antwort verschwendet habeStellen Sie sicher, dass Ihre Internetverbindung aktiviert ist. Ich habe Stunden gebraucht, um Arbeitsbenachrichtigungen wegen der Internetverbindung zu erhalten.
quelle
Wenn Sie einer vorhandenen App-ID Push hinzugefügt haben, stellen Sie sicher, dass Sie Ihre Bereitstellungsprofile neu generieren. Wenn Sie dies nicht tun, weiß das Profil nicht, ob Sie die App-ID aktivieren können.
quelle
Versuchen Sie, dass es für mich funktioniert,
Erster Schritt
Fügen Sie in der obigen Methode den folgenden Code hinzu
Zweiter Schritt
Fügen Sie den folgenden Code hinzu. Funktion
Sie erhalten das Gerät Token in der folgenden Funktion
Für eine detaillierte Antwort lesen Sie bitte diese
Hoffe das ist Hilfe für jemanden.
quelle
quelle
Minimale Anforderung zum Abrufen des Geräte-Tokens:
Es ist nicht erforderlich, die App-ID, die Bereitstellung oder das Zertifikat usw. zu konfigurieren. Daher ist keine Codesignatur festgelegt, um die Delegatmethode didRegisterForRemoteNotificationsWithDeviceToken aufzurufen .
Ich habe gerade ein neues iOS-Projekt in Xcode 7 für die Einzelansicht mit Standardeinstellungen erstellt und eine zufällige Bundle-ID wie com.mycompany.pushtest angegeben, die nicht im Apple Dev Portal konfiguriert ist.
Mit dem folgenden Code erhalte ich mein Geräte-Token in der didRegisterForRemoteNotificationsWithDeviceToken-Methode auf meinem iPad mit Internetzugang zu WIFI. Mein Gerät ist angeschlossen und ich führe die App direkt von xcode aus aus und zeige die Werte in der xcode-Konsole an.
quelle
Ich habe einen Punkt dazu. Kürzlich bin auch ich mit diesem Problem konfrontiert. Ich habe alles gemäß der Dokumentation getan, aber die Delegatenmethode hat nicht aufgerufen. Schließlich habe ich einen Beitrag gesehen, der dieses Problem mit dem Netzwerk besagt. Dann habe ich das Netzwerk geändert und es funktioniert einwandfrei. Achten Sie also auch auf das Netzwerk, da nur wenige Netzwerke den APNS blockieren können.
quelle
Nachdem Sie die nervigsten 3 Stunden verschwendet haben, gehen Sie wie folgt vor, um das Problem zu beheben:
Löschen Sie die App
Setzen Sie das Gerät zurück
Führe es nochmals aus
Es hat einfach funktioniert
quelle
Dies ist mir passiert, weil ich alle Daten auf dem Telefon zurückgesetzt und gelöscht habe (wollte, dass ein Entwickler-Telefon verwendet wird). Dies verhinderte, dass APN nach dem erneuten Einrichten des Telefons überhaupt eine Verbindung herstellen konnte.
Ich habe alle möglichen Dinge ausprobiert, aber das einzige, was das Problem behoben hat, war, das Telefon so einzurichten, dass es mit einem Mobilfunkanbieter unter einer neuen SIM-Karte zusammenarbeitet.
Dieser Link bietet weitere Hinweise dazu, was möglicherweise passiert ist: https://developer.apple.com/library/ios/technotes/tn2265/_index.html
Es heißt, dass APN versucht, eine bevorzugte Verbindung über Träger / Türme im Gegensatz zu WLAN herzustellen. Vielleicht lag das Problem auch daran, dass der Router Port 5223 im WLAN-Netzwerk blockierte, aber ich bezweifle es, weil es am Vortag vor dem globalen Zurücksetzen einwandfrei funktioniert hat.
quelle
Für mich ging es darum, die Build-Einstellungen und den Abschnitt für die Codesignatur aufzurufen und die Identität und das Bereitstellungsprofil für die Codesignatur manuell auszuwählen. Anscheinend hat die automatische Einstellung nicht die richtige aufgenommen und daher war die App nicht richtig autorisiert.
quelle
Wenn heruntergefahren, Push-Nachricht der App,
appdidRegisterForRemoteNotificationsWithDeviceToken wird niemals aufgerufen
quelle
Vergessen Sie auch nicht, den Systemstatus unter Apple https://developer.apple.com/system-status/ zu überprüfen .
Ich hatte alle oben aufgeführten Lösungen ausprobiert, aber am Ende lag der Fehler darin, dass der APNS-Dienst nicht verfügbar war! Am nächsten Tag funktionierte alles wieder wie erwartet.
Außerdem haben Sie einen Tippfehler in Ihrer Rückrufmethode:
Wie Rupesh betonte, lautet der korrekte Methodenname:
Das ist wahrscheinlich der Grund, warum Sie den Token in Ihrem Fall nie erhalten haben!
quelle
Sie müssen die Methode registerForNotifications von didFinishLaunchingWithOptions aus aufrufen.
quelle
Ich hatte ein anderes Problem, bei dem meine Push-Benachrichtigungs-Rückrufe von den von mir aufgenommenen Bibliotheken von Drittanbietern, nämlich Firebase, entführt wurden. Diese Bibliotheken verwenden Push-Benachrichtigungs-Rückrufmethoden, um die Rückrufe abzurufen.
Hoffe das hilft jemandem.
quelle