# Управление базой push-подписчиков

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


## Что такое push-токены и как они работают

Push-токен — это уникальный анонимный идентификатор, присваиваемый конкретному экземпляру приложения на устройстве его поставщиком push-сервиса:

* Apple Push Notification Service (APNs) для устройств iOS
* Firebase Cloud Messaging (FCM) для устройств Android

Этот токен гарантирует, что push-уведомления будут доставлены в нужное приложение на устройстве пользователя.

В Pushwoosh жизненный цикл push-токена включает в себя следующие ключевые этапы:

1. Когда приложение запускается в первый раз, оно запрашивает у операционной системы (ОС) устройства разрешение на получение push-уведомлений.

2. Push-сервис приложения (например, APNs для iOS, FCM для Android) генерирует уникальный push-токен для этого экземпляра приложения. По умолчанию Pushwoosh SDK собирает и сохраняет этот токен, даже если пользователь не дал разрешения на отображение уведомлений. Push-сообщения не будут показываться этим пользователям, но токен все равно можно использовать для отправки сообщений в их почтовый ящик приложения — еще один канал обмена сообщениями в Pushwoosh.

   Однако вы можете настроить SDK так, чтобы он собирал токены только от пользователей, которые дали разрешение.

3. Приложение использует Pushwoosh SDK для отправки этого токена в базу данных Pushwoosh вместе с данными устройства (включая аппаратный идентификатор или HWID) в Pushwoosh через конечную точку API [`/registerDevice`](/ru/developer/api-reference/device-api/#registerdevice).

4. Pushwoosh надежно хранит токен для будущих сообщений.

5. Когда срабатывает уведомление, Pushwoosh использует сохраненный токен для маршрутизации сообщения через соответствующий шлюз доставки.

6. Выбранный шлюз доставляет сообщение на устройство, и ОС отображает его в соответствии с системными настройками и настройками уведомлений приложения.

7. Если push-токен становится недействительным (например, из-за удаления приложения), Pushwoosh обнаруживает сбой доставки после очередной отправки уведомления, когда шлюз возвращает список ошибок отправки, включая просроченные/недействительные/и т.д. токены. Затем Pushwoosh помечает токен как неактивный и удаляет его из базы данных. Если приложение будет переустановлено на том же устройстве, будет выдан новый токен.

### Распространенные причины, по которым push-токены становятся недействительными

Хотя Apple Push Notification Service (APNs) и Firebase Cloud Messaging (FCM) не обеспечивают полной прозрачности в отношении политик жизненного цикла токенов и не позволяют проактивно проверять токены, существуют известные сценарии, в которых push-токены могут стать недействительными или истечь.

| Причина | APNs (iOS) | FCM (Android) |
| :---- | ----- | ----- |
| **Удаление приложения** | Токен становится недействительным после удаления приложения. APNs в конечном итоге возвращает ошибку `410 Unregistered`. Apple не уточняет, когда происходит аннулирование; это может занять от нескольких минут до нескольких дней. [Подробнее](https://developer.apple.com/forums/thread/670868) | Токен немедленно аннулируется при удалении. Последующие отправки возвращают ошибку `Unregistered`. [Подробнее](https://help.pushwoosh.com/hc/en-us/articles/19861855131805-Sudden-increasing-of-unregistered-errors-on-the-Android-platform) |
| **Обновление токена** | APNs выдает новый токен после обновления ОС, резервного копирования/восстановления устройства, переустановки приложения или обновления ОС. [Подробнее](https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns#:~:text=Never%20cache%20device%20tokens%20in%20local%20storage.%20APNs%20issues%20a%20new%20token%20when%20the%20user%20restores%20a%20device%20from%20a%20backup%2C%20when%20the%20user%20installs%20your%20app%20on%20a%20new%20device%2C%20and%20when%20the%20user%20reinstalls%20the%20operating%20system.%20You%20get%20an%20up%2Dto%2Ddate%20token%20each%20time%20you%20ask%20the%20system%20to%20provide%20the%20token.) | Такое же поведение, как и у APNs. Также срабатывает при очистке данных приложения или восстановлении устройства. [Подробнее](https://firebase.google.com/docs/cloud-messaging/manage-tokens?utm_source=chatgpt.com#retrieve-and-store-registration-tokens) |
| **Неактивность токена** | Нет задокументированного истечения срока действия из-за неактивности. [Подробнее](https://developer.apple.com/forums/thread/671310) | Токены, неактивные более 270 дней, считаются устаревшими/просроченными. FCM помечает их как недействительные. [Подробнее](https://firebase.google.com/docs/cloud-messaging/manage-tokens#stale-and-expired-tokens) |
<Aside type="caution" title="Важно">

Pushwoosh определяет действительность токена только в том случае, если push-уведомление не было доставлено. Он не выполняет проактивную проверку статуса токена.

</Aside>


## Как поддерживать чистоту списка подписчиков, удаляя недействительные push-токены

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

Pushwoosh предлагает несколько способов помочь вам в этом:

### Регулярно отправляйте push-уведомления всей вашей базе подписчиков

Регулярно отправляйте push-сообщения всей вашей базе подписчиков. Это помогает Pushwoosh выявлять недействительные токены. Когда сообщение не доставляется, как правило, из-за недействительного токена, push-шлюз возвращает ошибку. SDK фиксирует этот ответ и автоматически удаляет недействительный токен, гарантируя, что он будет исключен из будущих отправок.

> **Важно:** Действительность токена проверяется только при отправке push-уведомления. Pushwoosh не выполняет фоновых проверок действительности токенов.

### Отмена регистрации устройств с помощью API
<Aside type="caution" icon="setting" title="Требуется помощь разработчика">
Для отмены регистрации устройств через API требуется помощь вашей команды разработчиков. Пожалуйста, поделитесь с ними этим руководством для реализации процесса.
</Aside>


Вы можете использовать метод Device API [`/bulkUnregisterDevice`](/ru/developer/api-reference/audience-api/#bulkunregisterdevice) для удаления push-токенов из вашей базы подписчиков, например, когда пользователи отказываются от подписки или больше не активны.

Чтобы сделать это:

1. Создайте сегмент пользователей, соответствующих вашим критериям (например, отказавшиеся от подписки, пользователи бесплатного тарифа или те, кто неактивен в течение X дней).
2. Экспортируйте сегмент с помощью Панели управления или метода API [`exportSegment`](/ru/developer/api-reference/segmentation-filters-api/#exportsegment).
3. Вызовите [`/bulkUnregisterDevice`](/ru/developer/api-reference/audience-api/#bulkunregisterdevice), чтобы удалить push-токены для устройств в этом сегменте.

### Автоматическое удаление неактивных токенов через 90 дней с помощью автовалидации

Алгоритм автоматической очистки от неактивности в Pushwoosh помогает поддерживать чистоту вашего списка подписчиков, удаляя push-токены пользователей, которые не были активны в течение 90 дней.

Он работает, отслеживая, когда пользователи в последний раз открывали ваше приложение, с помощью тега по умолчанию **Last Application Open**. Если пользователь не открывал приложение в течение 90 дней или более, его push-токен помечается как неактивный и удаляется из вашей базы подписчиков.
<Aside type="caution" title="Важно">
Эта функция включена по умолчанию для всех аккаунтов, созданных 1 января 2024 года или позже. Чтобы проверить, активна ли она для вашего аккаунта, или запросить активацию, пожалуйста, [свяжитесь со службой поддержки Pushwoosh](https://help.pushwoosh.com/hc/en-us/requests/new/).
</Aside>

### Используйте отслеживание удалений (Uninstall tracking)

Отслеживание удалений (Uninstall Tracking) поддерживает точность вашего списка push-подписчиков, обнаруживая, когда пользователи удаляют ваше приложение. Это позволяет Pushwoosh автоматически удалять недействительные токены.
> **Примечание:** Отслеживание удалений поддерживается только на **iOS** и **Android**.

Это работает следующим образом:

1. Pushwoosh отправляет тихое push-уведомление один раз в день на все подписанные устройства. Эти тихие уведомления невидимы для пользователей, без оповещений, звуков или значков.
2. Каждое устройство имеет уникальный push-токен, предоставленный шлюзом уведомлений. Если приложение было удалено, токен становится недействительным. Когда тихое push-уведомление не доставляется, шлюз возвращает ошибку.
3. Pushwoosh обнаруживает ошибку и удаляет недействительный токен из вашего списка подписчиков.



<Aside type="caution" title="Важно">
Отслеживание удалений ежедневно отправляет тихие push-уведомления всем подписчикам, что может увеличить нагрузку на систему. Убедитесь, что ваша инфраструктура может поддерживать этот объем. Эта функция включена по умолчанию на поддерживаемых платформах. Чтобы отключить ее, [свяжитесь со службой поддержки Pushwoosh](https://help.pushwoosh.com/hc/en-us/requests/new/) или с вашим менеджером по работе с клиентами.
</Aside>


#### Ограничения отслеживания удалений

Шлюзы уведомлений не гарантируют доставку тихих push-уведомлений. Эти сообщения могут быть понижены в приоритете или отброшены шлюзом, что может задержать или ограничить точность обнаружения удалений. [Подробнее](https://help.pushwoosh.com/hc/en-us/articles/26713265335581-Understanding-Silent-Push-Notification-Behavior-and-Limits-on-iOS)

#### Просмотр данных об удалениях

Для отслеживания активности удалений перейдите в **Statistics > Dashboards > Application dashboard** в вашей Панели управления Pushwoosh. График **App Uninstalls** предоставляет временную шкалу тенденций удалений для вашего приложения.

## Можно ли восстановить пользователей после удаления push-токена?

Удаление push-токена любым из поддерживаемых методов легко обратимо.

Когда пользователь снова открывает ваше приложение:

1. Pushwoosh SDK автоматически запрашивает новый push-токен.
2. Затем он повторно регистрирует устройство (через [`registerDevice`](/ru/developer/api-reference/device-api/#registerdevice)).
3. Пользователь снова становится активным подписчиком и будет получать push-уведомления в дальнейшем.