Какова цель «полезной нагрузки разработчика»?Для чего это можно использовать? - PullRequest
28 голосов
/ 20 января 2012

Документы для Android говорят, что они предназначены для «дополнительной информации о заказе», но в то же время говорят, что они не должны использовать эту функцию для отправки «фактических данных или контента».этой "полезной нагрузки разработчика"?Почему эта функция существует?Можете ли вы описать реальный практический пример того, как я могу использовать его в своей собственной реализации биллинга в приложении?

Ответы [ 4 ]

29 голосов
/ 24 января 2012

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

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

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

Кроме того, согласно this (я еще не проверял это), вы не будете получать developerPayload в режиме отладки.Чтобы получить developerPayload, необходимо подписать свое приложение в РЕЖИМЕ РЕЖИМА.

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

8 голосов
/ 05 октября 2014

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

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

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

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

3 голосов
/ 24 января 2012

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

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

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

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

0 голосов
/ 05 марта 2013

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

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

Подробнее здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...