Что нужно использовать в качестве полезной нагрузки разработчика в API-интерфейсах Google In-App Billing?

Учебный класс для продажи продуктов In-app в Android предлагает использовать полезную нагрузку при оформлении запроса на покупку:

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

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

На странице « Реализация страницы IAB» есть аналогичная рекомендация, с дополнительным предложением о том, что значение полезной нагрузки должно быть проверено на вашем собственном защищенном сервере:

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

Если посмотреть на исходный код приложения Trivial Drive, который Google использует для демонстрации API, я нахожу это предупреждение:

* WARNING: Locally generating a random string when starting a purchase and * verifying it here might seem like a good approach, but this will fail in the * case where the user purchases an item on one device and then uses your app on * a different device, because on the other device you will not have access to the * random string you originally generated. * * So a good developer payload has these characteristics: * * 1. If two different users purchase an item, the payload is different between them, * so that one user's purchase can't be replayed to another user. * * 2. The payload must be such that you can verify it even when the app wasn't the * one who initiated the purchase flow (so that items purchased by the user on * one device work on other devices owned by the user). * * Using your own server to store and verify developer payloads across app * installations is recommended. 

Поэтому из всех этих сообщений звучит неплохо использовать случайное число / строку для полезной нагрузки. Кроме того, после прочтения последнего предупреждения звучит неплохо, чтобы передать идентификатор устройства в качестве полезной нагрузки, так как он будет отличаться для одного и того же пользователя на разных устройствах. Итак, что нужно использовать для полезной нагрузки разработчика?

Мое приложение предоставляет локальные функции, которые могут быть доступны пользователю без необходимости входа в службу. Таким образом, нет понятия «пользователь», а также нет компонента на стороне сервера. Запрос на покупку в приложении – это обновление, которое удаляет объявления из приложения. Имеет ли смысл приложение, подобное этому, использовать функцию полезной нагрузки, или мне лучше просто использовать пустую строку для нее и оставить ее склонной к повторным атакам?

Мои знания при покупке InApp – из старой библиотеки v2. Я не работал с новейшим v3. Однако, надеюсь, я по-прежнему буду полезен.

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

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

Что касается вашей ситуации, я говорю, что это вопрос риска и стоимости. Какова вероятность того, что ваше приложение будет взломано, а клиенты обойдутся покупками и стоимостью внедрения дополнительной безопасности. Если ваше приложение загружается более 100 000 раз, у вас есть достаточный риск. Если более 1 миллиона раз, то существует высокий риск. Если всего несколько тысяч, то пиратство, вероятно, будет игнорировать ваше приложение. Если вы выберете добавленную безопасность, вам нужно запустить сервер, а затем добавить весь код и квитирование, необходимые для приложения и сервера. Все это потребует времени и денег. Особенно при оплате сервера за время вашего приложения.

Intereting Posts
Ошибка установки Eclipse из-за неверного файла APK? Файл расширения Android APK с активами плотности Вкладка «Действующие панели Android» внизу экрана Возобновить загрузку с Android-менеджера загрузки при неудачной загрузке Android – невозможно получить значение из EditText внутри пользовательского диалога Большой ListView содержащий изображения в Android Показать / скрыть программную панель Android на замене фрагмента Как установить разрешение файла для MODE_WORLD_READABLE Как читать текущий буфер кадра в android? Android startActivityForResult не возвращает данные календаря Google для резервного копирования и восстановления базы данных и общих настроек приложения Android Смешивание голосного света и голографического темного EditText в теме Как я могу конвертировать Bundle в PersistableBundle? Как заставить приложение быть уничтоженным в фоновом режиме для тестирования Как повернуть растровое изображение на 90 градусов