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

Исторически полезная нагрузка разработчика использовалась для различных целей, включая предотвращение мошенничества и приписывание покупок правильному пользователю. С версиями 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 , поэтому вам нужно будет сравнить их приблизительным образом. Например, вы можете проверить, находятся ли значения в пределах определенного периода времени друг от друга.