Omówienie APN
Usługa Apple Push Notification (APN) to centralny element funkcji zdalnych powiadomień. Jest to solidna, bezpieczna i wysoce wydajna usługa dla twórców aplikacji służąca do rozpowszechniania informacji do urządzeń z systemem iOS (i pośrednio do systemu watchOS), tvOS i macOS.
Przy pierwszym uruchomieniu aplikacji na urządzeniu użytkownika system automatycznie ustanawia akredytowane, zaszyfrowane i trwałe połączenie IP między aplikacją a APN. To połączenie umożliwia aplikacji konfigurację, która umożliwia otrzymywanie powiadomień, zgodnie z opisem w sekcji Konfigurowanie obsługi zdalnego powiadamiania.
Druga połowa połączenia do wysyłania powiadomień - trwały, bezpieczny kanał między serwerem dostawcy a APN - wymaga konfiguracji na koncie programisty online i korzystania z certyfikatów kryptograficznych dostarczonych przez firmę Apple. Dostawca to serwer wdrażany i zarządzany, konfigurowany do pracy z APN. Rysunek 1-1 przedstawia ścieżkę dostarczania dla zdalnego powiadomienia.
Rysunek 1-1 Dostarczanie zdalnego powiadomienia od dostawcy do aplikacji
Po zakończeniu konfiguracji powiadomień push u dostawców i w aplikacji dostawcy mogą następnie wysyłać żądania powiadomień do APN. APN przekazuje odpowiednie ładunki powiadomień do każdego docelowego urządzenia. Po otrzymaniu powiadomienia system dostarcza ładunek do odpowiedniej aplikacji na urządzeniu i zarządza interakcjami z użytkownikiem.
Jeśli powiadomienie dotyczące Twojej aplikacji nadejdzie, gdy urządzenie jest włączone, ale aplikacja nie jest uruchomiona, system może nadal wyświetlać powiadomienie. Jeśli urządzenie jest wyłączone, gdy APN wysyła powiadomienie, APN zatrzymuje powiadomienie i próbuje ponownie później (aby uzyskać szczegółowe informacje, zobacz Quality of Service, Store-and-Forward i Joint Notifications).
Obowiązki dostawcy
Twoje serwery dostawcy mają następujące obowiązki związane z uczestnictwem w APN:
- Otrzymywanie, za pośrednictwem APN, unikalnych w skali światowej, tokenów urządzeń specyficznych dla aplikacji i innych istotnych danych z wystąpień aplikacji na urządzeniach użytkowników. Dzięki temu dostawca wie o każdym uruchomionym wystąpieniu aplikacji.
- Określenie, zgodnie z projektem Twojego systemu powiadomień, kiedy zdalne powiadomienia muszą być wysyłane do każdego urządzenia.
- Tworzenie i wysyłanie żądań powiadomień do APN, każde żądanie zawierające ładunek powiadomienia i informacje o dostarczeniu; Następnie APN dostarcza odpowiednie powiadomienia do odpowiednich urządzeń w Twoim imieniu.
W przypadku każdego żądania zdalnego powiadomienia, które wysyła dostawca, musi:
- Skonstruuj słownik JSON zawierający ładunek powiadomienia, zgodnie z opisem w temacie Tworzenie ładunku zdalnego powiadomienia.
- Dodaj ładunek, globalnie unikalny token urządzenia i inne informacje o dostarczaniu do żądania HTTP / 2. Aby uzyskać informacje na temat tokenów urządzeń, zobacz Zaufanie do połączeń APN-to-urządzenie i Tokeny urządzeń. Aby uzyskać informacje o formacie żądań HTTP / 2 oraz możliwych odpowiedziach i błędach z APN, zobacz Komunikacja z APN.
- Wyślij żądanie HTTP / 2 do APN, w tym poświadczenia kryptograficzne w postaci tokena lub certyfikatu, przez trwały, bezpieczny kanał.
- Ustanowienie tego bezpiecznego kanału opisano w sekcji Architektura zabezpieczeń.
Korzystanie z wielu dostawców
Rysunek 1-2 przedstawia rodzaj sieci wirtualnej, którą APN umożliwia urządzeniom z uruchomionymi aplikacjami. Aby obsłużyć ładowanie powiadomień, zazwyczaj wdraża się wielu dostawców, z których każdy ma własne trwałe i bezpieczne połączenie z APN. Każdy dostawca może następnie wysyłać żądania powiadomień skierowane do dowolnego urządzenia, dla którego dostawca ma prawidłowy token urządzenia.
Rysunek 1-2 Przesyłanie zdalnych powiadomień od wielu dostawców do wielu urządzeń
Powiadomienia o jakości usług, „Store and Forward” i połączone
Usługa Apple Push Notification obejmuje składnik Quality of Service (QoS), który pełni funkcję „zapisz i przekaż dalej”. Jeśli APN próbuje dostarczyć powiadomienie, a urządzenie docelowe jest w trybie offline, APN przechowuje powiadomienie przez ograniczony czas i dostarcza je, gdy urządzenie stanie się ponownie dostępne. Ten składnik przechowuje tylko najnowsze powiadomienia na urządzenie i aplikację. Jeśli urządzenie jest w trybie offline, wysłanie żądania powiadomienia skierowanego do tego urządzenia powoduje odrzucenie poprzedniego żądania. Jeśli urządzenie pozostaje w trybie offline przez długi czas, wszystkie jego powiadomienia zapisane w APN są odrzucane.
Aby umożliwić łączenie podobnych powiadomień, w żądaniu powiadomienia można dołączyć identyfikator zwinięcia. Zwykle, gdy urządzenie jest w trybie online, każde żądanie powiadomienia wysyłane do APN skutkuje powiadomieniem dostarczonym do urządzenia. Jednak gdy klucz apns-collapse-id jest obecny w nagłówku żądania HTTP / 2, APN łączy żądania, których wartość dla tego klucza jest taka sama. Na przykład serwis informacyjny, który dwukrotnie wysyła ten sam nagłówek, może używać tej samej wartości identyfikatora zwijania dla obu żądań. Punkty APN połączyłyby następnie dwa żądania w jedno powiadomienie o dostarczeniu do urządzenia. Aby uzyskać szczegółowe informacje na temat klucza apns-collapse-id.
Architektura bezpieczeństwa
APN wymusza kompleksową weryfikację kryptograficzną i uwierzytelnianie przy użyciu dwóch poziomów zaufania: zaufania połączenia i zaufania tokenu urządzenia.
Zaufanie połączenia działa między dostawcami a APN oraz między APN a urządzeniami.
Zaufanie tokenu urządzenia działa kompleksowo w przypadku każdego zdalnego powiadomienia. Zapewnia, że powiadomienia są kierowane tylko między prawidłowymi punktami początkowymi (dostawcy) i końcowymi (urządzenia).
Token urządzenia to nieprzezroczysta instancja NSData, która zawiera unikalny identyfikator przypisany przez firmę Apple do określonej aplikacji na określonym urządzeniu. Tylko APN mogą dekodować i odczytywać zawartość tokenu urządzenia. Każde wystąpienie aplikacji otrzymuje swój unikatowy token urządzenia, gdy rejestruje się w APN, a następnie musi przekazać token do swojego dostawcy, zgodnie z opisem w sekcji Konfigurowanie obsługi zdalnego powiadamiania. Dostawca musi dołączyć token urządzenia do każdego żądania powiadomienia wypychanego, które jest przeznaczone dla skojarzonego urządzenia; Punkty APN używają tokena urządzenia, aby zapewnić, że powiadomienie zostanie dostarczone tylko do unikatowej kombinacji aplikacja-urządzenie, dla której jest przeznaczone.
APN może wystawiać nowy token urządzenia z różnych powodów:
- Użytkownik instaluje Twoją aplikację na nowym urządzeniu
- Użytkownik przywraca urządzenie z kopii zapasowej
- Użytkownik ponownie instaluje system operacyjny
- Inne zdarzenia zdefiniowane przez system
W rezultacie aplikacje muszą żądać tokenu urządzenia w czasie uruchamiania, zgodnie z opisem w Zaufanie połączenia APN-to-urządzenie i Tokeny urządzeń. Aby zapoznać się z przykładami kodu, zobacz Rejestrowanie się w celu otrzymywania zdalnych powiadomień.
Aby ustanowić sesje TLS oparte na protokole HTTP / 2 z APN, musisz upewnić się, że certyfikat główny GeoTrust Global CA jest zainstalowany na każdym z dostawców. Jeśli dostawca korzysta z systemu macOS, ten certyfikat główny znajduje się domyślnie w pęku kluczy. W innych systemach ten certyfikat może wymagać jawnej instalacji. Możesz pobrać ten certyfikat ze strony GeoTrust Root Certificates. Oto bezpośredni link do certyfikatu.
Rysunek 1-3 ilustruje użycie interfejsu API dostawcy APN opartego na protokole HTTP / 2 do ustanowienia zaufania oraz użycie tokenów uwierzytelniania dostawcy JWT do wysyłania powiadomień.
Rysunek 1-3 Ustanawianie i używanie zaufania połączenia dostawcy opartego na tokenach
Jak pokazano na rysunku 1-3, zaufanie dostawcy opartego na tokenach działa w następujący sposób:
Twój dostawca prosi o bezpieczne połączenie z APN przy użyciu zabezpieczeń warstwy transportowej (TLS), co na rysunku przedstawia strzałka oznaczona „Inicjacja TLS”.
Następnie APNs przekazuje twojemu dostawcy certyfikat APN, reprezentowany przez następną strzałkę na rysunku (oznaczony jako „certyfikat APNs”), który następnie weryfikuje twój dostawca.
W tym momencie zostaje ustanowione zaufanie połączenia, a serwer dostawcy może wysyłać żądania zdalnego powiadomienia wypychanego oparte na tokenach do APN. Każdemu żądaniu powiadomienia, które wysyła Twój dostawca, musi towarzyszyć token uwierzytelniania JWT przedstawiony na rysunku jako strzałka oznaczona „Powiadomienie push”.
APN odpowiada na każde wypchnięcie, przedstawione na rysunku jako strzałka z etykietą „Odpowiedź HTTP / 2”.
Aby uzyskać szczegółowe informacje na temat odpowiedzi, które dostawca może otrzymać w tym kroku, zobacz odpowiedź HTTP / 2 z APN.
Rysunek 1-4 ilustruje użycie certyfikatu SSL wydanego przez Apple do ustanowienia zaufania między dostawcą a APN. W przeciwieństwie do rysunku 1-3, rysunek ten nie przedstawia samego powiadomienia push, ale zatrzymuje się w momencie ustanowienia połączenia Transport Layer Security (TLS). W schemacie zaufania opartym na certyfikatach żądania powiadomień wypychanych nie są uwierzytelniane, ale są weryfikowane przy użyciu towarzyszącego tokenu urządzenia.
Rysunek 1-4 Ustanawianie opartego na certyfikacie zaufania połączenia dostawcy
Jak pokazano na rysunku 1-4, zaufanie oparte na certyfikatach między dostawcami a APN działa w następujący sposób:
Twój dostawca prosi o bezpieczne połączenie z APN przy użyciu zabezpieczeń warstwy transportowej (TLS), co na rysunku przedstawia strzałka oznaczona „Inicjacja TLS”.
Następnie APNs przekazuje twojemu dostawcy certyfikat APN, reprezentowany przez następną strzałkę na rysunku (oznaczony jako „certyfikat APNs”), który następnie weryfikuje twój dostawca.
Twój dostawca musi następnie wysłać swój certyfikat dostawcy obsługiwany przez Apple (który wcześniej uzyskałeś z konta programisty online, jak wyjaśniono w sekcji „Generowanie uniwersalnego certyfikatu SSL klienta APNs” w Pomocy Xcode) z powrotem do APN, oznaczonego strzałką oznaczoną „Dostawca certyfikat."
Następnie APN weryfikuje certyfikat dostawcy, potwierdzając w ten sposób, że żądanie połączenia pochodzi od legalnego dostawcy i ustanawia połączenie TLS.
W tym momencie zostaje ustanowione zaufanie połączenia, a serwer dostawcy może wysyłać oparte na certyfikatach żądania zdalnych powiadomień push do APN.
Zaufanie do połączeń APN-to-urządzenie i tokeny urządzeń
Zaufanie między APN a każdym urządzeniem jest ustanawiane automatycznie, bez udziału Twojej aplikacji, zgodnie z opisem w tej sekcji.
Każde urządzenie posiada certyfikat kryptograficzny oraz prywatny klucz kryptograficzny, dostarczany przez system operacyjny przy początkowej aktywacji urządzenia i przechowywany w pęku kluczy urządzenia. Podczas aktywacji APN uwierzytelnia i weryfikuje połączenie z urządzeniem na podstawie certyfikatu i klucza, jak pokazano na rysunku 6-5.
Rysunek 1-5 Ustanawianie zaufania połączenia między urządzeniem a APN
Jak pokazano na rysunku 1-5, zaufanie APN-do-urządzenia działa w następujący sposób:
- Negocjacja zaufania rozpoczyna się, gdy urządzenie zainicjuje połączenie TLS z APN, jak pokazano na górnej strzałce na rysunku.
- APNs zwraca certyfikat APNs do urządzenia.
- System operacyjny sprawdza poprawność tego certyfikatu, a następnie, zgodnie ze strzałką „Certyfikat urządzenia”, wysyła certyfikat urządzenia do APN.
- Wreszcie, jak wskazuje dolna strzałka na rysunku, punkty APN sprawdzają certyfikat urządzenia, ustanawiając zaufanie.
- Po nawiązaniu połączenia TLS między APN a urządzeniem aplikacje na urządzeniu mogą zarejestrować się w APN, aby otrzymywać tokeny urządzenia specyficzne dla aplikacji na potrzeby zdalnych powiadomień. Aby uzyskać szczegółowe informacje i przykłady kodu, zobacz Rejestracja w celu otrzymywania zdalnych powiadomień w sekcji Konfigurowanie obsługi zdalnych powiadomień.
Po otrzymaniu tokenu urządzenia aplikacja musi połączyć się ze skojarzonym dostawcą aplikacji i przekazać mu token. Ten krok jest konieczny, ponieważ dostawca musi dołączyć token urządzenia później, gdy wysyła żądanie powiadomienia do APN, kierując je na urządzenie. Kod, który napiszesz w celu przekazania tokenu, jest również wyświetlany w sekcji Rejestracja w celu otrzymywania zdalnych powiadomień.
Niezależnie od tego, czy użytkownik aktywuje urządzenie po raz pierwszy, czy też APN wystawił nowy token urządzenia, proces jest podobny i pokazano na rysunku 6-6.
Rysunek 1-6 Zarządzanie tokenem urządzenia
Uzyskiwanie i obsługa tokenu urządzenia specyficznego dla aplikacji działa w następujący sposób:
Twoja aplikacja rejestruje się w APN dla zdalnych powiadomień, jak pokazano na górnej strzałce. Jeśli aplikacja jest już zarejestrowana, a token urządzenia specyficzny dla aplikacji nie zmienił się, system szybko zwraca istniejący token do aplikacji, a ten proces przechodzi do kroku 4.
Gdy potrzebny jest nowy token urządzenia, APN generuje go na podstawie informacji zawartych w certyfikacie urządzenia. Szyfruje token za pomocą klucza tokena i zwraca go do urządzenia, jak pokazano na środkowej, skierowanej w prawo strzałce.
System dostarcza token urządzenia z powrotem do Twojej aplikacji, wywołując aplikację: didRegisterForRemoteNotificationsWithDeviceToken: delegate.
Po otrzymaniu tokenu Twoja aplikacja (w ramach metody delegata) musi przekazać go do dostawcy w formacie binarnym lub szesnastkowym. Twój dostawca nie może wysyłać powiadomień do urządzenia bez tego tokena. Aby uzyskać szczegółowe informacje, zobacz Rejestracja w celu otrzymywania zdalnych powiadomień w sekcji Konfigurowanie obsługi zdalnych powiadomień.
WAŻNY
Tokeny urządzeń APN mają zmienną długość. Nie koduj ich rozmiaru na stałe.
Gdy Twój dostawca wysyła żądanie powiadomienia wypychanego do APN, zawiera token urządzenia, który identyfikuje unikalną kombinację aplikacji i urządzenia. Ten krok jest pokazany na strzałce „Token, ładunek” między dostawcą a APN na rysunku 6-7. APN odszyfrowuje token, aby zapewnić ważność żądania i określić urządzenie docelowe. Jeśli APN stwierdzi, że nadawca i odbiorca są wiarygodni, wysyła powiadomienie do zidentyfikowanego urządzenia.
Rysunek 1-7 Ścieżka zdalnego powiadomienia od dostawcy do urządzenia
Gdy urządzenie otrzyma powiadomienie (i po ostatnim kroku pokazanym na rysunku 1-7), system przekaże zdalne powiadomienie do Twojej aplikacji.
Ref: Usługa powiadomień push firmy Apple
Teraz spójrz tutaj, aby zrozumieć przepływ techniczny: Jak wdrożyć usługę Apple Push Notification Service w aplikacji iOS?