5

Udaje mi się pobrać dane opinii APNS Apple za pośrednictwem PHP. Struktura, że ​​jestem coraz (po pewnym przetwarzania) wygląda mniej więcej tak:HOWTO usuwać tokeny urządzenia otrzymane przez Apple APNS opinie

datownika

urządzenie żeton

Moje pytanie jest, jak wiemy, które z tokenów urządzenie powinno usunąć z mojej bazy danych i zatrzymać wysyłanie do nich powiadomień.

Regardz,

Mladjo

Odpowiedz

10

Wszystkie urządzenia są podane przez sprzężenie zwrotne 'failed' i powinny zostać usunięte. Brak opinii oznacza, że ​​żadne urządzenia nie powinny zostać usunięte. To zakryte na dokumentacji Apple:

Apple APN Documentation

+1

APNS sprzężenie zwrotne zwraca tokeny urządzenia, jeśli dostarczenie powiadomienia nie powiodło się. Nie oznacza to, że aplikacja została odinstalowana z urządzenia, może się zdarzyć, że użytkownik nie ma w tej chwili stałego połączenia z siecią Wi-Fi. – Mladen

+1

To nie jest to, co mówi dokumentacja. "Jeśli usługodawca próbuje dostarczyć powiadomienie push do aplikacji, ale aplikacja już nie istnieje na urządzeniu, urządzenie zgłasza ten fakt w usłudze powiadomień Apple Push. Ta sytuacja często ma miejsce, gdy użytkownik odinstalował aplikację. urządzenie zgłasza próby nieudanego dostarczenia aplikacji, APN musi w jakiś sposób poinformować dostawcę, aby mógł powstrzymać się od wysyłania powiadomień do tego urządzenia. " – Lee

+5

@Mladen. Błędny. Jeśli urządzenie nie ma połączenia Wi-Fi lub 3/4G, Apple wyśle ​​powiadomienie push później, gdy będzie ono miało połączenie. – midspace

-1

należy przechowywać urządzeń ze swojego urządzenia tokenu danych, a następnie można znaleźć tych urządzeń zgodnie z ich żetonów urządzenia. Możesz użyć tokena urządzenia do identyfikacji każdego urządzenia. Niż będzie łatwo znaleźć i zmienić ich statusy w bazie danych.

11

Ważnym elementem jest znacznik czasu. Sygnatura czasowa wysłana przez Apple wskazuje, kiedy ostatnio usługa push próbowała dostarczyć wiadomość do urządzenia i znalazła aplikację, która ma zostać odinstalowana. Jeśli urządzenie zostało ponownie zarejestrowane w usłudze od tego czasu, nie ma potrzeby jej usuwania.

Dlatego za każdym razem, gdy aplikacja ładuje się i wysyła token do usługi, należy zarejestrować czas w magazynie danych. Po uruchomieniu opinii należy sprawdzić czas od Apple i porównać go z czasem, w którym ostatnio otrzymałeś aktualizację z aplikacji na urządzeniu. Jeśli czas wysłany przez Apple jest nowszy niż czas, w którym otrzymałeś aktualizację, powinieneś usunąć (lub wyłączyć) urządzenie. Jeśli czas od Apple jest wcześniejszy, nie musisz go usuwać, ponieważ użytkownik ponownie zainstalował urządzenie, ponieważ Apple próbował je dostarczyć.

0

czyste wyjaśnienie @argon, jednak mam inne pytanie dotyczące znacznika czasu.

Za każdym razem, gdy aplikacja włącza powiadomienia push, token urządzenia jest wysyłany na serwer. Powinienem wziąć sygnaturę czasową z mojego serwera, która będzie utrzymywała się wraz z tokenem urządzenia, ponieważ didRegisterForRemoteNotificationsWithDeviceToken nadaje tylko deviceToken, a nie czas. Jeśli mój serwer działa w innej strefie czasowej, a punkt APNS działa w innej strefie czasowej, wówczas zapisany czas rejestracji (wraz z tokenem urządzenia) nie może być porównywany z datownikiem otrzymanym od opinii APNS, aby sprawdzić kolejność rejestracji -> odinstaluj -> ponownie zarejestruj.

Zakładam, że znacznik czasu APNS znajduje się w UTC, a znacznik czasu przechowywany na serwerze wraz z tokenem urządzenia musi zostać przekonwertowany na UTC przed zapisaniem znacznika czasu ISO. W ten sposób zarówno znacznik czasu będzie w tej samej strefie czasowej, a sprawdzanie różnic będzie spójne.

proszę wyjaśnić

+0

To prawda, jest to datownik UTC, więc należy przechowywać wartości UTC w sklepie. Odnośnik: [Ostatnia tabela pod "Usługa opinii"] (https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html#//apple_ref/doc/uid/ TP40008194-CH101-SW3) – argon

0

@fyasar,

Więc zaleca się przechowywać token urządzenie przed identyfikator urządzenia (lub jakiś klucz). Po otrzymaniu opinii na token urządzenia, usuń ten wiersz tokena urządzenia z DB, prawda? Jeśli dobrze zrozumiałeś, to nie działałoby w scenariuszu, gdyby aplikacja instalowała użytkownika, odinstalowuje ją, a następnie instaluje ponownie wszystko w krótkim czasie, a usługa opinii została zapytana dopiero po tym wszystkim.W takim przypadku, jeśli znacznik czasu w sprzężeniu zwrotnym nie jest brany pod uwagę, token urządzenia zostanie usunięty, co jest nieprawidłowe, ponieważ użytkownik ponownie zainstalował aplikację i ponownie zarejestrował powiadomienie push.

Moje pytanie jest takie, jak zasugerowano w dociku jabłkowym i wielu blogach, przy rejestracji, kiedy token urządzenia jest trwały, znacznik czasu musi być zachowany wraz z nim. Jaki powinien być czas ISO w strefie czasowej lub jaka jest strefa czasowa, w której usługa zwrotna zwraca znacznik czasu.

0

Znacznik czasu (jako czterobajtowa wartość time_t) wskazujący, że APN stwierdził, że aplikacja już nie istnieje na urządzeniu. Ta wartość, , która jest w porządku sieciowym, reprezentuje sekundy od północy od 1 stycznia 1970 UTC.

można porównać go z ostatniej chwili wstawiania tabeli, a następnie usunąć nieprawidłowy token z db, w moim przypadku używam MySQL i PHP na stronie sever

$sql="SELECT insert_time from device_tokens ORDER BY insert_time DESC LIMIT 1"; 

to powróci Ostatnia aktualizacja czasu db, a potem po prostu przekształcić go za pomocą znacznika czasu epoki

$sql1="SELECT UNIX_TIMESTAMP(' $timestamp')"; 

i wreszcie ja po prostu porównać go z APN datownik zwrotnego jak ten

if($inactive_Timestamp>$dbTime_stamp) 
    { 
foreach ($apnsfeedback_tokens as $key => $value) { 
    # code... 

    $inactive_Token=$value['devtoken']; 

$sql= "DELETE FROM device_tokens WHERE device_token='$inactive_Token'"; 


if ($conn->query($sql) === TRUE) { 
    echo "Record deleted successfully"; 
} else { 
    echo "Error deleting record: " . $conn->error; 
} 
Powiązane problemy