Próbuję sprawić, by moja aplikacja działała w Xcode 8.0 i napotykam błąd. Wiem, że ten kod działał dobrze w poprzednich wersjach swift, ale zakładam, że kod został zmieniony w nowej wersji. Oto kod, który próbuję uruchomić:
let settings = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.shared().registerForRemoteNotifications()
Wyświetlany przeze mnie błąd to „Etykiety argumentów” (forTypes :, kategorie :) „nie pasują do żadnych dostępnych przeciążeń”
Czy jest inne polecenie, które mógłbym spróbować, aby to działało?
ios
push-notification
swift3
ios10
unusernotificationcenter
Asher Hawthorne
źródło
źródło
Odpowiedzi:
Poproś o pozwolenie użytkownika
Pobieram token urządzenia
W przypadku błędu
W przypadku, gdy chcesz znać przyznane uprawnienia
źródło
źródło
application.isRegisteredForRemoteNotifications()
aby sprawdzić, czy jest przyznane i użyj innej metody delegata w przypadku wystąpienia błędu. Dobrze? Coś jeszcze?application.registerForRemoteNotifications()
po swoimcenter.requestAuthorization
Następnie przejdź do edytora projektów dla celu i na karcie Ogólne poszukaj sekcji Połączone struktury i biblioteki.
Kliknij + i wybierz UserNotifications.framework:
Użyj metod delegata powiadomień
Do otrzymywania powiadomień push
Sprawdź poniższe łącze, aby uzyskać więcej metod delegowania powiadomień
źródło
Miałem problemy z odpowiedziami tutaj podczas konwertowania obiektu deviceToken Data na ciąg znaków do wysłania na mój serwer z obecną wersją beta Xcode 8. Szczególnie ten, który używał deviceToken.description jak w 8.0b6, który zwróciłby „32 bajty”, które niezbyt przydatne :)
To właśnie zadziałało dla mnie ...
Utwórz rozszerzenie w Data, aby zaimplementować metodę „hexString”:
A następnie użyj tego, gdy otrzymasz oddzwonienie z rejestracji w celu otrzymywania zdalnych powiadomień:
źródło
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
W iOS10 zamiast kodu, powinieneś poprosić o autoryzację na powiadomienie z następującymi informacjami: (Nie zapomnij dodać
UserNotifications
Framework)Ponadto prawidłowy kod dla Ciebie to (użyj na
else
przykład w poprzednim warunku):Na koniec upewnij się, że
Push Notification
jest aktywowany podtarget
->Capabilities
->Push notification
. (włącz toOn
)źródło
Cóż, ta praca dla mnie. Najpierw w AppDelegate
Następnie:
Aby otrzymać devicetoken:
źródło
Uwaga, do tej akcji powinieneś używać głównego wątku.
źródło
Najpierw nasłuchuj statusu powiadomienia użytkownika, tj.
registerForRemoteNotifications()
Aby uzyskać token urządzenia APN;Po drugie , poproś o autoryzację. Po autoryzacji przez użytkownika deviceToken zostanie wysłany do nasłuchującego
AppDelegate
;Po trzecie , zgłoś token urządzenia do swojego serwera.
źródło
Odpowiedź z ast1 jest bardzo prosta i użyteczna. U mnie to działa, bardzo dziękuję. Chcę tylko wskazać to tutaj, aby ludzie, którzy potrzebują tej odpowiedzi, mogli ją łatwo znaleźć. Oto mój kod z rejestracji lokalnego i zdalnego powiadomienia (push).
źródło
Po prostu wykonaj następujące czynności w
didFinishWithLaunching:
:Pamiętaj o oświadczeniu importu:
źródło
registerForRemoteNotifications()
procedury obsługi zakończeniarequestAuthorization()
. Możesz nawet otoczyćregisterForRemoteNotifications()
sięif granted
stwierdzeniem:center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in if granted { UIApplication.shared.registerForRemoteNotifications() } }
Spójrz na ten skomentowany kod:
Daj mi znać, jeśli jest jakiś problem!
źródło