В приложении Billing V3

У меня проблема с In App Billing. Я использую вспомогательный класс из примера TrivialDrive.
Вот как я его реализую.

  1. Пресса пользователя Удалить рекламу
  2. Начальный помощник
  3. Использовать прослушиватель, чтобы определить, когда настроен помощник.
  4. Инвентаризация запросов
  5. Использовать прослушиватель для обнаружения
  6. Проверьте, была ли сделана покупка. Если удалите рекламу и выйдите
  7. Если нет, то запуститеPurchaseFlow для покупки.

Это отлично работает на одном устройстве, однако, если пользователь покупает на одном устройстве, а затем пытается на другом устройстве, второе устройство работает следующим образом:

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

Есть ли способ обнаружить, что пользователь уже купил предмет, используя purchaseFinishedListener ?

Код в методе handleActivityResult возвращает User Canceled

else if (resultCode == Activity.RESULT_CANCELED) {
logDebug("Purchase canceled - Response: " + getResponseDesc(responseCode));
result = new IabResult(IABHELPER_USER_CANCELLED, "User canceled.");
if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null);
}

Я добавил строку if (responseCode==BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) result = new IabResult(BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED, "Success");

Попробуй это

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new
IabHelper.QueryInventoryFinishedListener () {

 public void onQueryInventoryFinished(IabResult result, Inventory inventory) { ..................... if (inventory.hasPurchase(SKU_CONTENT)) { mHelper.consumeAsync(inventory.getPurchase(SKU_CONTENT), null); } } 

};