Я реализовал биллинг в приложении из этого руководства. . Предметом покупки является возможность установить собственный фон. Это прекрасно работает, но когда я удаляю и переустанавливаю приложение (или очищаю пользовательские настройки), мне трудно понять, как проверить, что кто-то уже купил элемент в приложении.
public void buySelected() {
if (backgroundColorsPurchased == true) {
this.colorChangeDialog(); //if user has already purchased, just call the dialog instead of re-buying.
//if the person has cleared their prefs, they'll have to be online to re-verify that they did indeed buy the item.
}else{
if(BillingHelper.isBillingSupported()){
BillingHelper.requestPurchase(mContext, "background.colors");
BillingHelper.setCompletedHandler(mTransactionHandler);
} else {
Log.i(TAG,"Can't purchase on this device");
}
}
}
Затем у меня есть обработчик:
public Handler mTransactionHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
Log.i(TAG, "Transaction complete");
Log.i(TAG, "Transaction status: "+BillingHelper.latestPurchase.purchaseState);
Log.i(TAG, "Item purchased is: "+BillingHelper.latestPurchase.productId);
if(BillingHelper.latestPurchase.isPurchased()){
//this is where we show the stuff that the person purchased. In this case, the dialog to change the background colour.
backgroundColorsPurchased = true; //just setting this to true so that the next time somebody clicks the donate button it'll just open the dialog.
//call the change background dialog
colorChangeDialog();
}else{
//fail
Toast.makeText(getApplicationContext(), "Fail", Toast.LENGTH_SHORT).show();
}
}
};
Как я могу убедиться, что товар был куплен ранее? Рынок просто постоянно выдает диалоговое окно, в котором говорится: «Вы уже приобрели этот предмет или покупка еще не завершена». Когда я пытаюсь использовать что-то вроде if(BillingHelper.latestPurchase.isPurchased()){
, я получаю принудительное закрытие, если это не внутри обработчика.