Czy token urządzenia APNS kiedykolwiek zmienia się po utworzeniu?

99

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ć?

001
źródło
Upewnij się, że widzisz tę odpowiedź, ponieważ zawiera dokumentację 4 miejsc, w których zmienia się token urządzenia
Kochanie

Odpowiedzi:

71

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.

malinois
źródło
Obecni doktorzy pominęli ostatnie zdanie. Wydaje się (z innym pytaniem Więc stackoverflow.com/questions/2751481/... ), że przywracanie danych będzie zachować żetony APN ale instaluje OS i „chusteczki” będzie mógł go zresetować (o ile nie są one następnie przywrócenie danych do nowo zainstalowanej obsługi system).
Robert Altman
1
@RobertAltman - Nie sądzę, żeby to była cała historia. Widziałem wiele rejestracji w naszej bazie danych z zupełnie różnych urządzeń z dokładnie tym samym tokenem APNS. Widzę teraz przed sobą iPada 2 i iPhone'a 3GS, które wysłały nam ten sam token. Czy ktoś może potwierdzić to zachowanie?
DougW,
@DougW, to jest dziwne. Czy nadal masz podobny problem? Edytował link i opublikował na podstawie najnowszych dokumentów.
iosCurator
139

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.


Aktualizacja (czerwiec 2012):

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:

  1. Zacznij od iOS4 zainstalowanego na iPhone4; urządzenie do tworzenia kopii zapasowych w iTunes

  2. Uaktualnij do iOS5
    Z poprzedniego testu wiem, że token APN jest teraz inny

  3. Przywróć kopię zapasową na urządzenie
    Token APN jest teraz taki sam jak w kroku 1.

  4. Zresetuj iOS (czyste urządzenie)
    Token APN ulegnie zmianie

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

  6. Przywróć „prawidłową” kopię zapasową na urządzenie.
    Token APN jest teraz taki sam jak w kroku 1.

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


Aktualizacja (sierpień 2012)

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

Robert Altman
źródło
czy to oznacza, że ​​możesz użyć tokena jako sposobu na unikalną identyfikację użytkownika? (co jest bardzo praktyczne w aplikacjach, w których trzeba „głosować”?). Mogę sobie wyobrazić sytuację: użytkownicy głosują, a aplikacja odpowiada losową liczbą za pośrednictwem powiadomień. Numer ten musi zostać ponownie przesłany na serwer, aby głos był ważny. W ten sposób głosowanie nie może być łatwo sfałszowane.
Ropucha
również interesujące: czy token zmienia się podczas usuwania aplikacji i jej ponownej instalacji. Czy jest to podobne do opcji „przywracanie kopii zapasowej”
Ropucha
@Toad Token nie zmieni się w wyniku usunięcia i ponownej instalacji aplikacji.
Robert Altman
@Toad Nie sądziłbym, że byłaby to dobra forma identyfikacji użytkownika; ponieważ token jest unikalny dla każdego urządzenia (a także dla aplikacji), użytkownik posiadający wiele urządzeń będzie miał wiele tokenów.
Robert Altman
1
Zastanawiam się nad relacją między certyfikatami a tokenem urządzenia. jeśli certyfikat .p12 wygaśnie, należy zmienić nowy certyfikat. Znalazłem odniesienie „Gdy potrzebny jest nowy token urządzenia, APN generuje go na podstawie informacji zawartych w certyfikacie urządzenia”. Czy zatem nie ma możliwości odświeżenia tokena urządzenia podczas zmiany certyfikatów?
illusionJJ
50

Właśnie przetestowałem to ze zmianami tokena iOS9 i APN Push, jeśli ponownie zainstaluję aplikację.

Nikolay Derkach
źródło
7
Mogę to potwierdzić
roocell
1
Ja też mogę to potwierdzić
Muhammad Adnan
1
Tak, to się zmienia :(
Azik Abdullah
Czy ktoś może powiedzieć, dlaczego tak się dzieje?
Sushobhit,
Tak, to by się zmieniło
Ved Rauniyar
22

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:

  1. Zaktualizuj lokalną pamięć urządzenia (w tym prawdopodobnie nil)
  2. Zaktualizuj wszystko na urządzeniu, które używa tokenu, aby mieć świadomość nowego tokenu
  3. Zaktualizuj wszystkie interfejsy API, które znają ten token, do nowego tokenu.

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_tokeni new_tokendo 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ś UPDATEudogodnienia dla tego tokena. Aby nie budować tego jest to, aby zbudować dla mis-dostarczone i niedostarczonego powiadomień.

SG1
źródło
brzmi dobrze, ale co usunąłem i ponownie zainstalowałem moją aplikację? w takim przypadku token urządzenia, który zapisałem w lokalnej pamięci, zostanie usunięty
Kuf
@Kuf, czy otrzymałeś odpowiedź na to pytanie? Mam to samo - nawet jeśli aplikacja jest odinstalowywana / ponownie instalowana, jak porównalibyśmy token systemowy?
nkirkes
@nkirkes zobacz to pytanie, aby uzyskać więcej informacji
Kuf
Trzy punkty „Aktualizacji”, o których mówiłeś, czy są one obowiązkiem iOS, SDK czy nas samych?
somenickname
7

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.

Nitya
źródło
2
URL jest martwy! Proszę napraw to.
Ramis
dobry link
SomeGuyFortune
4

Myślę, że warto o tym wspomnieć, ponieważ nikt nie zrobił tego, że token zmienia się po Twoim sprawdzeniu unregisterForRemoteNotifications. Kiedy dzwonisz registerForRemoteNotificationsnastę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ć

Andrey Chernukha
źródło
3

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

Jake
źródło
Masz rację: nie możesz zakładać, że token jest trwały; postępuj zgodnie z zasadami zaangażowania określonymi w dokumentach APN. W rzeczywistości twórcy Apple'a powiedzieli mi, że token w końcu się zmieni (po około 2 latach).
Robert Altman
1
Wskrzeszenie starej dyskusji, ale komuś może się to przydać: spędziłem w tym tygodniu trochę czasu pracując na własnym serwerze Parse i mając problemy z testowaniem - okazuje się, że za każdym razem, gdy odświeżam moją aplikację deweloperską (kiedy tworzyłem liczba zmian UX), identyfikator tokena zmieniał się przy każdej instalacji oprogramowania ... czy to nie jest po prostu zbyt zabawne? (wzdychanie)
ChrisH
3

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.

Lal Krishna
źródło
2

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.

Z tego przewodnika

TheFuquan
źródło
0

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.

Mohit Gaur
źródło
0

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.

lucianoenrico
źródło
0

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

iosCurator
źródło
0

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 NSPAppDelegateprzy każdym uruchomieniu aplikacji, w metodziedidRegisterForRemoteNotificationsWithDeviceToken

Alberto Scampini
źródło