Android потребляемый: "уже принадлежит этот элемент", но inventory.hasPurchase() - false

Я застрял с Google In App v3 - я протестировал покупку без потребления (например, при сбое приложения между покупкой и потреблением) - теперь я не нашел выхода.

Если я попытаюсь купить снова, он говорит: "У вас уже есть этот предмет". Но когда я проверяю право собственности, он говорит, что я не владею им:

Inventory inv = mHelper.queryInventory(false, null);
inv.getPurchase(sku); // null
inv.hasPurchase(sku); // false

Я тоже не могу потреблять, так как у меня нет покупки для потребления. Как продолжить здесь?

ИЗМЕНИТЬ Воспроизведите его следующим образом: купите входящее приложение, затем отключите подключение к Интернету. После этого вы не сможете приобрести продукт снова в течение нескольких часов. Просто протестировав с помощью популярного приложения из игрового магазина (Diamond Digger Saga), у меня было такое же поведение. Неужели нет возможности избежать/решить эту проблему?

Ответы

Ответ 1

Я столкнулся с этой точной проблемой. У меня было два аккаунта Google на телефоне, один из которых был учетной записью разработчика (для которой я глупо использовал свою личную учетную запись), а другой - тестовую учетную запись, зарегистрированную в консоли разработчика. Я удалил и повторно добавил аккаунт разработчика из своих учетных записей на телефоне, что позволило мне совершить пробные покупки из моего приложения, подумав, что если учетная запись разработчика была второй в этом списке, она будет использовать первую для покупок.

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

Ответ 2

Если вы все делаете правильно, а ваш код в порядке - скорее всего, проблема связана с кэшированными данными Google Play Services.

Например, если вы совершили пробную покупку на своем устройстве A - на вашем устройстве B (с тем же аккаунтом Google), вы будете получать inventory без покупки в течение некоторого времени. И ваш inventory.getPurchase(sku) вернется null и inventory.hasPurchase(sku) вернет false;

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

Наша цель - сделать Google Play для обновления кеша.

Убедитесь, что вы используете Wi-Fi, потому что он может редко обновляться, если вы находитесь на мобильных данных. В конце концов данные будут обновлены, и вы получите свою покупку. В моем случае это произошло через 5 минут или что-л.