Facturación en la aplicación de Android: el estado de compra permanece "comprado" después de la cancelación del pedido

Actualmente estoy probando mi mecanismo de facturación de InApp (usando la API de InApp Billing versión 3, por lo tanto, tomo el ejemplo de TrivialDrive como referencia).

Tengo un artículo gestionado, que es la actualización a la versión premium.

Ahora, comprar el artículo con mi cuenta de prueba funciona, pero cuando realizo una cancelación de todo el pedido en Google Checkout luego, mi código aún me dice que el artículo se compró y, por lo tanto, otorga las funciones premium.

Aquí es cómo verifico la compra en mi MainActivity. No guardo el estado de compra localmente en algún lugar, ya que entendí que con la API de facturación v3, puede realizar consultas ad hoc según sea necesario.

@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"));


                        }
                    }                       

                );              
            }
        });       
    }

Sigo obteniendo getPurchaseState = 0, lo que significa que se compró, incluso una hora después de que cancelé el pedido. ¿Por qué?

Respuestas a la pregunta(8)

Su respuesta a la pregunta