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?

questionAnswers(8)

yourAnswerToTheQuestion