В настоящее время я тестирую свой биллинговый механизм InApp (используя API-интерфейс InApp Billing версии 3, поэтому в качестве примера ссылаюсь на пример TrivialDrive).
У меня есть один управляемый элемент, который относится к версии с улучшенной версией.
Теперь покупка элемента с моей тестовой учетной записью работает, но после того, как я отменил весь заказ в Google checkout после этого, мой код все еще говорит мне, что этот предмет приобретен, и поэтому предоставляет премиальные функции.
Вот как я проверяю покупку в моей MainActivity. Я не сохраняю состояние покупки локально где-то, так как я понял, что с API-интерфейсом биллинга v3 вы можете запросить покупки ad hoc по мере необходимости.
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
iabHelper = new IabHelper(this, Helper.getPKey());
iabHelper.enableDebugLogging(true);
iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
@Override
public void onIabSetupFinished(IabResult result) {
Log.d("IAB", "SETUP FINISHED");
if(!result.isSuccess())
{
Log.d("IAB", "SETUP NOT OK");
return;
}
else
Log.d("IAB", "SETUP OK");
iabHelper.queryInventoryAsync(
new QueryInventoryFinishedListener() {
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inv) {
Log.d("IAB", "Query inventory finished.");
if (result.isFailure()) {
Log.d("IAB","Failed to query inventory: " + result);
return;
}
Log.d("IAB", "Query inventory was successful.");
// Do we have the premium upgrade?
boolean mIsPremium = inv.hasPurchase(Helper.premiumSku);
Purchase p = inv.getPurchase(Helper.premiumSku);
if(p != null)
Log.d("IAB PURCHASE STATE", IabHelper.getResponseDesc(p.getPurchaseState()));
else
Log.d("IAB PURCHASE STATE", "Purchase is null");
Log.d("IAB", "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}
}
);
}
});
}
Я продолжаю получать getPurchaseState = 0, что означает, что Покупается, даже через час после того, как я отменил заказ. Почему?