Ich versuche, meine App in Xcode 8.0 zum Laufen zu bringen, und es tritt ein Fehler auf. Ich weiß, dass dieser Code in früheren Versionen von Swift gut funktioniert hat, aber ich gehe davon aus, dass der Code dafür in der neuen Version geändert wurde. Hier ist der Code, den ich ausführen möchte:
let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.shared().registerForRemoteNotifications()
Der Fehler, den ich erhalte, lautet "Argumentbezeichnungen" (forTypes:, Kategorien :) "stimmen nicht mit verfügbaren Überladungen überein".
Gibt es einen anderen Befehl, mit dem ich versuchen könnte, dies zum Laufen zu bringen?
ios
push-notification
swift3
ios10
unusernotificationcenter
Asher Hawthorne
quelle
quelle
Antworten:
Benutzerberechtigung anfordern
Geräte-Token abrufen
Im Fehlerfall
Falls Sie die erteilten Berechtigungen kennen müssen
quelle
quelle
application.isRegisteredForRemoteNotifications()
sehen , ob es gewährt, und verwenden Sie eine andere Delegate-Methode, falls Sie einen Fehler hatten. Richtig? Noch etwas?application.registerForRemoteNotifications()
nach seinemcenter.requestAuthorization
Wechseln Sie als Nächstes zum Projekteditor für Ihr Ziel und suchen Sie auf der Registerkarte Allgemein nach dem Abschnitt Verknüpfte Frameworks und Bibliotheken.
Klicken Sie auf + und wählen Sie UserNotifications.framework:
Verwenden Sie Benachrichtigungsdelegatmethoden
Zum Empfangen von Push-Benachrichtigungen
Unter dem folgenden Link finden Sie weitere Methoden für Benachrichtigungsdelegierte
quelle
Ich hatte Probleme mit den Antworten hier beim Konvertieren des deviceToken Data-Objekts in eine Zeichenfolge, die mit der aktuellen Beta von Xcode 8 an meinen Server gesendet werden soll. Insbesondere die, die deviceToken.description wie in 8.0b6 verwendete und "32 Bytes" zurückgab ist nicht sehr nützlich :)
Das hat bei mir funktioniert ...
Erstellen Sie eine Erweiterung für Daten, um eine "hexString" -Methode zu implementieren:
Verwenden Sie dies dann, wenn Sie den Rückruf von der Registrierung für Remote-Benachrichtigungen erhalten:
quelle
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
In iOS10 sollten Sie anstelle Ihres Codes eine Autorisierung zur Benachrichtigung mit folgenden Anforderungen anfordern: (Vergessen Sie nicht, das
UserNotifications
Framework hinzuzufügen. )Außerdem ist der richtige Code für Sie (
else
z. B. in der vorherigen Bedingung):Stellen Sie abschließend sicher, dass
Push Notification
untertarget
->Capabilities
-> aktiviert istPush notification
. (setzen Sie es aufOn
)quelle
Nun, diese Arbeit für mich. Zuerst in AppDelegate
Dann:
Devicetoken bekommen:
quelle
Kopf hoch, Sie sollten den Haupt-Thread für diese Aktion verwenden.
quelle
Erstens , hören Benutzerbenachrichtigungsstatus, dh
registerForRemoteNotifications()
APNs Gerät zu bekommen Token;Zweitens beantragen Sie die Autorisierung. Wenn das Gerät vom Benutzer autorisiert wurde, wird es an den Listener gesendet
AppDelegate
.Drittens melden Sie das Gerätetoken Ihrem Server.
quelle
Die Antwort von ast1 ist sehr einfach und nützlich. Es funktioniert bei mir, vielen Dank. Ich möchte hier nur darauf hinweisen, damit Leute, die diese Antwort brauchen, sie leicht finden können. Hier ist mein Code für die Registrierung der lokalen und Remote-Benachrichtigung (Push).
quelle
Gehen Sie einfach wie folgt vor
didFinishWithLaunching:
:Denken Sie an die Importanweisung:
quelle
registerForRemoteNotifications()
den Completion-Handler von aufzurufenrequestAuthorization()
. Vielleicht möchten Sie sogarregisterForRemoteNotifications()
mit einerif granted
Aussage umgeben:center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in if granted { UIApplication.shared.registerForRemoteNotifications() } }
Schauen Sie sich diesen kommentierten Code an:
Lassen Sie mich wissen, wenn es ein Problem gibt!
quelle