По мере роста популярности вашего приложения оно также может привлечь нежелательное внимание злонамеренных пользователей, которые могут захотеть злоупотребить вашим приложением. В этом разделе описаны рекомендации, которые следует использовать, чтобы предотвратить подобные атаки на вашу интеграцию выставления счетов и уменьшить влияние злоупотреблений в вашем приложении.
Перенесите конфиденциальную логику на свой бэкэнд
Насколько позволяет дизайн вашего приложения, переместите конфиденциальные данные и логику на внутренний сервер, который вы контролируете. Чем больше данных и логики имеется на внешнем устройстве, тем более уязвимо оно для изменения или взлома.
Например, онлайн-игра в шахматы должна проверять все ходы на сервере вместо того, чтобы полагаться на то, что интерфейс всегда отправляет допустимые ходы.
Более того, если вы обнаружите уязвимости или проблемы с безопасностью, в зависимости от конструкции вашей системы, возможно, будет проще отлаживать, исправлять и развертывать обновления на внутренней стороне, а не на внешней.
Подтверждайте покупки перед предоставлением прав
Особый случай конфиденциальных данных и логики, который должен обрабатываться на серверной стороне, — это проверка и подтверждение покупки. После того, как пользователь совершил покупку, необходимо сделать следующее:
- Отправьте соответствующий
purchaseToken
на свой сервер. Это означает, что вам следует вести учет всех значенийpurchaseToken
для всех покупок. - Убедитесь, что значение
purchaseToken
для текущей покупки не соответствует никаким предыдущим значениямpurchaseToken
.purchaseToken
уникален во всем мире, поэтому вы можете безопасно использовать это значение в качестве первичного ключа в своей базе данных. - Используйте конечные
Purchases.products:get
илиPurchases.subscriptionsv2:get
в API разработчика Google Play, чтобы проверить в Google, что покупка является законной. - Если покупка является законной и ранее не использовалась, вы можете безопасно предоставить право на внутриигровой элемент или подписку.
- Для подписок, когда
linkedPurchaseToken
установлен вPurchases.subscriptionsv2:get
, вам также следует удалитьlinkedPurchaseToken
из вашей базы данных и отозвать право, предоставленноеlinkedPurchaseToken
чтобы гарантировать, что несколько пользователей не будут иметь право на одну и ту же покупку. - Вам следует предоставлять право только в том случае, если покупка находится
PURCHASED
, и обязательно правильно обрабатыватьPENDING
покупки. Если наблюдается резкий рост количестваCANCELED
покупок, возможно, вы предоставляете права, когда покупка все еще находится в состоянииPENDING
. Дополнительную информацию можно найти в разделе «Обработка ожидающих транзакций» . Если после предоставления права вы хотите использовать и подтвердить расходный продукт, используйте
Purchases.products:consume
Play Developer API на своем защищенном внутреннем сервере. Чтобы подтвердить непотребляемый продукт или подписку, вызовите соответствующую конечную точку API разработчика Play:Purchases.products:acknowledge
илиPurchases.subscriptions:acknowledge
на защищенном внутреннем сервере. Требуется подтверждение, поскольку оно уведомляет Google Play о том, что пользователю предоставлено право на покупку. Вы должны подтвердить покупку сразу после предоставления права.Обратите внимание: хотя вы можете подтвердить или использовать покупку на стороне клиента через свое приложение, API на стороне сервера обеспечивают дополнительную защиту от таких проблем, как плохое сетевое подключение и вредоносная активность. Например, предположим, что пользователь приобрел товар в вашем приложении, но потерял подключение к сети во время проверки покупки. Без подтверждения сервера им может потребоваться снова войти в систему через приложение, чтобы завершить процесс подтверждения. В противном случае, если пользователь не войдет в систему в течение трех дней, покупка будет автоматически возвращена из-за отсутствия подтверждения покупки. Подтверждение сервера предотвращает этот сценарий, отправляя подтверждение, как только Google Play уведомляет сервер о том, что покупка действительна.
Дополнительную информацию о подтверждении и потреблении покупок см. в разделе Обработка покупок .
Защита разблокированного контента
Чтобы предотвратить распространение разблокированного контента злоумышленниками, не включайте его в APK-файл. Вместо этого выполните одно из следующих действий:
- Используйте службу реального времени для доставки контента, например канал контента. Доставка контента через службу реального времени также позволяет поддерживать актуальность вашего контента.
- Используйте удаленный сервер для доставки вашего контента.
Когда вы доставляете контент с удаленного сервера или службы реального времени, вы можете сохранить разблокированный контент в памяти устройства или на SD-карте устройства. Если вы храните контент на SD-карте, обязательно зашифруйте его и используйте ключ шифрования для конкретного устройства.
Обнаружение и обработка аннулированных покупок
Аннулированные покупки — это покупки, которые были отменены, отозваны или списаны средства обратно. Если в результате аннулированной покупки пользователю ранее были предоставлены элементы в приложении или другой контент, вы можете использовать API аннулированных покупок , чтобы узнать причину аннулирования покупки, а также любой связанный контент, который вы можете вернуть.
Покупки внутриигровых товаров и подписки могут быть аннулированы по ряду причин, включая следующие:
- Покупка отменяется пользователем, разработчиком или Google (включая неподтвержденные автоматически отмененные покупки). В отношении подписок обратите внимание, что речь идет об отмене покупки подписки, а не об отмене самой подписки .
- Покупка возвращается.
- Разработчик приложения отменяет или возвращает деньги за заказ пользователя и проверяет опцию «отменить» в консоли.
Основываясь на причине аннулированной покупки и принимая во внимание предыдущие данные о поведении пользователей, вы можете принять решение о дальнейших действиях. Мы рекомендуем реализовать одно или несколько из следующих действий:
- Выполните возврат: если покупка аннулирована, вы можете вернуть неиспользованные товары, как если бы они никогда не покупались. Например, если покупка внутриигровой валюты была аннулирована, вы можете вернуть валюту, которая уже была предоставлена пользователю. В случае, когда пользователь уже потратил валюту, рассмотрите возможность установки отрицательного баланса валюты и ограничения активности приложений и будущих покупок до тех пор, пока баланс валюты не станет положительным.
- Внедрение нескольких предупреждений: рассмотрите возможность принятия менее радикальных мер для впервые нарушивших правила, таких как отображение предупреждений в приложении. Для рецидивистов рассмотрите более строгие меры.
- Временно отключите покупки. Аналогично реализации нескольких предупреждений рассмотрите возможность отключения покупок для пользователей с аннулированными покупками, пока вы не сможете более тщательно выяснить, почему покупки были аннулированы.
- Временно или навсегда запретите доступ к вашему приложению. В крайних случаях повторяющейся вредоносной активности рассмотрите возможность запрета доступа к вашему приложению временно или навсегда.
- Выполняйте частые вызовы API аннулированных покупок. При обнаружении одной или нескольких аннулированных покупок рассмотрите возможность более частых вызовов API аннулированных покупок, чтобы отменить покупки, прежде чем пользователь сможет их использовать. Дополнительную информацию о квотах API Voided Purchases можно найти в документации API Voided Purchases .
Помогите Google обнаружить мошенничество до того, как оно произойдет.
Некоторые виды мошенничества связаны со злонамеренными пользователями, которые создают несколько учетных записей Google и в приложениях, чтобы скрыть свою активность.
Используйте методы setObfuscatedAccountId
и setObfuscatedProfileId
в конструкторе BillingFlowParams
чтобы помочь Google сопоставить учетные записи Google с учетными записями в приложениях.
Google использует эти данные для обнаружения подозрительного поведения и блокировки некоторых типов мошеннических транзакций до их завершения.
Принятие мер против нарушения прав на товарный знак и авторских прав
Если вы используете удаленный сервер для доставки контента или управления им, попросите ваше приложение проверять состояние покупки разблокированного контента каждый раз, когда пользователь получает доступ к контенту. Это позволяет при необходимости отозвать использование и свести к минимуму пиратство. Если вы видите, что ваш контент распространяется в Google Play, действуйте быстро и решительно. Более подробную информацию можно найти на странице «Часто задаваемые вопросы об авторских правах» Справочного центра по авторским правам.
,По мере роста популярности вашего приложения оно также может привлечь нежелательное внимание злонамеренных пользователей, которые могут захотеть злоупотребить вашим приложением. В этом разделе описаны рекомендации, которые следует использовать, чтобы предотвратить подобные атаки на вашу интеграцию выставления счетов и уменьшить влияние злоупотреблений в вашем приложении.
Перенесите конфиденциальную логику на свой бэкэнд
Насколько позволяет дизайн вашего приложения, переместите конфиденциальные данные и логику на внутренний сервер, который вы контролируете. Чем больше данных и логики имеется на внешнем устройстве, тем более уязвимо оно для изменения или взлома.
Например, онлайн-игра в шахматы должна проверять все ходы на сервере вместо того, чтобы полагаться на то, что интерфейс всегда отправляет допустимые ходы.
Более того, если вы обнаружите уязвимости или проблемы с безопасностью, в зависимости от конструкции вашей системы, возможно, будет проще отлаживать, исправлять и развертывать обновления на внутренней стороне, а не на внешней.
Подтверждайте покупки перед предоставлением прав
Особый случай конфиденциальных данных и логики, который должен обрабатываться на серверной стороне, — это проверка и подтверждение покупки. После того, как пользователь совершил покупку, необходимо сделать следующее:
- Отправьте соответствующий
purchaseToken
на свой сервер. Это означает, что вам следует вести учет всех значенийpurchaseToken
для всех покупок. - Убедитесь, что значение
purchaseToken
для текущей покупки не соответствует никаким предыдущим значениямpurchaseToken
.purchaseToken
уникален во всем мире, поэтому вы можете безопасно использовать это значение в качестве первичного ключа в своей базе данных. - Используйте конечные
Purchases.products:get
илиPurchases.subscriptionsv2:get
в API разработчика Google Play, чтобы проверить в Google, что покупка является законной. - Если покупка является законной и ранее не использовалась, вы можете безопасно предоставить право на внутриигровой элемент или подписку.
- Для подписок, когда
linkedPurchaseToken
установлен вPurchases.subscriptionsv2:get
, вам также следует удалитьlinkedPurchaseToken
из вашей базы данных и отозвать право, предоставленноеlinkedPurchaseToken
чтобы гарантировать, что несколько пользователей не будут иметь право на одну и ту же покупку. - Вам следует предоставлять право только в том случае, если покупка находится
PURCHASED
, и обязательно правильно обрабатыватьPENDING
покупки. Если наблюдается резкий рост количестваCANCELED
покупок, возможно, вы предоставляете права, когда покупка все еще находится в состоянииPENDING
. Дополнительную информацию можно найти в разделе «Обработка ожидающих транзакций» . Если после предоставления права вы хотите использовать и подтвердить расходный продукт, используйте
Purchases.products:consume
Play Developer API на своем защищенном внутреннем сервере. Чтобы подтвердить непотребляемый продукт или подписку, вызовите соответствующую конечную точку API разработчика Play:Purchases.products:acknowledge
илиPurchases.subscriptions:acknowledge
на защищенном внутреннем сервере. Требуется подтверждение, поскольку оно уведомляет Google Play о том, что пользователю предоставлено право на покупку. Вы должны подтвердить покупку сразу после предоставления права.Обратите внимание: хотя вы можете подтвердить или использовать покупку на стороне клиента через свое приложение, API на стороне сервера обеспечивают дополнительную защиту от таких проблем, как плохое сетевое подключение и вредоносная активность. Например, предположим, что пользователь приобрел товар в вашем приложении, но потерял подключение к сети во время проверки покупки. Без подтверждения сервера им может потребоваться снова войти в систему через приложение, чтобы завершить процесс подтверждения. В противном случае, если пользователь не войдет в систему в течение трех дней, покупка будет автоматически возвращена из-за отсутствия подтверждения покупки. Подтверждение сервера предотвращает этот сценарий, отправляя подтверждение, как только Google Play уведомляет сервер о том, что покупка действительна.
Дополнительную информацию о подтверждении и потреблении покупок см. в разделе Обработка покупок .
Защита разблокированного контента
Чтобы предотвратить распространение разблокированного контента злоумышленниками, не включайте его в APK-файл. Вместо этого выполните одно из следующих действий:
- Используйте службу реального времени для доставки контента, например канал контента. Доставка контента через службу реального времени также позволяет поддерживать актуальность вашего контента.
- Используйте удаленный сервер для доставки вашего контента.
Когда вы доставляете контент с удаленного сервера или службы реального времени, вы можете сохранить разблокированный контент в памяти устройства или на SD-карте устройства. Если вы храните контент на SD-карте, обязательно зашифруйте его и используйте ключ шифрования для конкретного устройства.
Обнаружение и обработка аннулированных покупок
Аннулированные покупки — это покупки, которые были отменены, отозваны или списаны средства обратно. Если в результате аннулированной покупки пользователю ранее были предоставлены элементы в приложении или другой контент, вы можете использовать API аннулированных покупок , чтобы узнать причину аннулирования покупки, а также любой связанный контент, который вы можете вернуть.
Покупки внутриигровых товаров и подписки могут быть аннулированы по ряду причин, включая следующие:
- Покупка отменяется пользователем, разработчиком или Google (включая неподтвержденные автоматически отмененные покупки). В отношении подписок обратите внимание, что речь идет об отмене покупки подписки, а не об отмене самой подписки .
- Покупка возвращается.
- Разработчик приложения отменяет или возвращает деньги за заказ пользователя и проверяет опцию «отменить» в консоли.
Основываясь на причине аннулированной покупки и принимая во внимание предыдущие данные о поведении пользователей, вы можете принять решение о дальнейших действиях. Мы рекомендуем реализовать одно или несколько из следующих действий:
- Выполните возврат: если покупка аннулирована, вы можете вернуть неиспользованные товары, как если бы они никогда не покупались. Например, если покупка внутриигровой валюты была аннулирована, вы можете вернуть валюту, которая уже была предоставлена пользователю. В случае, когда пользователь уже потратил валюту, рассмотрите возможность установки отрицательного баланса валюты и ограничения активности приложений и будущих покупок до тех пор, пока баланс валюты не станет положительным.
- Внедрение нескольких предупреждений: рассмотрите возможность принятия менее радикальных мер для впервые нарушивших правила, таких как отображение предупреждений в приложении. Для рецидивистов рассмотрите более строгие меры.
- Временно отключите покупки. Как и в случае с реализацией нескольких предупреждений, рассмотрите возможность отключения покупок для пользователей с аннулированными покупками, пока вы не сможете более тщательно выяснить, почему покупки были аннулированы.
- Временно или навсегда запретите доступ к вашему приложению. В крайних случаях повторяющейся вредоносной активности рассмотрите возможность запрета доступа к вашему приложению временно или навсегда.
- Выполняйте частые вызовы API аннулированных покупок. При обнаружении одной или нескольких аннулированных покупок рассмотрите возможность более частых вызовов API аннулированных покупок, чтобы вернуть покупки до того, как пользователь сможет их использовать. Дополнительную информацию о квотах API Voided Purchases можно найти в документации API Voided Purchases .
Помогите Google обнаружить мошенничество до того, как оно произойдет.
Некоторые виды мошенничества связаны со злонамеренными пользователями, которые создают несколько учетных записей Google и в приложениях, чтобы скрыть свою активность.
Используйте методы setObfuscatedAccountId
и setObfuscatedProfileId
в конструкторе BillingFlowParams
чтобы помочь Google сопоставить учетные записи Google с учетными записями в приложениях.
Google использует эти данные для обнаружения подозрительного поведения и блокировки некоторых типов мошеннических транзакций до их завершения.
Принятие мер против нарушения прав на товарный знак и авторских прав
Если вы используете удаленный сервер для доставки контента или управления им, попросите ваше приложение проверять состояние покупки разблокированного контента каждый раз, когда пользователь получает доступ к контенту. Это позволяет при необходимости отозвать использование и свести к минимуму пиратство. Если вы видите, что ваш контент распространяется в Google Play, действуйте быстро и решительно. Более подробную информацию можно найти на странице «Часто задаваемые вопросы об авторских правах» Справочного центра по авторским правам.
,По мере роста популярности вашего приложения оно также может привлечь нежелательное внимание злонамеренных пользователей, которые могут захотеть злоупотребить вашим приложением. В этом разделе описаны рекомендации, которые следует использовать, чтобы предотвратить подобные атаки на вашу интеграцию выставления счетов и уменьшить влияние злоупотреблений в вашем приложении.
Перенесите конфиденциальную логику на свой бэкэнд
Насколько позволяет дизайн вашего приложения, переместите конфиденциальные данные и логику на внутренний сервер, который вы контролируете. Чем больше данных и логики имеется на внешнем устройстве, тем более уязвимо оно для изменения или взлома.
Например, онлайн-игра в шахматы должна проверять все ходы на сервере вместо того, чтобы полагаться на то, что интерфейс всегда отправляет допустимые ходы.
Более того, если вы обнаружите уязвимости или проблемы с безопасностью, в зависимости от конструкции вашей системы, возможно, будет проще отлаживать, исправлять и развертывать обновления на внутренней стороне, а не на внешней.
Подтверждайте покупки перед предоставлением прав
Особый случай конфиденциальных данных и логики, который должен обрабатываться на серверной стороне, — это проверка и подтверждение покупки. После того, как пользователь совершил покупку, необходимо сделать следующее:
- Отправьте соответствующий
purchaseToken
на свой сервер. Это означает, что вам следует вести учет всех значенийpurchaseToken
для всех покупок. - Убедитесь, что значение
purchaseToken
для текущей покупки не соответствует никаким предыдущим значениямpurchaseToken
.purchaseToken
уникален во всем мире, поэтому вы можете безопасно использовать это значение в качестве первичного ключа в своей базе данных. - Используйте конечные
Purchases.products:get
илиPurchases.subscriptionsv2:get
в API разработчика Google Play, чтобы проверить в Google, что покупка является законной. - Если покупка является законной и ранее не использовалась, вы можете безопасно предоставить право на внутриигровой элемент или подписку.
- Для подписок, когда
linkedPurchaseToken
установлен вPurchases.subscriptionsv2:get
, вам также следует удалитьlinkedPurchaseToken
из вашей базы данных и отозвать право, предоставленноеlinkedPurchaseToken
чтобы гарантировать, что несколько пользователей не будут иметь право на одну и ту же покупку. - Вам следует предоставлять право только в том случае, если покупка находится
PURCHASED
, и обязательно правильно обрабатыватьPENDING
покупки. Если наблюдается резкий рост количестваCANCELED
покупок, возможно, вы предоставляете права, когда покупка все еще находится в состоянииPENDING
. Дополнительную информацию можно найти в разделе «Обработка ожидающих транзакций» . Если после предоставления права вы хотите использовать и подтвердить расходный продукт, используйте
Purchases.products:consume
Play Developer API на своем защищенном внутреннем сервере. Чтобы подтвердить непотребляемый продукт или подписку, вызовите соответствующую конечную точку API разработчика Play:Purchases.products:acknowledge
илиPurchases.subscriptions:acknowledge
на защищенном внутреннем сервере. Требуется подтверждение, поскольку оно уведомляет Google Play о том, что пользователю предоставлено право на покупку. Вы должны подтвердить покупку сразу после предоставления права.Обратите внимание: хотя вы можете подтвердить или использовать покупку на стороне клиента через свое приложение, API на стороне сервера обеспечивают дополнительную защиту от таких проблем, как плохое сетевое подключение и вредоносная активность. Например, предположим, что пользователь приобрел товар в вашем приложении, но потерял подключение к сети во время проверки покупки. Без подтверждения сервера им может потребоваться снова войти в систему через приложение, чтобы завершить процесс подтверждения. В противном случае, если пользователь не войдет в систему в течение трех дней, покупка будет автоматически возвращена из-за отсутствия подтверждения покупки. Подтверждение сервера предотвращает этот сценарий, отправляя подтверждение, как только Google Play уведомляет сервер о том, что покупка действительна.
Дополнительную информацию о подтверждении и потреблении покупок см. в разделе Обработка покупок .
Защита разблокированного контента
Чтобы предотвратить распространение разблокированного контента злоумышленниками, не включайте его в APK-файл. Вместо этого выполните одно из следующих действий:
- Используйте службу реального времени для доставки контента, например канал контента. Доставка контента через службу реального времени также позволяет поддерживать актуальность вашего контента.
- Используйте удаленный сервер для доставки вашего контента.
Когда вы доставляете контент с удаленного сервера или службы реального времени, вы можете сохранить разблокированный контент в памяти устройства или на SD-карте устройства. Если вы храните контент на SD-карте, обязательно зашифруйте его и используйте ключ шифрования для конкретного устройства.
Обнаружение и обработка аннулированных покупок
Аннулированные покупки — это покупки, которые были отменены, отозваны или списаны средства обратно. Если в результате аннулированной покупки пользователю ранее были предоставлены элементы в приложении или другой контент, вы можете использовать API аннулированных покупок , чтобы узнать причину аннулирования покупки, а также любой связанный контент, который вы можете вернуть.
Покупки внутриигровых товаров и подписки могут быть аннулированы по ряду причин, включая следующие:
- Покупка отменяется пользователем, разработчиком или Google (включая неподтвержденные автоматически отмененные покупки). Что касается подписок, обратите внимание, что речь идет об отмене покупки подписки, а не об отмене самой подписки .
- Покупка возвращается.
- Разработчик приложения отменяет или возвращает деньги за заказ пользователя и проверяет опцию «отменить» в консоли.
Основываясь на причине аннулированной покупки и принимая во внимание предыдущие данные о поведении пользователей, вы можете принять решение о дальнейших действиях. Мы рекомендуем реализовать одно или несколько из следующих действий:
- Выполните возврат: если покупка аннулирована, вы можете вернуть неиспользованные товары, как если бы они никогда не покупались. Например, если покупка внутриигровой валюты была аннулирована, вы можете вернуть валюту, которая уже была предоставлена пользователю. В случае, когда пользователь уже потратил валюту, рассмотрите возможность установки отрицательного баланса валюты и ограничения активности приложений и будущих покупок до тех пор, пока баланс валюты не станет положительным.
- Внедрение множественных предупреждений. Рассмотрите возможность принятия менее радикальных мер для тех, кто впервые нарушил правила, например отображения предупреждений в приложении. Для рецидивистов рассмотрите более строгие меры.
- Временно отключите покупки. Как и в случае с реализацией нескольких предупреждений, рассмотрите возможность отключения покупок для пользователей с аннулированными покупками, пока вы не сможете более тщательно выяснить, почему покупки были аннулированы.
- Временно или навсегда запретите доступ к вашему приложению. В крайних случаях повторяющейся вредоносной активности рассмотрите возможность запрета доступа к вашему приложению временно или навсегда.
- Выполняйте частые вызовы API аннулированных покупок. При обнаружении одной или нескольких аннулированных покупок рассмотрите возможность более частых вызовов API аннулированных покупок, чтобы отменить покупки, прежде чем пользователь сможет их использовать. Дополнительную информацию о квотах API Voided Purchases можно найти в документации API Voided Purchases .
Помогите Google обнаружить мошенничество до того, как оно произойдет.
Некоторые виды мошенничества связаны со злонамеренными пользователями, которые создают несколько учетных записей Google и в приложениях, чтобы скрыть свою активность.
Используйте методы setObfuscatedAccountId
и setObfuscatedProfileId
в конструкторе BillingFlowParams
чтобы помочь Google сопоставить учетные записи Google с учетными записями в приложениях.
Google использует эти данные для обнаружения подозрительного поведения и блокировки некоторых типов мошеннических транзакций до их завершения.
Принятие мер против нарушения прав на товарный знак и авторских прав
Если вы используете удаленный сервер для доставки контента или управления им, попросите ваше приложение проверять состояние покупки разблокированного контента каждый раз, когда пользователь получает доступ к контенту. Это позволяет при необходимости отозвать использование и свести к минимуму пиратство. Если вы видите, что ваш контент распространяется в Google Play, действуйте быстро и решительно. Более подробную информацию можно найти на странице «Часто задаваемые вопросы об авторских правах» Справочного центра по авторским правам.