Apple DeviceCheck запоминает телефон злоупотребляющего возвратами, даже если он зарегистрирует новый аккаунт
Блокировки аккаунтов и идентификаторы покупок перестают работать, как только злоупотребляющий возвратами создает новый аккаунт. Apple DeviceCheck и функция запоминания устройств в Google Play (device recall) хранят несколько битов на устройство на серверах магазина. Разбираем, что именно они хранят, когда их устанавливать и сколько они вам сэкономят.

Главное
- Apple DeviceCheck позволяет вашему серверу устанавливать и запрашивать два двоичных бита на устройство, которые хранятся на серверах Apple. Apple прямо называет пометку устройства, признанного мошенническим, одним из предусмотренных сценариев.
- Функция запоминания устройств в Google Play (device recall), бета-возможность Play Integrity API, хранит три пользовательских бита на устройство на серверах Google. Они сохраняются после переустановки приложения и сброса устройства.
- Значения запоминания устройств общие для всех приложений одного аккаунта разработчика Google Play и хранятся 3 года после последнего чтения или записи.
- Токен Play Integrity можно использовать для записи битов запоминания устройств в течение 14 дней после его проверки. Этого хватает на 48-часовое окно самостоятельных возвратов в Google Play.
- Ни уведомления Apple о возвратах, ни аннулированные покупки Google не содержат идентификатора устройства. Поэтому пометить устройство может только сервер, который заранее связал покупки со своими аккаунтами.
- Пометки устройств не могут остановить возврат. Они определяют, что ваше приложение даст устройству дальше: бесплатные кредиты, пробный период за ваш счет или промо-предложение, которое подписывает ваш сервер.
- Только два процесса возврата позволяют разработчику предоставить доказательства до решения магазина: CONSUMPTION_REQUEST от Apple, ответ на который нужен в течение 12 часов, и проверка чарджбэка в Google Play через orders.reviewrefund, ответ на которую нужен в течение 24 часов.
Блокировка аккаунта не остановит злоупотребляющего возвратами, который заново регистрируется на том же телефоне. Apple DeviceCheck и запоминание устройств в Google Play (device recall) существуют именно для этой бреши. Каждый из них позволяет вашему серверу привязать к физическому устройству несколько битов со смыслом, который задаете вы, и хранятся они на серверах магазина. Поэтому пометка остается на месте, когда человек за этим устройством возвращается с новым адресом электронной почты. Ни один из инструментов не выдает вам идентификатор устройства, и ни один не может остановить возврат. Зато они сообщают вам при регистрации или на пейволле, что это устройство уже причиняло вам ущерб.
Ниже разберем, что на самом деле хранит каждый магазин, какая ловушка со сроками решает, сможете ли вы вообще установить пометку, и во что обходится повторный нарушитель, пока вы его не заметили.
Почему новый аккаунт обходит любую защиту на уровне аккаунта
Большинство защит от возвратов привязаны к аккаунту. Apple appAccountToken связывает транзакцию с пользователем в вашей базе данных. Обфусцированный идентификатор аккаунта в Google Play делает то же самое на Android. Оба стоит устанавливать при каждой покупке, и оба описывают аккаунт человека, а не устройство у него в руках. Удалите аккаунт, зарегистрируйтесь с новой почтой, и ваша история по этому человеку начинается с нуля.
Магазины не закроют эту брешь за вас. Уведомление App Store о возврате сообщает, какая транзакция возвращена. Аннулированная покупка в Google Play сообщает токен покупки, идентификатор заказа и voidedReason. Ни одно из них не содержит идентификатора устройства. Разработчик приложения для знакомств описал последствия в теме на Apple Developer Forums: мошеннические профили раз за разом покупали премиум-подписку, которую затем возвращали, а блокировка их устройств собственным методом разработчика не помогала.
Сбрасывает ли новый аккаунт пробный период самого магазина?
Не в рамках того же Apple Account. Согласно документации Apple, вводные предложения, включая бесплатные пробные периоды, предоставляются клиентам, которые еще не получали такое предложение для этого продукта или любого продукта из той же группы подписок. Новый вход в вашем приложении не дает второго пробного периода Apple. А новый Apple Account дает, как и все, что вы раздаете сами: приветственные кредиты, пробный период за счет сервера, реферальный бонус. Именно эти подарки и защищает пометка устройства.
Что на самом деле хранит Apple DeviceCheck
DeviceCheck состоит из двух частей. В приложении класс DCDevice генерирует временный токен, идентифицирующий устройство. Ваш сервер отправляет этот токен в Apple вместе с JSON Web Token, подписанным ключом из вашего аккаунта разработчика, и Apple позволяет запросить или обновить два бита для этого устройства. Ответ на запрос содержит bit0, bit1 и last_update_time, указанное как год и месяц. Сама Apple приводит примеры: устройство, которое уже воспользовалось промо-предложением, и устройство, которое вы признали мошенническим.
Apple хранит биты, но смысл им задаете вы. В документации сказано, что вы отвечаете за учет значения битов и решаете, когда их сбрасывать, а в качестве примера приводится проданное устройство. Два бита дают четыре состояния, поэтому простая схема такая: один бит означает возврат после активного использования, другой означает, что бесплатные кредиты уже получены.
- Токен одноразовый. По словам Apple, он остается действительным достаточно долго, чтобы повторить запрос, но для каждого вызова нужно генерировать новый.
- Сборки для разработки обращаются к api.development.devicecheck.apple.com. В продакшене нужно использовать api.devicecheck.apple.com, иначе ваши пометки окажутся не там.
- Apple описывает DeviceCheck как один из факторов общей оценки риска, а не как приговор. Считайте установленный бит поводом присмотреться внимательнее.
Что добавляет запоминание устройств Google на Android
Вариант Google входит в Play Integrity API и все еще находится в бете, доступ через форму заявки. После одобрения и включения в Play Console каждый вердикт целостности содержит три пользовательских бита для устройства. Вы записываете их серверным вызовом к эндпоинту deviceRecall:write, используя уже проверенный токен целостности. По словам Google, данные сохраняются после переустановки приложения и сброса устройства, потому что хранятся на серверах Google.
Документация Google необычно прямо описывает сценарии. Названы устройства с признаками серьезных злоупотреблений, устройства, которые уже получили ценный бонус, например бесплатный пробный период, и устройства, которые снова и снова используются для создания новых аккаунтов в целях злоупотребления. Так же прямо обозначена граница: запоминание устройств можно использовать только для защиты безопасности приложения и борьбы со злоупотреблениями, мошенничеством и несанкционированным доступом. Никогда для фингерпринтинга или отслеживания отдельных пользователей и никогда для хранения чувствительных признаков, таких как возраст, пол или местоположение.
| Вопрос | Apple DeviceCheck | Запоминание устройств Google Play |
|---|---|---|
| Статус | Общедоступно | Бета, одобрение через форму заявки |
| Битов на устройство | 2 | 3 |
| Где хранятся | Серверы Apple | Серверы Google |
| Сохраняются после переустановки и сброса | Хранятся на сервере, сброс Apple оставляет вам | Да, в обоих случаях, по данным Google |
| Общие для ваших приложений | Привязаны к вашему аккаунту разработчика | Да, все приложения в аккаунте разработчика |
| Метка времени | Год и месяц последнего обновления | Дата записи для каждого бита |
| Срок хранения | Пока вы их не сбросите | 3 года после последнего чтения или записи |
| Токен для записи | Свежий одноразовый токен DCDevice | Проверенный токен целостности, пригоден 14 дней |
| Дополнительные требования | App ID, зарегистрированный в вашем аккаунте | Актуальные Play Маркет и сервисы Play, пользователь с лицензией Play, без эмуляторов |
Проблема сроков: возвраты приходят, когда токена уже нет
Обоим инструментам нужно что-то от самого устройства, прежде чем его можно пометить. Apple нужен свежий токен DCDevice. Google нужен токен целостности с этого устройства не старше 14 дней. При этом возврат приходит на ваш сервер через уведомление магазина, которое ничего не знает об устройстве. Поэтому вопрос не в том, помечать ли устройство. Вопрос в том, сможете ли вы до него дотянуться, когда придет возврат.
48-часовые возвраты Google укладываются в 14-дневное окно
Самостоятельные возвраты в Google Play доступны только в течение 48 часов после покупки, что с запасом укладывается в 14 дней, пока токен целостности пригоден для записи. Выполните проверку целостности в момент покупки, сохраните проверенный токен рядом с идентификатором заказа, и когда по этому заказу придет аннулированная покупка, вы сможете сразу записать бит. Сложнее с чарджбэками, потому что банковский спор может прийти намного позже 14-го дня.
При возвратах Apple устройство должно вернуться
Возврат Apple может прийти через несколько недель после покупки, а сохраненный токен DeviceCheck не предназначен для повторного использования. На практике сначала помечайте аккаунт, а потом устройство. Когда приходит уведомление о возврате, пометьте аккаунт в своей базе данных. В следующий раз, когда этот аккаунт откроет приложение, запросите токен DeviceCheck и установите бит. Те, кто оставляет себе контент после возврата, обычно возвращаются, ведь пользоваться им и было целью.
- При покупке привяжите транзакцию к своему аккаунту через appAccountToken или обфусцированный идентификатор аккаунта.
- При возврате или аннулировании пометьте этот аккаунт на своем сервере.
- В следующей сессии помеченного аккаунта получите токен устройства и установите свой бит.
- При каждой регистрации запрашивайте биты, прежде чем выдавать что-либо, что стоит вам денег.
Во что обходится повторный злоупотребляющий возвратами
Возвращенная цена видна сразу. Остальное это все, что покупка уже запустила. Если ваше приложение тратит деньги на то, чтобы предоставить проданное, каждый цикл покупки, использования и возврата оставляет эти деньги потраченными: время GPU на сгенерированные изображения, платные вызовы модели или API данных, хранение экспортов, которые клиент оставляет себе, и выплаты авторам, рассчитанные от продажи. Новый аккаунт запускает цикл заново, а ваш учет записывает его как совершенно нового клиента.
Бесплатные бонусы утекают так же, вообще без возвратов. Устройство, которое собирает приветственные кредиты на десяти аккаунтах, расходует в десять раз больше вычислений, чем вы заложили на один пробный период. В Google Play чарджбэки по заказам после 3 августа 2026 года к тому же обходятся вам в цену покупки за вычетом сервисного сбора Google плюс банковские комиссии. Человек, который каждый раз оспаривает платеж с нового аккаунта, каждый раз заново обходится вам в полную стоимость спора.
| Статья расходов | Без пометки устройства | С пометкой устройства |
|---|---|---|
| Приветственные кредиты или пробный период за ваш счет | Выдаются заново на каждый новый аккаунт | Не выдаются или урезаются на помеченном устройстве |
| Вычисления и платные вызовы API | Тратятся заново в каждом цикле | Тратятся один раз, затем закрыты |
| Выплаты авторам или партнерам | Выплачиваются с продаж, которые возвращаются возвратами | Задерживаются для проверки на помеченных устройствах |
| Чарджбэки Google Play после 3 августа 2026 года | Цена за вычетом сервисного сбора плюс банковские комиссии, каждый раз | Столько же за спор, но меньше повторных споров |
| Решения магазина о возвратах | Принимает магазин | По-прежнему принимает магазин |

Что делать с помеченным устройством
Пометка отвечает на один вопрос: должно ли это устройство снова получить что-то бесплатно? Реагируйте соразмерно, потому что установленный бит это улика, а не доказательство. Телефоны перепродают, семьи делят iPad, и Google прямо советует по этой причине рассматривать игнорирование или сброс старых данных.
- На помеченном устройстве не выдавайте приветственные кредиты, пробный период за счет сервера или реферальный бонус и предложите вместо этого платный тариф.
- Не подписывайте промо-предложение для помеченного устройства. В App Store подпись, открывающую промо-предложение, генерирует ваш сервер, так что решение за вами.
- На помеченном устройстве требуйте прохождения оплаты, прежде чем выдавать дорогие расходуемые покупки.
- Используйте метку времени. Пометка за прошлый месяц весит больше, чем установленная два года назад.
- Дайте людям возможность обратиться в поддержку. Покупатель подержанного телефона, помеченный по ошибке, должен получить ответ, а вы можете сбросить биты.
Можно ли просто заблокировать устройство?
Вы можете отказать в собственных бесплатных бонусах, и именно здесь пометки устройств окупаются. Жесткая блокировка рискованнее. Тот, кто держит телефон сегодня, может быть не тем, кто им злоупотреблял, а собственные условия Google ограничивают запоминание устройств предотвращением злоупотреблений, а не отслеживанием людей. Закрывайте то, что стоит вам денег, а платный путь оставляйте открытым.
А как насчет Keychain (связки ключей) или идентификатора устройства?
Разработчики часто спрашивают, не справится ли с этим метка в Keychain или аппаратный идентификатор. Метка, которую приложение хранит на телефоне, исчезает после сброса устройства, а стабильного аппаратного идентификатора для этой цели Apple приложениям не дает. DeviceCheck и запоминание устройств являются решениями, одобренными магазинами, именно потому, что биты хранятся на серверах Apple и Google, а не на телефоне.
Где по-прежнему решает магазин
Пометки устройств меняют то, что ваше приложение раздаст дальше. Текущий возврат они не затрагивают. Только два процесса возврата позволяют предоставить доказательства до решения магазина. Apple отправляет CONSUMPTION_REQUEST и запрашивает данные о потреблении в течение 12 часов. Google Play открывает проверку чарджбэка, на которую вы отвечаете в течение 24 часов через orders.reviewrefund. Все остальное, от 48-часовых возвратов в Google Play до возвратов через поддержку и автоматических возвратов неподтвержденных покупок, решается без вас. Чарджбэки становятся окончательными, как только банк вынес решение.
RefundHalt отвечает на каждый CONSUMPTION_REQUEST и каждую проверку чарджбэка в Google Play в отведенный срок, используя ваши реальные данные об использовании, и связывает каждый возврат с аккаунтом, который его оформил. Так ваш сервер знает, какое устройство пометить, когда оно в следующий раз выйдет на связь.
Частые вопросы
- Для чего используется Apple DeviceCheck?
- DeviceCheck позволяет вашему серверу хранить и читать два бита на устройство на серверах Apple. Сама Apple приводит примеры: пометка устройства, которое уже воспользовалось промо-предложением, и пометка устройства, которое вы признали мошенническим. Вы сами решаете, что означают биты и когда их сбрасывать.
- Работает ли DeviceCheck после удаления приложения пользователем или создания нового аккаунта?
- Да. Биты принадлежат устройству и хранятся на серверах Apple, а не в вашем приложении или аккаунте пользователя, поэтому новая регистрация на том же устройстве прочитает те же биты после переустановки приложения. Сброс Apple оставляет вам, например когда устройство продано.
- Есть ли аналог DeviceCheck на Android?
- Да, запоминание устройств (device recall) в Play Integrity API. Оно хранит три пользовательских бита на устройство на серверах Google, сохраняется после переустановок и сброса устройства, общее для всех приложений вашего аккаунта разработчика и хранит данные 3 года после последнего обращения. Функция в бете и требует одобрения.
- Может ли пометка устройства помешать клиенту получить возврат?
- Нет. Apple и Google сами решают вопросы возвратов. Пометка устройства управляет только тем, что ваше приложение предложит дальше, например бесплатными кредитами или промо-предложением. Ваши доказательства учитываются только в CONSUMPTION_REQUEST от Apple, ответ в течение 12 часов, и в проверке чарджбэка в Google Play, ответ в течение 24 часов.
- Разрешено ли блокировать устройство за злоупотребление возвратами?
- Google разрешает запоминание устройств только для безопасности приложений и предотвращения злоупотреблений, мошенничества и несанкционированного доступа и запрещает использовать его для фингерпринтинга или отслеживания пользователей. Поскольку устройства перепродают и делят, безопаснее не выдавать бесплатные бонусы на помеченном устройстве, чем закрывать ему доступ к платным функциям.
Источники и дополнительное чтение
- Apple Developer: DeviceCheck
- Apple Developer: Accessing and modifying per-device data
- Apple Developer: DCDevice
- Apple Developer: Implementing introductory offers in your app
- Android Developers: Detect repeat abuse using device recall (beta)
- Apple Developer Forums: Refund abuse
- Google Play Help: Apps, games, and in-app purchases refund policies
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
Автопилот возвратов для App Store и Google Play
Читайте дальше
С 1 октября Google Play берет в США комиссию за альтернативную оплату, а возвраты по этим продажам по-прежнему на вас
С 1 октября 2026 года Google Play берет сервисный сбор с покупок в США через альтернативную оплату или внешние ссылки на контент. Возвраты Google по-прежнему не обрабатывает. Что говорят таблицы сборов, как сообщать о возвратах и во что обходится каждый возврат.
Чрезмерные запросы на возврат обходятся дороже самих возвратов: оба магазина приложений считают их сигналом качества
Правило 5.6.4 Apple прямо называет чрезмерные запросы на возврат признаком того, что приложение не соответствует стандартам качества, а соглашение Google о распространении позволяет удалять приложения новых разработчиков по доле возвратов. Разбираем, что пишет каждый магазин, во что обходится удаление и как не попасть под удар.