Подтвердить что ты не робот

Какова цель "полезной нагрузки разработчика"? Для чего это можно использовать?

В документах Android говорится, что он предназначен для "дополнительной информации о заказе", но в то же время он также говорит, что не должен использовать это для отправки "фактических данных или контента".

Итак, какова цель этой "полезной нагрузки разработчика"? Почему эта функция существует? Можете ли вы описать реальный практический пример того, как я могу использовать его в своей собственной реализации In-app Billing?

4b9b3361

Ответ 1

Как заметил Аромеро, поле полезной нагрузки разработчика ограничено по размеру. Вот почему документы не рекомендуют использовать этот ключ для отправки данных или контента.

Вместо этого вместо этого вы сохраняете содержимое в базе данных (например, на пользовательском устройстве или на своем собственном сервере), а затем помещаете индекс записи в поле полезной нагрузки разработчика. Когда вы получите его обратно с помощью трансляции PURCHASE_STATE_CHANGED, вы можете связать ее с данными в своей базе данных.

Обратите внимание, что полезная нагрузка разработчика не, отправленная рынком при использовании любого из идентификаторов тестовых элементов Android. Вы должны использовать реальные предметы для покупки приложений.

Кроме того, в соответствии с этим (я еще не подтвердил это), вы не будете получать DeveloperPayload в DEBUG MODE. Вам нужно подписать свое приложение в RELEASE MODE, чтобы получить DeveloperPayload.

Наконец, как вы прокомментировали ниже, возвращаемый JSONObject (в ответ на GetPurchaseInformation) уже включает orderId, productId, purchaseTime и многое другое. Поэтому "полезная нагрузка разработчика" фактически должна использоваться для чего-либо , но для идентификации покупки... т.е. Ответ противоположно тому, что было предложено ниже. То, что вы можете использовать "полезная нагрузка разработчика", это добавить некоторую информацию, не относящуюся к JSONObject, например дополнительные сведения о покупателе (например, местоположение GPS, если включено, марка и модель устройства и т.д.).

Ответ 2

Принятый ответ вводит в заблуждение, а последний абзац явно ошибочен. Вот о чем говорит официальная документация.

Вам необходимо передать строковый токен, который поможет вашему приложению идентифицировать пользователя, совершившего покупку, чтобы впоследствии убедиться, что это законная покупка этого пользователя. Для расходных элементов вы можете использовать произвольно сгенерированную строку, но для непотребимых элементов вы должны использовать строку, которая однозначно идентифицирует пользователя.

Когда вы вернете ответ от Google Play, убедитесь, что строка полезной нагрузки разработчика соответствует маркеру, который вы отправили ранее с запросом на покупку. В качестве дополнительной меры предосторожности вы должны выполнить проверку на своем собственном безопасном сервере.

Полезная нагрузка может помочь вам помешать пользователям, которые каким-либо образом обошли Google Play Service API или ваше приложение, отправив полезную нагрузку на ваш сервер, где вы можете проверить, действительно ли этот пользователь когда-либо покупал этот товар. Предположительно обходя GPS, ваше приложение будет обмануто сертификатом покупки. Но если у вас есть все идентификаторы пользователей, которые действительно честно купили предмет, сохраненный на вашем сервере, было бы легко проверить покупку на основе идентификатора пользователя. Проблема здесь - Google не смог полагаться на нее, если у вас есть все ваши пользователи "вошли в систему" ​​каким-то образом.

Ответ 3

Документы предоставляют реальный пример:

Строка, указанная разработчиком, которая может быть указана при создании REQUEST_PURCHCHASE. Это поле возвращается в строке JSON который содержит информацию о транзакции для заказа. Вы можете использовать это ключ для отправки дополнительной информации с заказом. Например, вы может использовать этот ключ для отправки индексных ключей с порядком, что полезно, если вы используете базу данных для хранения информации о покупке. Мы рекомендуем что вы не используете этот ключ для отправки данных или контента.

Это поле можно использовать для идентификации товара, который пользователь покупает. Когда вы отправляете запрос REQUEST_PURCHASE, вы можете добавить дополнительную информацию с помощью DEVELOPER_PAYLOAD. Когда вы получите ответ от PURCHASE_STATE_CHANGED, вы получите эту информацию в поле developerPayload, чтобы вы могли определить порядок.

Это поле ограничено 256 символами и оно незашифровано (вы можете проверить подпись, хотя), это не предназначено для хранения фактического содержимого.

Ответ 4

Надеюсь, это поможет:

Рекомендация по безопасности. Когда вы отправляете запрос на покупку, создайте String token, который однозначно идентифицирует этот запрос на покупку и включить этот токен в DeveloperPayload. Вы можете использовать случайное сгенерированная строка в качестве токена. Когда вы получаете ответ на покупку из Google Play не забудьте проверить возвращенную подпись данных, orderId и строка разработчикаPayload. Для дополнительной безопасности вы должен выполнить проверку на вашем собственном безопасном сервере. Убедись в убедитесь, что orderId является уникальным значением, которое вы ранее не использовали обрабатывается, а строка разработчикаPayload соответствует токену, который вы отправлено ранее с запросом на покупку.

Дополнительная информация здесь.