iOS Push Notifications & node.js (cz. 1)

iOS Push Notifications & node.js (cz. 1)

Wysyłanie powiadomień push do użytkowników podobno pobudza ich do działania. Tak mówią. Ja nie przepadam za otrzymywaniem powiadomień, ale dobrze wiedzieć jak je wysyłać. I odbierać. Postaram się pokazać jak to zrobić od samego początku. Powinno zadziałać…

Aplikacja iOS

Po utworzeniu aplikacji musimy się upewnić, że mamy skonfigurowany Bundle Identifier. Możemy to sprawdzić w edytorze projektu Xcode.
BundleId
Kolejnym krokiem jest włączenie powiadomień push w zakładce Capabilities. Szukamy ustawień dla Push Notifications i przestawiamy przełącznik na ON:
Push notifications
Jeżeli wszystko przebiegło pomyślnie i widzimy dwa ptaszki możemy przejść do najprzyjemniejszego, czyli do kodowania.

Identyfikatory urządzeń

Apple do identyfikacji urządzeń na potrzeby wysyłania powiadomień push używa tak zwanych tokenów. Jest to ciąg znaków, podobny do opniższego:

64672a4d8ae4e0e02c480f7913541ec523ba95db074258380fbba1c413b7f996

Każde z urządzeń, na którym zainstalujemy naszą aplikację, po rejestracji dostanie unikalny token. W „prawdziwej” aplikacji należy taki token zapisać na naszym serwerze, abyśmy wiedzieli komu możemy wysłać powiadomienie. Ale do rzeczy.
Przechodzimy do naszego AppDelegate.m i szukamy metody (callbacka) didFinishLaunchingWithOptions.
Na przestrzeni lat (i wersji iOS) potrzebne działania trochę się zmieniały. Przygotowując kod dla wersji iOS 8 i 9 przez końcem metody dodajemy poniższy kod:

Pracując z SDK iOS 10 dostaniemy oczywiście ostrzeżenie, że nasz kod jest przestarzały:
Deprecated methods
wszystko będzie jednak działało.

Chcąc być całkowicie w zgodzie z iOS 10 należy dodać do aplikacji UserNotifications.framework, zaimportować moduł dodając na początku pliku dyrektywę:

oraz użyć kodu:

Chcąc żyć w zgodzie z iOS od wersji 8 do 10 musimy więc sprawdzić z którą wersją systemu mamy do czynienia i odpowiednio poprosić o rejestrację i token:

W kolejnym kroku powinniśmy obsłużyć dwie metody, które wywoływane są w zależności od tego czy rejestracja urządzenia się powiodła czy nie:

Możemy uruchomić teraz aplikacją na jakimś urządzeniu. Niestety nie możemy do tego celu użyć symulatora, gdyż nie obsługuje on powiadomień push.

Po uruchonieniu system poinformuje nas, że nasza aplikacja chce nam wysyłać powiadomienia i zapyta o pozwolenie:
Push permissions
a po chwili w konsoli Xcode powinien pokazać się otrzymany token: Token: :. Zapisujemy go sobie, gdyż będziemy potrzebowali go, żeby wysłać do siebie powiadomienie. Musimy pamiętać, że ten token może się zmienić. W przypadku problemów warto go sprawdzić. W naszej aplikacji wyświetli się on w konsoli Xcode zawsze po uruchomieniu aplikacji.

Odbieramy

To właściwie wszystko co musimy zrobić, żeby odebrać notyfikację. Musimy jednak brać pod uwagę fakt, że iOS nie pokaże przychodzącego powiadomienia, jeżeli aplikacja będzie aktywna. Musimy w tym przypadku sami obsłużyć wyświetlenie treści notyfikcaji.
W momencie nadejścia powiadomienia wywoływana jest metoda didReceiveRemoteNotification. Na nasze potrzeby wystarczy wyświetlenie danych w konsoli, dodajemy więc poniższy kod:

i po chwili powinnismy dostać coś podobnego do:
{
aps = {
alert = "Awesome push message";
badge = 3;
};
messageFrom = Przemek;
messageSubject = "Tre\U015b\U0107 wiadomo\U015bci";
}

Tajne przez poufne

Nadeszła pora na wygenerowanie naszego klucza poświadczającego (Apple Push Notification Authentication Key), że my to my, w kontaktach z APN. Logujemy się w naszym ośrodku zarządzania certyfikatami Apple
AppleCertificates
i po kliknięciu w plusik generujemy klucz typu Apple Push Notification Authentication Key (Sandbox & Production)
APN Key
Po wygenerowaniu klucza notujemy jego identyfikator (Key ID) i ściągamy sam klucz w formacie .p8 na dysk.
Key
Kolejnym krokiem jest dodanie naszej aplikacji do portalu Apple:
Add app
wpisane naszego BundleID:
Bundle ID
i włączenie powiadomień push dla aplikacji:
Push notifications

To wszystko na dziś. Zrobiliśmy aplikację. W następnym odcinku coś sobie wyślemy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *