Android в app billing v3, как безопасно восстановить покупки?
Когда пользователь покупает продукт, я использую веб-сервис для проверки покупки, чтобы защитить от атак повтора, я добавляю полезную нагрузку разработчика (nonce) к покупке. Он работает, как и ожидалось.
Но как насчет восстановления транзакций? Я могу получить подписанные данные и подпись, а также любую другую информацию из локального инвентаря (вызывая queryPurchases () в IabHelper), но я не могу установить новую полезную нагрузку разработчика нигде, поэтому я не могу проверить ее на своем веб-сервисе.
Как сделать восстановление сделки безопасно?
Помощь будет весьма признательна...
Edit: должен ли я просто придерживаться iab v2 для восстановления транзакций?
2 ответа:
Итак, насколько мне известно, это неразрешенная проблема безопасности, которая ставит под угрозу безопасность in app billing api v3. Нет никакого способа безопасно (проверка с помощью веб-сервиса) восстановить покупку в in app billing api v3.
На момент написания этой статьи пример приложения Google Play Billing Library извлекает полезную нагрузку разработчика для проверки при запросе приобретенных товаров. Код выглядит следующим образом:
// Listener that's called when we finish querying the items and subscriptions we own IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { public void onQueryInventoryFinished(IabResult result, Inventory inventory) { Log.d(TAG, "Query inventory finished."); . . . // Do we have the premium upgrade? Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM); mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase)); Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM")); . . . }