Czy po utworzeniu token urządzenia do powiadamiania push kiedykolwiek się zmienia?
Przykład, kiedy aplikacja jest aktualizowana? czy w jakimkolwiek innym przypadku może się zmienić?
Czy po utworzeniu token urządzenia do powiadamiania push kiedykolwiek się zmienia?
Przykład, kiedy aplikacja jest aktualizowana? czy w jakimkolwiek innym przypadku może się zmienić?
Odpowiedzi:
Z [Dokumentacji Apple ApplePushService] 2
Forma tej fazy zaufania tokenu zapewnia, że tylko APN generuje token, który będzie później honorowany, i może zapewnić sobie, że token przekazany mu przez urządzenie jest tym samym tokenem, który wcześniej udostępnił dla tego konkretnego urządzenia - i tylko dla tego urządzenia.
Jeśli użytkownik przywróci dane z kopii zapasowej na nowe urządzenie lub ponownie zainstaluje system operacyjny, token urządzenia ulegnie zmianie.
Oficjalna dokumentacja Apple jest w tej kwestii niejasna. Zauważyłem, że token jest niezmienny dla danego urządzenia, aplikacji i domeny (produkcja a piaskownica). Uważam, że musi to pozostać prawdą, aby system działał niezawodnie. Rozważmy sytuację, w której aktualizacja aplikacji wyzwala nowy token APN; gdybym używał najlepszej nowej aplikacji podobnej do Twittera z włączonymi powiadomieniami, co by się stało, gdy zaktualizuję moją aplikację z iTunes? Czy powinienem oczekiwać, że powiadomienia będą nadal wysyłane, mimo że nie uruchomiłem aplikacji od czasu „zsynchronizowania” aktualizacji na moim urządzeniu? Czynność zmiany aplikacji nie może wpłynąć na system APN, ponieważ system operacyjny może otrzymywać powiadomienia w Twoim imieniu, nawet jeśli nie uruchomiłeś zaktualizowanej aplikacji.
Dla jasności Apple stwierdza: „Aplikacja powinna rejestrować się [na serwerach APN] przy każdym uruchomieniu i przekazywać dostawcy aktualny token”. Całkowicie się zgadzam; Dzięki temu Twoja aplikacja będzie chroniona przed złymi założeniami lub nietypowymi sytuacjami.
Jedna z odpowiedzi na pytanie Czy tokeny powiadomień push są unikalne we wszystkich aplikacjach na jednym urządzeniu? wskazuje, że tokeny urządzeń są unikalne dla każdej „instalacji systemu operacyjnego”; i że przywrócenie danych z kopii zapasowej na urządzenie utrzymałoby token, ale wyczyszczenie urządzenia spowoduje, że otrzyma nowy token. Byłoby to całkowicie zgodne z intencjami Apple dotyczącymi płynnego działania i prywatności: wyczyszczenie urządzenia jest na tyle poważne, że być może gwarantuje nowe skojarzenie, ale użytkownik przywracający obraz po aktualizacji systemu operacyjnego chciałby zachować swoje istniejące powiadomienia. Jeśli przypomnę sobie ostatnią aktualizację iOS5 na moim iPadzie, przywróciłem ostatnią kopię zapasową po aktualizacji, aby zachować spójność mojego tokena powiadomień. [Edytuj: przywracanie kopii zapasowej do innego pliku urządzenie NIE powieli tokena.]
uwaga: nie mam ostatecznej wiedzy na ten temat, tylko rozsądne doświadczenie w pracy z APN (jako niezależny programista). Jak zwykle najlepiej zweryfikować swoje przypuszczenia.
Niedawno miałem okazję> porozmawiać z inżynierami Apple i b> przeprowadzić kilka testów w świecie rzeczywistym i chciałem przedstawić wyniki:
Aby być kompletnym, kiedy mówię o zwrocie tokenu APN, zakładam kontekst pojedynczego identyfikatora / aplikacji pakietu.
Po pierwsze, inżynierowie Apple powiedzieli, że nie powinno być możliwe, aby dwa urządzenia zwracały ten sam APN. Pomimo poniższych komentarzy, nie byłem w stanie zidentyfikować okoliczności, w których to zawodzi.
Po drugie, oto sekwencja testów i wyniki aktualizacji:
Zacznij od iOS4 zainstalowanego na iPhone4; urządzenie do tworzenia kopii zapasowych w iTunes
Uaktualnij do iOS5
Z poprzedniego testu wiem, że token APN jest teraz inny
Przywróć kopię zapasową na urządzenie
Token APN jest teraz taki sam jak w kroku 1.
Zresetuj iOS (czyste urządzenie)
Token APN ulegnie zmianie
Utwórz kopię zapasową innego telefonu w iTunes i przywróć tę kopię zapasową, aby przetestować urządzenie; w zasadzie przywracam „złą” kopię zapasową, tak jakbym zmieniała telefony.
Token APN ponownie się zmienia; ponadto jest odrębny i nie pasuje do tokenów ani do tokenów oryginalnych, ani do tokenów „sklonowanych”.
Przywróć „prawidłową” kopię zapasową na urządzenie.
Token APN jest teraz taki sam jak w kroku 1.
Na koniec zaktualizowałem telefon do iOS6 (beta2), przywróciłem kopię zapasową i ponownie przetestowałem. Zgodnie z oczekiwaniami token kontynuował dopasowywanie tokenu w kroku 1.
W tym momencie jestem całkiem pewien, że tokenów APN nie można powielać między różnymi urządzeniami; być może stało się to jako błąd we wcześniejszych wersjach iOS, ale jestem przekonany, że iOS5 (i prawdopodobnie iOS6) poprawnie obsługuje tokeny APN.
Właśnie sobie sprawę, że nie dodaje się następująco: tokeny urządzenie będzie zmienić. Jeden z deweloperów Apple podzielił się ze mną, że tokeny faktycznie wygasają (chyba po 2 latach). Z wielu powodów jest to wystarczająco długie, aby można je było uznać za niezmienne.
[Nie martwię się, że muszę aktualizować swoje skrypty testowe nowymi tokenami co dwa lata, zwłaszcza że co roku zmieniam telefony.]
Właśnie przetestowałem to ze zmianami tokena iOS9 i APN Push, jeśli ponownie zainstaluję aplikację.
TAK , tokeny urządzeń mogą się zmieniać.
Za każdym razem, gdy Twoja aplikacja otrzyma token, powinna go przechowywać. Wtedy, gdy zostanie odebrany nowy żeton (który będzie się zdarzyć, w końcu), porównać nowy żeton zapisany znak, a jeśli są one różne:
nil
)Z praktycznego punktu widzenia ostatni krok jest najprawdopodobniej nietrywialny. Na przykład, jeśli masz usługę, która wysyła alerty pogodowe do tokena urządzenia na podstawie kodu pocztowego subskrybowanego przez urządzenie, musisz przekazać old_token
i new_token
do tej usługi, aby mogła zaktualizować dostawę.
Ergo, ogólnie rzecz biorąc, 100% interfejsów API akceptujących „token urządzenia” musi mieć również jakieś UPDATE
udogodnienia dla tego tokena. Aby nie budować tego jest to, aby zbudować dla mis-dostarczone i niedostarczonego powiadomień.
Token urządzenia zmienia się z iOS 8 i nowszych
Zobacz poniższy tekst ze strony internetowej Apple. Rejestracja, planowanie i obsługa powiadomień użytkowników
Token urządzenia jest Twoim kluczem do wysyłania powiadomień push do Twojej aplikacji na określonym urządzeniu. Tokeny urządzeń mogą się zmieniać, więc aplikacja musi się ponownie rejestrować za każdym razem, gdy jest uruchamiana, i przekazywać otrzymany token z powrotem na serwer. Jeśli nie uda się zaktualizować tokena urządzenia, zdalne powiadomienia mogą nie dotrzeć do urządzenia użytkownika. Tokeny urządzeń zmieniają się zawsze, gdy użytkownik przywraca dane kopii zapasowej na nowe urządzenie lub komputer albo ponownie instaluje system operacyjny. Podczas migracji danych na nowe urządzenie lub komputer użytkownik musi raz uruchomić aplikację, zanim zdalne powiadomienia będą mogły zostać dostarczone na to urządzenie.
Myślę, że warto o tym wspomnieć, ponieważ nikt nie zrobił tego, że token zmienia się po Twoim sprawdzeniu unregisterForRemoteNotifications
. Kiedy dzwonisz registerForRemoteNotifications
następnym razem, token jest inny. Nie udało mi się znaleźć żadnego potwierdzenia tego w dokumentach Apple, ale sam byłem świadkiem takiego zachowania. Proszę o tym pamiętać
Nie powinno się to zmienić, chyba że Twoja aplikacja zostanie przywrócona na nowe urządzenie (w tym momencie nie będzie ponownie proszona o akceptację powiadomień push, a po prostu wyśle zarejestrowane połączenie, w którym powinieneś zaakceptować nowy token).
Ale Apple nie gwarantuje, że nigdy się nie zmieni (stąd dokumentacja nigdy o tym nie wspomina). Lepiej zaprogramuj na najgorsze i załóż, że pewnego dnia może się to zmienić. Regularne wysyłanie tokena na serwer umożliwia również usuwanie tokenów, które nie były zarejestrowane od jakiegoś czasu i prawdopodobnie odinstalowały Twoją aplikację lub straciły zainteresowanie jakiś czas temu (a dokumentacja określa to jako pożądane zachowanie!).
Od - Apple Docs
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ą zażądać tokena urządzenia w czasie uruchamiania.
Do tego:
WAŻNY
Tokeny urządzeń APN mają zmienną długość. Nie koduj ich rozmiaru na stałe.
Linki w Apple szybko stają się przestarzałe! więc cytuję to, co wydaje się teraz całkiem jasne:
Nigdy nie buforuj tokenów urządzeń w swojej aplikacji; zamiast tego pobierz je z systemu, gdy ich potrzebujesz. APN wystawia nowy token urządzenia do Twojej aplikacji, gdy wystąpią określone zdarzenia. Gwarantuje się, że token urządzenia będzie inny, na przykład gdy użytkownik przywróci urządzenie z kopii zapasowej, gdy użytkownik zainstaluje Twoją aplikację na nowym urządzeniu lub gdy użytkownik ponownie zainstaluje system operacyjny. Pobieranie tokenu, zamiast polegać na pamięci podręcznej, zapewnia, że masz aktualny token urządzenia potrzebny dostawcy do komunikacji z APN. Gdy próbujesz pobrać token urządzenia, ale nie uległ on zmianie, metoda pobierania szybko wraca.
W odniesieniu do powiadomień push firmy Apple
Token urządzenia jest Twoim kluczem do wysyłania powiadomień push do Twojej aplikacji na określonym urządzeniu. Tokeny urządzeń mogą się zmieniać, więc aplikacja musi się ponownie rejestrować za każdym razem, gdy jest uruchamiana, i przekazywać otrzymany token z powrotem na serwer. Jeśli nie uda się zaktualizować tokena urządzenia, zdalne powiadomienia mogą nie dotrzeć do urządzenia użytkownika. Tokeny urządzeń zmieniają się zawsze, gdy użytkownik przywraca dane kopii zapasowej na nowe urządzenie lub komputer albo ponownie instaluje system operacyjny. Podczas migracji danych na nowe urządzenie lub komputer użytkownik musi raz uruchomić aplikację, zanim zdalne powiadomienia będą mogły zostać dostarczone na to urządzenie.
Nigdy nie buforuj tokena urządzenia; zawsze otrzymuj token z systemu, kiedy tylko go potrzebujesz. Jeśli aplikacja została wcześniej zarejestrowana na potrzeby powiadomień zdalnych, ponowne wywołanie metody registerForRemoteNotifications nie powoduje żadnego dodatkowego obciążenia, a system iOS natychmiast zwraca istniejący token urządzenia do delegata aplikacji. Ponadto system iOS wywołuje metodę pełnomocnika za każdym razem, gdy zmienia się token urządzenia, a nie tylko w odpowiedzi na rejestrację lub ponowną rejestrację aplikacji.
Zgodnie z tym linkiem token urządzenia
Token urządzenia zawarty w każdym żądaniu reprezentuje tożsamość urządzenia otrzymującego powiadomienie. Punkty APN używają tokenów urządzeń do identyfikacji każdej unikalnej kombinacji aplikacji i urządzenia. Używa ich również do uwierzytelniania routingu zdalnych powiadomień wysyłanych do urządzenia. Za każdym razem, gdy Twoja aplikacja działa na urządzeniu, pobiera ten token z APN i przekazuje go do Twojego dostawcy. Twój dostawca przechowuje token i używa go podczas wysyłania powiadomień do tej konkretnej aplikacji i urządzenia. Sam token jest nieprzejrzysty i trwały, zmieniając się tylko wtedy, gdy dane i ustawienia urządzenia zostaną usunięte. Tylko APN mogą dekodować i odczytywać token urządzenia.
Tak , może się zmienić. Idealnie, gdy kiedykolwiek otrzymamy token za pośrednictwem metody callback
- (void) application: (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken
Aplikacja powinna zarejestrować / odświeżyć token na zdalnym serwerze. Zapewni to synchronizację tokenów APNS i serwera.
Zgodnie z dokumentacją Apple ,
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ń. Gdy potrzebny jest nowy token urządzenia, APN generuje go, korzystając z 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ń.
Urządzenie przekazuje token podczas instalacji aplikacji.
Oznacza to, że jeśli ponownie zainstalujesz aplikację, to się zmieni ; nie ma znaczenia, jeśli zrobisz to z kopii zapasowej, aktualizacji iOS itd.
Prawidłowym sposobem korzystania z niego, aby uniknąć jakiegokolwiek problemu, jest uzyskanie tego podanego NSPAppDelegate
przy każdym uruchomieniu aplikacji, w metodziedidRegisterForRemoteNotificationsWithDeviceToken