Udostępnij za pośrednictwem


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: Ten obraz ilustruje 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.

  1. 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):

    portal aprowizacji systemu iOS w witrynie internetowej firmy Apple

  2. Następnie przejdź do sekcji Identyfikator aplikacji i utwórz nowy identyfikator aplikacji, jak pokazano na poniższym zrzucie ekranu:

    przejdź do sekcji Identyfikatory aplikacji i utwórz nowy identyfikator aplikacji

  3. Po kliknięciu przycisku + będzie można wprowadzić opis i identyfikator pakietu aplikacji, co pokazano na następnym zrzucie ekranu.

    wprowadź opis i identyfikator pakietu dla identyfikatora aplikacji

  4. 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.

  5. W obszarze App Services wybierz pozycję powiadomienia push:

    wybierz powiadomienia push

  6. Następnie naciśnij Prześlij, aby potwierdzić rejestrację nowego identyfikatora aplikacji:

    potwierdzić rejestrację nowego identyfikatora aplikacji

  7. 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.

    Utwórz certyfikat dla identyfikatora aplikacji

  8. Wybierz, czy chcesz użyć certyfikatu programistycznego, czy produkcyjnego:

    Wybierz certyfikaty programistyczne lub produkcyjne

  9. Następnie wybierz nowo utworzony identyfikator aplikacji:

    Wybierz nowo utworzony identyfikator aplikacji

  10. Spowoduje to wyświetlenie instrukcji, które przeprowadzą cię przez proces tworzenia żądania podpisania certyfikatu przy użyciu aplikacji Keychain Access na Macu.

  11. 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.

  12. Aby utworzyć profil deweloperski, przejdź do sekcji Provisioning Profiles i wykonaj kroki, aby go utworzyć, używając nowo utworzonego identyfikatora aplikacji.

  13. 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:
    Ten zrzut ekranu przedstawia przykład organizatora z dodanym profilem aprowizacji

  14. 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.
    Skonfiguruj projekt oparty na Xamarin.iOS do korzystania z tego nowo utworzonego profilu zabezpieczeń

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:

  1. 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 .
  2. Dostęp do pęku kluczy — to aplikacja będąca graficznym interfejsem użytkownika systemu zarządzania hasłami w systemie OS X.
  3. 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.
  4. 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:

Ten diagram ilustruje 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ń.