Полезная нагрузка разработчика

Исторически сложилось так, что данные, передаваемые разработчиками, использовались для различных целей, включая предотвращение мошенничества и привязку покупок к нужному пользователю. В версиях 2.2 и выше библиотеки Google Play Billing Library, сценарии использования, ранее зависевшие от данных разработчиков, теперь полностью поддерживаются в других частях библиотеки.

С учетом этой поддержки мы отказались от использования данных, предоставляемых разработчиками, начиная с версии 2.2 библиотеки Google Play Billing Library. Методы, связанные с данными, предоставляемыми разработчиками, были объявлены устаревшими в версии 2.2 и удалены в версии 3.0. Обратите внимание, что ваше приложение может продолжать получать данные, предоставляемые разработчиками, для покупок, совершенных с использованием предыдущих версий библиотеки или AIDL.

Подробный список изменений см. в примечаниях к выпуску Google Play Billing Library 2.2 и Google Play Billing Library 3.0 .

Проверка покупки

Чтобы гарантировать подлинность покупок и исключить их подделку или повторное использование, Google рекомендует использовать токен покупки (полученный методом getPurchaseToken() объекта Purchase ) вместе с API разработчиков Google Play для проверки подлинности покупок. Дополнительную информацию см. в разделе «Борьба с мошенничеством и злоупотреблениями» .

Атрибуция покупки

Многим приложениям, особенно играм, необходимо убедиться, что покупка корректно привязана к внутриигровому персонажу/аватару или профилю пользователя, инициировавшего покупку. Начиная с Google Play Billing Library 2.2, ваше приложение может передавать зашифрованные идентификаторы учетных записей и профилей в Google при запуске диалога покупки, и эти данные будут возвращены при получении покупки.

Используйте параметры setObfuscatedAccountId() и setObfuscatedProfileId() в BillingFlowParams и получите их с помощью метода getAccountIdentifiers() в объекте Purchase .

Свяжите метаданные с покупкой.

Google рекомендует хранить метаданные о покупке на защищенном бэкэнд-сервере, который вы поддерживаете. Эти метаданные о покупке должны быть связаны с токеном покупки, полученным с помощью метода getPurchaseToken в объекте Purchase . Эти данные можно сохранить, передав токен покупки и метаданные на ваш бэкэнд при вызове PurchasesUpdatedListener после успешной покупки.

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

Если процесс покупки прерывается до вызова PurchasesUpdatedListener , ваше приложение обнаружит покупку после возобновления работы и вызова метода BillingClient.queryPurchasesAsync() . Затем вы можете отправить значения, полученные из методов getPurchaseTime() , getSku() и getPurchaseToken() объекта Purchase на ваш бэкэнд-сервер для поиска метаданных, сопоставления метаданных с токеном покупки и продолжения обработки покупки. Обратите внимание, что метка времени, которую вы изначально сохранили, не будет точно совпадать со значением из метода getPurchaseTime() объекта Purchase , поэтому вам потребуется сравнить их приблизительно. Например, вы можете проверить, находятся ли значения в пределах определенного временного периода друг от друга.