2013-12-03 3 views
1

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

В покупке приложения работает нормально. Но однажды пользователь покупает элемент, как мне его обрабатывать, чтобы в следующий раз он узнал, что уровни разблокированы. Должен ли я сохранять его в sharedPreferences и проверять каждый раз. Или я должен каждый раз запрашивать с консоли Google, чтобы проверить статус для конкретного идентификатора.

высоко appriciate бы, если кто-то может предложить мне правильный способ сделать это ..

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

ответ

2

Использование RESTORE_TRANSACTION является единственным способом, если использовать управляемые покупки. Если вы используете неуправляемые покупки, вы можете сохранить состояние покупки на своем собственном сервере, но это вряд ли проще.

О RESTORE_TRANSACTIONS ничего не происходит: вы просто запускаете команду, и вы получаете уведомление с информацией о транзакции, которая находится в том же формате, что и вы, когда вы впервые покупаете товар. Вы должны обрабатывать его точно так же, и, скорее всего, у вас уже есть код для вашего приложения. Тестирование это несколько сложнее, потому что оно не работает с тестовыми учетными записями, и вам нужно жить.

Перейдите к документации official, чтобы понять, как она работает.

Три способа управления данными вашего приложения.

1) SharedPrefrence: вы можете использовать значение prefrence акций и проверить, является ли он куплен или нет. если в случае, если пользователь удалил приложение, а затем снова установил приложение, вы можете проверить, был ли пользователь приобретен или нет, при этом вы приобретаете товар уже купленный. И вам нужно управлять пользователем для доступа к вашим данным приложения.

2) локальная база данных: вы также можете использовать локальную базу данных sqlite для хранения деталей покупки и статуса покупки. и то же самое, что и выше, если пользователь очистит данные или удалит приложение, затем снова запросите элемент покупки и проверьте, был ли пользователь приобретенным или нет.

или

2) базы данных сервера: Это лучший способ сравнить выше, если вы используете веб-сервер для хранения пользовательских данных. В этом типе вам даже не нужно управлять во второй раз для случая, если пользователь удалит приложение или очистит данные приложения.

3) запутывания: (Самый эффективный способ по сравнению с общим prefrence)

Для получения более подробной информации о проверке реализации HERE

Вот фрагмент того, как операции восстанавливаются:

private void restoreTransactions() { 
    if (!mBillingObserver.isTransactionsRestored()) { 
     BillingController.restoreTransactions(this); 
     Toast.makeText(this, R.string.restoring_transactions, Toast.LENGTH_LONG).show(); 
    } 
} 

EDITED:

V3 api больше не требует восстановления покупок. Может напрямую запрашивать купленные предметы.

Пожалуйста, прочтите раздел запрашивая для купленного товара из: http://developer.android.com/google/play/billing/billing_integrate.html
и getPurchases() method description.

Чтобы уже приобрел элементы детали опробовать, как показано ниже:

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() { 
    public void onQueryInventoryFinished(IabResult result, 
      Inventory inventory) { 
     if (result.isFailure()) { 
      complain("Failed to query inventory: " + result); 
      return; 
     } 

     mIsPremium = inventory.hasPurchase(SKU_PREMIUM); ------> By here you can get information 

    } 
}; 
+0

Спасибо за ваш ответ. Не могли бы вы рассказать мне более подробно о том, как использовать RESTORE_TRANSACTIONS. Я использую версию V3 – Sushil

+0

Ознакомьтесь с моим обновленным ответом. – GrIsHu

+0

На моем месте я использую «IabHelper» для покупки товара. Будет ли у меня возможность называть getPurchases()? или sud я делаю mService общедоступным, а затем использую его? Существует ли стандартный способ использования «IabHelper»? Спасибо за Ваш ответ. – Sushil

1

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

Если вы используете API 3 или выше, информация уже кэшируется на устройстве. По-прежнему разумно совершать вызовы на сервер, если сеть доступна, но вы также можете использовать getPurchases для проверки.

Пожалуйста, смотрите: Источник http://developer.android.com/google/play/billing/api.html

+0

но используя общие предпочтения может быть взломана довольно просто с любым телефоном коренятся не так ли? –

+0

@martynmlostekk правильный –

Смежные вопросы