Перейти к основному содержимому

Лимит устройств (HWID)

HWID — идентификатор устройства, который клиентское приложение присылает вместе с запросом подписки. По нему панель понимает, что подписку запрашивает то же самое устройство, а не новое, и может ограничить их количество.

Функция полностью необязательна и выключена по умолчанию. Она работает только с клиентами, которые умеют отправлять заголовок x-hwid.

Как включить​

Лимит настраивается в панели в разделе Subscription → Settings → HWID Device Limit, а не в .env. Доступны три параметра: сам переключатель, лимит устройств по умолчанию и текст объявления для клиента. Для отдельного внешнего сквода настройки можно переопределить, а каждому пользователю — задать собственный лимит.

МестоЧто задаёт
Глобальные настройки подпискивключает лимит, лимит по умолчанию, текст объявления
Внешний скводпереопределяет глобальные настройки для своих пользователей
Карточка пользователяличный лимит устройства для одного пользователя

Если у пользователя лимит не задан, применяется лимит по умолчанию. Значение 0 в карточке пользователя отключает лимит для него: устройства по-прежнему записываются, но подписка выдаётся всегда.

Осторожно

Если лимит включён, а клиент не прислал заголовок x-hwid, подписка не выдаётся. Перед включением убедитесь, что ваши пользователи пользуются поддерживающими клиентами, иначе они потеряют доступ.

Какие заголовки шлёт клиент​

ЗаголовокОбязателенОписание
x-hwidдаидентификатор устройства
x-device-osнетплатформа, например iOS
x-ver-osнетверсия системы
x-device-modelнетмодель устройства
user-agentнетприложение и его версия

Значение x-hwid должно состоять из 10–64 символов: латинские буквы, цифры, знаки = и -. Если формат не подходит, панель отбрасывает заголовок целиком и считает, что HWID не передан.

curl -H 'x-hwid: UE42LJXu4DbiCaBv' \
-H 'x-device-os: iOS' \
-H 'x-ver-os: 18.3' \
-H 'x-device-model: iPhone 14 Pro Max' \
https://sub.example.com/XXXXXXXXXXXX

В ответ панель добавляет служебные заголовки, по которым клиент показывает понятное сообщение пользователю:

Заголовок ответаКогда появляется
x-hwid-activeлимит включён на стороне панели
x-hwid-not-supportedлимит включён, но клиент не прислал x-hwid
x-hwid-max-devices-reachedдостигнут максимум устройств
x-hwid-limitто же, для совместимости со старыми клиентами

Что хранится​

Каждое устройство попадает в таблицу hwid_user_devices. Ключ — пара «HWID + пользователь», поэтому одно и то же устройство у двух пользователей считается двумя записями.

КолонкаСодержимое
hwidидентификатор устройства, до 64 символов
user_idвладелец подписки
platformплатформа из x-device-os
os_versionверсия системы из x-ver-os
device_modelмодель из x-device-model
user_agentприложение из user-agent
request_ipIP-адрес запроса подписки
created_at, updated_atкогда устройство впервые и последний раз видели

Что видно в панели​

В карточке пользователя отображается список его устройств: платформа, версия системы, модель, IP и даты. Устройство можно удалить по одному или очистить весь список — после этого оно снова сможет подключиться. Есть поиск по HWID.

На отдельной странице HWID собрана сводка: распределение по платформам и приложениям, общее число уникальных устройств и записей, среднее число устройств на пользователя, а также список пользователей с наибольшим числом устройств. Эти же данные доступны по API — команды GET /api/hwid/devices, GET /api/hwid/stats и GET /api/hwid/devices/top-users.

Совет

События добавления и удаления устройства (user_hwid_devices.added и user_hwid_devices.deleted) приходят в вебхуки. Подробнее — в разделе Вебхуки.

Срок хранения и приватность​

Таблица hwid_user_devices — самая чувствительная в базе: в ней лежат идентификатор устройства, модель, версия системы, user-agent и IP-адрес. Она не чистится автоматически, пока вы не включите автоочистку.

ПеременнаяПо умолчаниюЧто делает
SERVICE_CLEAN_OLD_LOGSfalseвключает недельную очистку чувствительных таблиц
HWID_DEVICES_RETENTION_DAYS90сколько дней хранить устройство

Отсчёт ведётся от updated_at, то есть от последнего появления устройства: активно используемые устройства сохраняются, а те, что не возвращались дольше срока, удаляются. Задача выполняется раз в неделю, в понедельник ночью.

Если история устройств вам не нужна, сократите срок хранения или очистите таблицу вручную — через раздел Logs в панели или аварийный CLI.

Внимание

Удаление устройства снимает защиту от передачи подписки: пользователь сможет подключить её на новом устройстве, если есть свободный слот. Сравнивайте списки устройств перед массовой очисткой.

Что дальше​