Fakturowanie aplikacji w systemie Android: stan zakupu pozostaje „zakupiony” po anulowaniu zamówienia
Obecnie testuję mój mechanizm rozliczeniowy InApp (przy użyciu interfejsu API InApp Billing w wersji 3, dlatego jako przykład używam przykładu TrivialDrive).
Mam jeden zarządzany element, czyli aktualizację do wersji premium.
Teraz zakup przedmiotu przy użyciu mojego konta testowego działa, ale gdy anuluję całe zamówienie w kasynie Google, mój kod nadal mówi mi, że przedmiot został zakupiony, a zatem zapewnia funkcje premium.
Oto, jak sprawdzam zakup w moim MainActivity. Nie zapisuję stanu zakupu lokalnie, ponieważ zrozumiałem, że z interfejsem API rozliczeń v3 można w razie potrzeby wysyłać zapytania o zakupy 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"));
}
}
);
}
});
}
Ciągle otrzymuję getPurchaseState = 0, co oznacza, że jest Zakupiony, nawet godzinę po anulowaniu zamówienia. Czemu?