Powiadomienia wypychane w systemie iOS

Ważne

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 dotyczącym platformy powiadomień użytkownika na potrzeby 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

W centrum powiadomień wypychanych w systemie iOS jest usługa 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: This image illustrates the push notification topology for 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ń w przewodniku programowania powiadomień lokalnych i wypychanych w dokumentacji deweloperów systemu iOS.

Firma Apple utrzymuje dwa środowiska usługi APNS: piaskownicę i środowisko produkcyjne. Środowisko piaskownicy jest przeznaczone do testowania w fazie programowania i można je znaleźć na gateway.sandbox.push.apple.com porcie TCP 2195. Środowisko produkcyjne ma być używane w aplikacjach, które zostały wdrożone i można je znaleźć na gateway.push.apple.com porcie TCP 2195.

Wymagania

Powiadomienie wypychane musi przestrzegać następujących reguł, które są dyktowane przez architekturę usługi APNS:

  • Limit komunikatów 256 bajtów — cały rozmiar komunikatu powiadomienia nie może przekraczać 256 bajtów.
  • Brak potwierdzenia potwierdzenia — usługa APNS nie dostarcza nadawcy żadnego powiadomienia, że wiadomość wysłana 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):

    The iOS Provisioning Portal on Apples website

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

    Navigate to the App IDs section and create a new app ID

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

    Enter the description and a Bundle Identifier for the app ID

  4. Upewnij się, że wybierz pozycję Jawny identyfikator aplikacji i że identyfikator pakietu nie kończy się na .* Spowoduje to utworzenie identyfikatora, który jest dobry dla wielu aplikacji, a certyfikaty powiadomień wypychanych muszą być przeznaczone dla jednej aplikacji.

  5. W obszarze App Services wybierz pozycję Powiadomienia wypychane:

    Select Push Notifications

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

    Confirm registration of the new App ID

  7. Następnie należy utworzyć certyfikat dla identyfikatora aplikacji. W obszarze nawigacji po lewej stronie przejdź do pozycji Certyfikaty > Wszystkie i wybierz + przycisk, jak pokazano na poniższym zrzucie ekranu:

    Create the certificate for the app ID

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

    Select a Development or Production certificate

  9. Następnie wybierz nowo utworzony identyfikator aplikacji:

    Select the new App ID just created

  10. Spowoduje to wyświetlenie instrukcji, które przejdą przez proces tworzenia żądania podpisania certyfikatu przy użyciu aplikacji dostępu łańcucha kluczy na komputerze Mac.

  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 aprowizacji programowania, przejdź do sekcji Profile aprowizacji i wykonaj kroki tworzenia przy użyciu właśnie utworzonego identyfikatora aplikacji.

  13. Po utworzeniu profilu aprowizacji otwórz organizatora Xcode 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 aprowizacji:
    This screen shot shows an example of the Organizer with the provision profile added

  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 pokazano na poniższym zrzucie ekranu:
    Configure the Xamarin.iOS project to use this newly created provisioning profile

Na tym etapie aplikacja jest skonfigurowana do pracy z powiadomieniami wypychanymi. 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. Otwórz dostęp pęku kluczy — jest to interfejs graficzny interfejsu użytkownika systemu zarządzania hasłami w systemie OS X.
  3. Zaimportuj certyfikat — jeśli certyfikat nie został jeszcze zainstalowany, plik... Importuj elementy z menu Dostęp łańcucha kluczy. Przejdź do wyeksportowanego powyżej certyfikatu i wybierz go.
  4. Wyeksportuj 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.

W tym momencie przeprowadzamy 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 zakończeniu rejestracji serwer aplikacji może wypychać 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 buforowania najnowszego tokenu urządzenia i aktualizować serwer aplikacji tylko wtedy, gdy ulegnie zmianie. Na poniższym diagramie przedstawiono proces rejestracji i uzyskiwania tokenu urządzenia:

This diagram illustrates the process of registration and obtaining a device token

Rejestracja w usłudze APNS jest obsługiwana w FinishedLaunching metodzie klasy delegata aplikacji przez wywołanie RegisterForRemoteNotificationTypes bieżącego UIApplication obiektu. 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 wyliczenie 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 AppDelegate klasie i przekaże zarejestrowany token urządzenia. Token będzie zawarty w NSData obiekcie. 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 (na przykład urządzenie nie jest połączone z Internetem), system iOS wywoła FailedToRegisterForRemoteNotifications klasę 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();
}

Przechowywanie tokenów 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ć czyszczenie i przeczyszczenie tych wygasłych lub zmienionych tokenów. Gdy aplikacja wysyła powiadomienie wypychane do urządzenia, które ma wygasły token, usługa APNS będzie rejestrować i zapisywać wygasły token. Serwery mogą następnie wysyłać zapytania do usługi APNS, aby dowiedzieć się, jakie tokeny wygasły.

USŁUGA APNS używana do udostępniania usługi opinii — punkt końcowy HTTPS, który uwierzytelnia się za pośrednictwem utworzonego certyfikatu w celu wysyłania powiadomień wypychanych i wysyła dane zwrotne o tym, jakie tokeny wygasły. 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 timestamp klucz danych JSON będzie znajdować się w treści odpowiedzi:

Jeśli wartość w nagłówku :status wynosi 410, wartość tego klucza jest ostatnim momentem, w którym apNs potwierdził, że token urządzenia nie jest już prawidłowy dla tematu.

Zatrzymaj wypychanie powiadomień, dopóki urządzenie nie zarejestruje tokenu z późniejszym znacznikiem czasu u dostawcy.

Podsumowanie

W tej sekcji przedstawiono kluczowe pojęcia związane z powiadomieniami wypychającymi 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ć usług opinii, aby zatrzymać śledzenie wygasłych tokenów urządzeń.