Powiadomienia push w systemie iOS
Ważny
Informacje w tej sekcji dotyczą systemu iOS 9 i wcześniejszych wersji systemu iOS, które zostały tutaj pozostawione do obsługi starszych wersji systemu iOS. W przypadku systemu iOS 10 lub nowszego zapoznaj się z przewodnikiem User Notification Framework obsługi powiadomień lokalnych i zdalnych na urządzeniu z systemem iOS.
Powiadomienia wypychane powinny być krótkie i zawierać tylko wystarczającą ilość danych, aby powiadomić aplikację mobilną o konieczności skontaktowania się z aplikacją serwera w celu uzyskania aktualizacji. Na przykład po nadejściu nowej wiadomości e-mail aplikacja serwera powiadomi tylko aplikację mobilną o nadejściu nowej wiadomości e-mail. Powiadomienie nie będzie zawierać nowej wiadomości e-mail. Aplikacja mobilna pobierała nowe wiadomości e-mail z serwera, gdy była odpowiednia
Centrum powiadomień wypychanych w systemie iOS jest usługi Apple Push Notification Gateway Service (APNS). Jest to usługa zapewniana przez firmę Apple, która jest odpowiedzialna za kierowanie powiadomień z serwera aplikacji do urządzeń z systemem iOS. Na poniższej ilustracji przedstawiono topologię powiadomień wypychanych dla systemu iOS:
Same powiadomienia zdalne są ciągami w formacie JSON, które są zgodne z formatem i protokołami określonymi w sekcji Ładunek powiadomień przewodnika programowania powiadomień lokalnych i wypychanych w dokumentacji dewelopera systemu iOS.
Firma Apple utrzymuje dwa środowiska usługi APNS: piaskownicy i środowisko produkcyjne. Środowisko piaskownicy jest przeznaczone do testowania w fazie rozwoju i można je znaleźć w gateway.sandbox.push.apple.com
na porcie TCP 2195. Środowisko produkcyjne ma być używane w aplikacjach, które zostały wdrożone i można je znaleźć w gateway.push.apple.com
na porcie TCP 2195.
Wymagania
Powiadomienie push musi spełniać następujące reguły, które są dyktowane przez architekturę usługi APNS.
- limit komunikatów 256 bajtów — cały rozmiar wiadomości powiadomienia nie może przekraczać 256 bajtów.
- Brak potwierdzenia otrzymania — usługa APNS nie dostarcza nadawcy żadnego powiadomienia, że wiadomość trafiła do zamierzonego adresata. Jeśli urządzenie jest nieosiągalne i wysyłane są wiele powiadomień sekwencyjnych, wszystkie powiadomienia z wyjątkiem najnowszych zostaną utracone. Tylko najnowsze powiadomienie zostanie dostarczone do urządzenia.
- Każda aplikacja wymaga bezpiecznego certyfikatu — komunikacja z usługą APNS musi odbywać się za pośrednictwem protokołu SSL.
Tworzenie i używanie certyfikatów
Każde ze środowisk wymienionych w poprzedniej sekcji wymaga własnego certyfikatu. W tej sekcji opisano sposób tworzenia certyfikatu, kojarzenia go z profilem aprowizacji, a następnie uzyskiwania certyfikatu wymiany informacji osobistych do użycia z pushSharp.
Aby utworzyć certyfikaty, przejdź do portalu aprowizacji systemu iOS w witrynie internetowej firmy Apple, jak pokazano na poniższym zrzucie ekranu (zwróć uwagę na element menu Identyfikatory aplikacji po lewej stronie):
Następnie przejdź do sekcji Identyfikator aplikacji i utwórz nowy identyfikator aplikacji, jak pokazano na poniższym zrzucie ekranu:
Po kliknięciu przycisku + będzie można wprowadzić opis i identyfikator pakietu aplikacji, co pokazano na następnym zrzucie ekranu.
Upewnij się, że wybrano Jawny Identyfikator Aplikacji i że identyfikator pakietu nie kończy się na
*
. Spowoduje to utworzenie identyfikatora, który jest odpowiedni dla wielu aplikacji, a certyfikaty powiadomień push muszą być przeznaczone dla jednej aplikacji.W obszarze App Services wybierz pozycję powiadomienia push:
Następnie naciśnij Prześlij, aby potwierdzić rejestrację nowego identyfikatora aplikacji:
Następnie należy utworzyć certyfikat dla identyfikatora aplikacji. W nawigacji po lewej stronie przejdź do pozycji Certyfikaty > Wszystkie i wybierz przycisk
+
, jak pokazano na poniższym zrzucie ekranu.Wybierz, czy chcesz użyć certyfikatu programistycznego, czy produkcyjnego:
Następnie wybierz nowo utworzony identyfikator aplikacji:
Spowoduje to wyświetlenie instrukcji, które przeprowadzą cię przez proces tworzenia żądania podpisania certyfikatu przy użyciu aplikacji Keychain Access na Macu.
Po utworzeniu certyfikatu należy go użyć w ramach procesu kompilacji, aby podpisać aplikację, aby mogła zarejestrować się w usłudze APNs. Wymaga to utworzenia i zainstalowania profilu aprowizacji korzystającego z certyfikatu.
Aby utworzyć profil deweloperski, przejdź do sekcji Provisioning Profiles i wykonaj kroki, aby go utworzyć, używając nowo utworzonego identyfikatora aplikacji.
Po utworzeniu profilu aprowizacji otwórz Xcode Organizer i odśwież go. Jeśli utworzony profil aprowizacji nie jest wyświetlany, może być konieczne pobranie profilu z portalu aprowizacji systemu iOS i ręczne zaimportowanie go. Poniższy zrzut ekranu przedstawia przykład organizatora z dodanym profilem zapewnienia:
W tym momencie musimy skonfigurować projekt platformy Xamarin.iOS do korzystania z tego nowo utworzonego profilu aprowizacji. Odbywa się to w oknie dialogowym opcje projektu, na karcie Podpisywanie pakietu systemu iOS, jak widać na poniższym zrzucie ekranu.
Na tym etapie aplikacja jest skonfigurowana do pracy z powiadomieniami push. Jednak nadal istnieje kilka dodatkowych kroków wymaganych w certyfikacie. Ten certyfikat jest w formacie DER, który nie jest zgodny z pushSharp, który wymaga certyfikatu wymiany informacji osobistych (PKCS12). Aby przekonwertować certyfikat tak, aby można go było używać przez funkcję PushSharp, wykonaj następujące końcowe kroki:
- Pobierz plik certyfikatu — zaloguj się do portalu aprowizacji systemu iOS, wybierz kartę Certyfikaty, wybierz certyfikat skojarzony z prawidłowym profilem aprowizacji i wybierz pozycję Pobierz .
- Dostęp do pęku kluczy — to aplikacja będąca graficznym interfejsem użytkownika systemu zarządzania hasłami w systemie OS X.
- Zaimportuj certyfikatu — jeśli certyfikat nie został jeszcze zainstalowany, plik... Zaimportuj elementy z menu Dostęp łańcucha kluczy. Przejdź do wyeksportowanego powyżej certyfikatu i wybierz go.
- Eksportuj certyfikat — rozwiń certyfikat, aby skojarzony klucz prywatny był widoczny, kliknij prawym przyciskiem myszy klucz i wybierz polecenie Eksportuj. Zostanie wyświetlony monit o podanie nazwy pliku i hasła do wyeksportowanego pliku.
Na tym etapie skończyliśmy z certyfikatami. Utworzyliśmy certyfikat, który będzie używany do podpisywania aplikacji systemu iOS i konwertowania tego certyfikatu na format, który może być używany z funkcją PushSharp w aplikacji serwera. Następnie przyjrzyjmy się, jak aplikacje systemu iOS współdziałają z usługą APNS.
Rejestrowanie w usłudze APNS
Aby aplikacja systemu iOS mogła odbierać powiadomienia zdalne, musi zarejestrować się w usłudze APNS. Usługa APNS wygeneruje unikatowy token urządzenia i zwróci go do aplikacji systemu iOS. Następnie aplikacja systemu iOS przejmie token urządzenia, a następnie zarejestruje się na serwerze aplikacji. Po tym, jak wszystko się wydarzy, rejestracja zostaje zakończona i serwer aplikacji może wysyłać powiadomienia do urządzenia przenośnego.
Teoretycznie token urządzenia może się zmieniać za każdym razem, gdy aplikacja systemu iOS rejestruje się w usłudze APNS, jednak w praktyce nie zdarza się to często. W ramach optymalizacji aplikacja może buforować najnowszy token urządzenia i aktualizować serwer aplikacji tylko wtedy, gdy się zmieni. Na poniższym diagramie przedstawiono proces rejestracji i uzyskiwania tokenu urządzenia:
Rejestracja w usłudze APNS jest obsługiwana w metodzie FinishedLaunching
klasy delegata aplikacji przez wywołanie RegisterForRemoteNotificationTypes
na bieżącym obiekcie UIApplication
. Gdy aplikacja systemu iOS rejestruje się w usłudze APNS, musi również określić typy powiadomień zdalnych, które mają być odbierane. Te typy powiadomień zdalnych są deklarowane w wyliczeniu UIRemoteNotificationType
. Poniższy fragment kodu to przykład sposobu rejestrowania aplikacji systemu iOS w celu odbierania powiadomień o alertach zdalnych i znaczkach:
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
new NSSet ());
UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}
Żądanie rejestracji usługi APNS odbywa się w tle — po odebraniu odpowiedzi system iOS wywoła metodę RegisteredForRemoteNotifications
w klasie AppDelegate
i przekaże zarejestrowany token urządzenia. Token będzie zawarty w obiekcie NSData
. Poniższy fragment kodu przedstawia sposób pobierania tokenu urządzenia dostarczonego przez usługę APNS:
public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
// Get current device token
var DeviceToken = deviceToken.Description;
if (!string.IsNullOrWhiteSpace(DeviceToken)) {
DeviceToken = DeviceToken.Trim('<').Trim('>');
}
// Get previous device token
var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");
// Has the token changed?
if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
{
//TODO: Put your own logic here to notify your server that the device token has changed/been created!
}
// Save new device token
NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}
Jeśli rejestracja nie powiedzie się z jakiegoś powodu (np. urządzenie nie jest połączone z Internetem), system iOS wywoła FailedToRegisterForRemoteNotifications
w klasie delegata aplikacji. Poniższy fragment kodu pokazuje, jak wyświetlić alert dla użytkownika informujący o tym, że rejestracja nie powiodła się:
public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}
Zarządzanie tokenami urządzeń
Tokeny urządzeń wygasają lub zmieniają się wraz z upływem czasu. W związku z tym aplikacje serwerowe będą musiały wykonać porządkowanie i usunąć te wygasłe lub zmienione tokeny. Gdy aplikacja wysyła powiadomienie push do urządzenia, które ma wygasły token, APNS zarejestruje i zapisze ten wygasły token. Serwery mogą następnie wysyłać zapytania do usługi APNS, aby dowiedzieć się, jakie tokeny wygasły.
Dawniej APNS świadczył usługę Feedback Service — punkt końcowy HTTPS, który uwierzytelnia się certyfikatem utworzonym do wysyłania powiadomień wypychanych i zwracał dane dotyczące wygasłych tokenów. Ta funkcja została uznana za przestarzałą przez firmę Apple i usunięta.
Zamiast tego istnieje nowy kod stanu HTTP dla przypadku, który został wcześniej zgłoszony przez usługę opinii:
410 — token urządzenia nie jest już aktywny dla tematu.
Ponadto nowy klucz danych JSON timestamp
będzie znajdować się w treści odpowiedzi:
Jeśli wartość w nagłówku :status wynosi 410, wartość tego klucza jest ostatnim czasem, w którym APNs potwierdził, że token urządzenia nie jest już prawidłowy dla tematu.
Zatrzymaj wysyłanie powiadomień, dopóki urządzenie nie zarejestruje tokenu z późniejszym znacznikiem czasu u swojego dostawcy.
Streszczenie
W tej sekcji przedstawiono kluczowe pojęcia związane z powiadomieniami push w systemie iOS. Wyjaśniono w nim rolę usługi Apple Push Notification Gateway Service (APNS). Następnie omówiła tworzenie i używanie certyfikatów zabezpieczeń, które są niezbędne dla usługi APNS. Na koniec ten dokument zakończył dyskusję na temat sposobu, w jaki serwery aplikacji mogą używać Feedback Services, aby zatrzymać śledzenie wygasłych tokenów urządzeń.
Powiązane łącza
- Powiadomienia lokalne i push dla deweloperów
- interfejsu użytkownikaApplication
- UIRemoteNotificationType