Что касается Google Play, то на самом деле нет никакой разницы между расходным материалом и непотребным предметом; это различие полностью зависит от того, что вы реализуете в своем приложении. Таким образом, даже если SKU, который вы тестируете, не предназначен для использования в качестве расходных материалов (например, для постоянного премиального обновления), в целях тестирования вы можете рассматривать его как расходный материал и использовать его, чтобы его можно было приобрести снова.
Удобный подход состоит в том, чтобы настроить временное меню тестирования в вашем приложении (например, путем добавления пункта меню во время тестирования в главное меню параметров вашего приложения), а затем заставить обработчик этого элемента вызывать метод takeAsync () вашего экземпляра IabHelper для артикул, который вы хотите снова протестировать при покупке. При этом товар будет израсходован и, таким образом, сразу же станет доступен для обратной покупки с вашего устройства.
Конечно, вы все равно захотите вернуть деньги за покупку через Google Checkout, чтобы не тратить собственные деньги только на тестирование своего приложения.
Я бы добавил, что consumerAsync (), похоже, также отлично работает для сброса тестового SKU android.test.purchased, если вы тестируете с использованием таких статических значений.
Что касается обновления состояния покупки для отражения возврата, я лично испытал (и есть много подобных отчетов, опубликованных другими разработчиками), что ручное инициирование возврата через Checkout (например, для тестовой покупки из приложения TrivialDrive) требует дней, чтобы изменить состояние покупки продукта (на INAPP_PURCHASE_STATE_REFUNDED).
(Зная, что несчастье любит компанию, некоторые из этих дополнительных отчетов можно найти в этой теме обсуждения: https://plus.google.com/+AndroidDevelopers/posts/R8DKwZDsz5m)
По крайней мере, отчасти это связано с кешированием данных о покупках в Google Play на устройстве.
По моему опыту, перезагрузка устройства иногда может привести к тому, что Google Play обновит свой кеш с серверов GP. Таким образом, возможно, что изменения, связанные с отменой или возвратом заказа через Checkout, также могут быть обнаружены после перезагрузки.
Может показаться, что такой длительный период обработки не принесет вам никакой пользы, поскольку вы не можете знать, когда пользователи перезагрузятся. Но опять же, вы знаете, что каждое устройство в конечном итоге будет перезагружено, и поэтому, если вас беспокоит, что пользователь, получивший возмещение, в конечном итоге будет заблокирован от использования возвращенного продукта IAB, несколько дней задержки могут не иметь большого значения, до тех пор, пока это в конце концов произойдет.
Конечно, помните, что это представление о том, что кеш будет обновляться при перезагрузке, недокументировано и анекдотично (как и многие варианты поведения IAB3 и TrivialDrive, пока что). Они называют это фольклором.
Еще одна вещь, которая запускает обновление, - это когда пользователь пытается купить продукт. Сразу после начала покупки система должна быть уверена, что продукт еще не принадлежит, и поэтому она обновляет кеш Google Play. По моему личному опыту, это всегда происходило. Но, опять же, это не очень практичный способ проверить возврат средств, потому что это потребует отображения диалогового окна покупки без приглашения, а также сообщения об ошибке, которое сообщает пользователю, что «у вас это уже есть» (если они делают < / em> владеть им).
Это действительно пригодится, когда пользователь платит за элемент IAB на одном из своих устройств, а затем пытается получить доступ к этому элементу на другом устройстве, которое принадлежит той же учетной записи, которая использовалась для купи это. Информация о покупке в этом случае очень часто еще не кэшируется. Но вы можете просто сделать небольшую заметку в диалоговом окне покупки, что, если элемент уже был куплен, попытка повторной покупки должна сделать его доступным на данном устройстве без дополнительной оплаты. Иногда требуется две (инициированные пользователем) попытки покупки, чтобы наконец получить ответ IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED. Да, немного запутанно, но я думаю, что с человеческой точки зрения это будет работать с соответствующим выделением сообщения и извиняющейся формулировкой диалогового окна подтверждения, говорящего им, что они владеют предметом, и т. Д .:-)).
На практике вы можете увидеть, что Google может не захотеть, чтобы каждый экземпляр каждого приложения IAB в мире обращался к его серверам каждый раз, когда осуществляется доступ к данным о покупках приложения, особенно с учетом того, что они советуют разработчикам чтобы проверять, что было куплено, каждый раз при запуске приложения. Это также проблема производительности вашего приложения - вот что такое кеширование. Поэтому вам нужно знать о триггерах для обновления кеша, и я не нашел ни одного места, где это официально задокументировано (кроме, как мы предполагаем, в коде). Так что будьте готовы выставить руки перед собой и начать ощупывать в темноте.
Дополнительную информацию о буферизации Google Play см. На этой странице:
При каких условиях Изменения сервера версии 3 для биллинга приложений стали доступны на клиентских устройствах?
Я хотел бы отметить, что во фрагменте кода вашего сообщения вы вызываете inventory.hasPurchase (SKU_REMOVE_ADS), но это сообщит вам только, находится ли покупка в списке покупок, возвращенных в объекте инвентаря; он не сообщит вам состояние покупки этого SKU. Я знаю, что это подход, используемый приложением TrivialDrive, но это приложение не занимается возвратами и отменами. Для обнаружения возвратов и отмененных заказов вам понадобится что-то вроде этого:
Purchase removeAdsPurchase = inventory.getPurchase(SKU_REMOVE_ADS);
if(removeAdsPurchase != null) {
int purchaseStateForRemoveAds = removeAdsPurchase.getPurchaseState();
if(purchaseStateForRemoveAds == 1) {
//Do cancelled purchase stuff here
}
else if(purchaseStateForRemoveAds == 2) {
//Do refunded purchase stuff here
}
}
Хорошая новость о возврате средств и отмене заказов заключается в том, что и то, и другое, AFAIK, полностью на усмотрение разработчика. Итак, если вы обнаружите, что пользователи, которые получают их, могут продолжать использовать ваше приложение в течение длительного периода после этого, и если вы обнаружите, что многие пользователи пользуются этим, то вы можете решить, хотите ли вы продолжать предоставлять возмещение в все дела. Я предполагаю, что это не будет проблемой; даже если какой-то пользователь, получивший возмещение, некоторое время будет использовать ваше приложение, это не будет большой проблемой.
Именно для тестирования вам нужна возможность очень быстро повторить попытку покупки, и использование consumerAsync () определенно работает для этой цели.
person
Carl
schedule
04.04.2013