КАК удалить токены устройств, полученные по отзывам Apple APNS

Я успешно получаю данные обратной связи Apple APNS через PHP. Структура, которую я получаю (после некоторой обработки), выглядит примерно так:

отметка времени

токен устройства

Мой вопрос заключается в том, как узнать, какие из токенов устройств я должен удалить из своей базы данных и прекратить отправлять им уведомления.

С уважением,

Младжо


person Mladen    schedule 02.03.2010    source источник


Ответы (6)


Временная метка здесь является ключевым элементом. Отметка времени, отправленная Apple, указывает, когда служба push-уведомлений в последний раз пыталась доставить сообщение на устройство и обнаружила, что приложение удалено. Если с тех пор устройство было перерегистрировано в вашей службе, удалять его не нужно.

Поэтому каждый раз, когда ваше приложение загружает и отправляет токен в вашу службу, вы должны регистрировать время в своем хранилище данных. Когда вы запускаете обратную связь, вы должны проверить время от Apple и сравнить его со временем, когда вы в последний раз получали обновление от приложения на устройстве. Если время, отправляемое Apple, новее, чем время, когда вы получили обновление, вам следует удалить (или отключить) устройство. Если время от Apple более раннее, вам не нужно удалять его, потому что пользователь переустанавливал устройство с тех пор, как Apple в последний раз пыталась доставить.

person argon    schedule 24.04.2013

Все устройства, указанные в отзывах, являются «неисправными» и должны быть удалены. Отсутствие обратной связи означает, что никакие устройства не должны быть удалены. Это описано в документации Apple:

Документация Apple APN

person Lee    schedule 02.03.2010
comment
Обратная связь APNS возвращает токены устройства, если доставка уведомления не удалась. Это не означает, что приложение было удалено с устройства, возможно, у пользователя в данный момент нет постоянного подключения к Wi-Fi. - person Mladen; 02.03.2010
comment
Это не то, что говорится в документации. Если провайдер пытается доставить push-уведомление приложению, но приложение больше не существует на устройстве, устройство сообщает об этом факте в службу Apple Push Notification Service. Такая ситуация часто возникает, когда пользователь удалил приложение. Если устройство сообщает о неудачных попытках доставки приложения, APN должен каким-то образом информировать поставщика, чтобы он мог воздержаться от отправки уведомлений на это устройство. - person Lee; 03.03.2010
comment
@Младен. Неправильно. Если на устройстве нет Wi-Fi или соединения 3/4G, Apple отправит push-уведомление позже, когда соединение будет установлено. - person midspace; 27.06.2012

аккуратное объяснение @argon, однако у меня есть еще один вопрос о метке времени.

Каждый раз, когда приложение включает push-уведомление, токен устройства отправляется на сервер. Должен ли я взять метку времени с моего сервера, чтобы она сохранялась вместе с токеном устройства, поскольку didRegisterForRemoteNotificationsWithDeviceToken дает только deviceToken, а не время. Если мой сервер работает в другом часовом поясе, а APNS работает в другом часовом поясе, то сохраненное время регистрации (вместе с токеном устройства) нельзя сравнивать с отметкой времени, полученной из обратной связи APNS, чтобы проверить последовательность регистрации -> удаление -> повторная регистрация.

Я предполагаю, что временная метка обратной связи APNS находится в формате UTC, а временная метка, которую сервер хранит вместе с токеном устройства, должна быть преобразована в UTC перед сохранением временной метки ISO. Таким образом, обе временные метки будут в одном и том же часовом поясе, а проверка различий будет согласованной.

просьба уточнить

person Sam    schedule 03.02.2014
comment
Это правильно, это временная метка UTC, поэтому вы должны хранить значения UTC в своем магазине. Ссылка: Последняя таблица службы обратной связи - person argon; 27.02.2014

@фьясар,

Таким образом, вы рекомендуете хранить токен устройства по идентификатору устройства (или какому-либо ключу). Когда получен отзыв для токена устройства, удалите эту строку токена устройства из БД, верно? Если бы вы правильно поняли, это не сработало бы в сценарии, когда пользователь устанавливает приложение, удаляет его, а затем устанавливает снова, и все это за короткое время, а служба обратной связи была запрошена только после того, как все это произошло. В этом случае, если отметка времени в отзыве не учитывается, токен устройства будет удален, что неверно, поскольку пользователь снова установил приложение и повторно зарегистрировался для получения push-уведомлений.

Мой вопрос заключается в том, что, как это предлагается в документе Apple и во многих блогах, при регистрации, когда токен устройства сохраняется, вместе с ним должна сохраняться временная метка. ISO-время какого часового пояса должно сохраняться или в каком часовом поясе служба обратной связи возвращает отметку времени.

person Sam    schedule 04.02.2014

Отметка времени (в виде четырехбайтового значения time_t), указывающая, когда APN определили, что приложение больше не существует на устройстве. Это значение в сетевом порядке представляет секунды с полуночи 1 января 1970 года по всемирному координированному времени.

вы можете сравнить его с последним временем вставки вашей таблицы, а затем удалить недопустимый токен из базы данных. В моем случае я использую mysql и php для отдельной стороны

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

он вернет последнее обновленное время из БД, а затем я просто преобразую его в временную метку эпохи, используя

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

и, наконец, я просто сравниваю это с отметкой времени обратной связи apns, подобной этой

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;
}
person Anshad Rasheed    schedule 27.05.2015

Вы должны хранить устройства с данными их маркеров устройств, а затем вы можете найти эти устройства в соответствии с их маркерами устройств. Вы можете использовать токен устройства для идентификатора каждого устройства. Тогда было бы легко найти и изменить их статусы в вашей базе данных.

person fyasar    schedule 13.08.2010