Assinaturas retornam o 'INAPP_PURCHASE_DATA' nulo usando 'In-app Billing V3'

Estou implementando a compra de Assinaturas em uma aplicação android.

Até o momento, as ordens de pagamento já estão configuradas no ‘Google Play Console de Desenvolvedor’ e eu consigo debitar o valor definido em cada uma das SKU no cartão de crédito.

Ao final disto, quero pegar os dados do JSON que deveriam vir “INAPP_PURCHASE_DATA” dentro do ‘onActivityResult’ da aplicação.

Porém, ao realizar a chamada no ‘bundle’, não é retorna nada. Todos os lugares do código onde deveriam retornar os dados da compram sempre retornam um valor Nulo. Mas mesmo assim a compra é debitada do meu cartão. O que me leva ao processo de correr até o console do ‘Google Wallet’ e cancelar o faturamento.

Eis aqui o que estou fazendo no momento:

//Defini o serviço antes do OnCreate.

[code]ServiceConnection mServiceConn = new ServiceConnection() {

    @Override
    public void onServiceDisconnected(ComponentName name) {
        mService = null;
    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        mService = IInAppBillingService.Stub.asInterface(service);
    }
};

[/code]

//No ‘onCreate’ eu defino o SKU que vem de outra Activity, inicio o Servico e a configuração do IABHelper.

[code]@Override
public void onCreate(Bundle savedInstanceState) {
.
.
.
skuSubs = getIntent().getExtras().getString(“SKU_TYPE”);

    bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"), mServiceConn, Context.BIND_AUTO_CREATE);

    mHelper = new IabHelper(this, base64EncodedPublicKey);
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
          public void onIabSetupFinished(IabResult result) {
            if (!result.isSuccess()) {
                Log.d(TAG, "In-app Billing setup failed: " result);
            }else{             
                Log.d(TAG, "In-app Billing is set up OK");
            }
          }
        });
}[/code]

//aqui eu defino o metodo que será usado no ‘onClick’ da minha Activity para abrir a janela de Dialogo da assinatura. (o developerPayload é gerado em outro lugar do código)

public void buyClick(View view) { mHelper.launchPurchaseFlow(this, skuSubs, 10001, mPurchaseFinishedListener, developerPayload); }

//No método ‘onActivityResult’ eu capturo o retorno do ‘INAPP_PURCHASE_DATA’ pelo ‘Bundle’.

[code]@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {     
        super.onActivityResult(requestCode, resultCode, data);
      }
      if(data.getExtras()!=null){
          Bundle bundle = data.getExtras();
          editText.setText(bundle.getString("INAPP_PURCHASE_DATA"));
      }else{
          editText.setText("null");
      }
}[/code]

// Aqui o ‘mPurchaseFinishedListener’ trata os dados da compra. Em testes anteriores, tentei capturar os dados pela classe ‘Purchase’, porém sem sucesso.

[code]IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {

    if (result.isFailure()) {
        return;
    }else 
        if (purchase.getSku().equals(skuSubs)) {
            mHelper.queryInventoryAsync(mReceivedInventoryListener);
        }
    }
};

IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
StringBuffer sb = new StringBuffer();
if (result.isFailure()) {
// Handle failure
return;
} else {
mHelper.consumeAsync(inventory.getPurchase(skuSubs), mConsumeFinishedListener);
}
}
};

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) {
//ok msg
} else {
//fail msg
}
}
}; [/code]

//No ‘onDestroy’ eu termino com o ‘Serviço’ e com o ‘IABHelper’.

@Override public void onDestroy() { super.onDestroy(); if (mService != null) unbindService(mServiceConn); if (mHelper != null) { mHelper.dispose(); mHelper = null; } }

No meu ‘AndroidManifest.xml’ estão definidos:

e

Quando configuro isso, dependendo do SKU que é enviado na Activity anterior eu recebo os dados da compra corretamente.

Quando faço a compra, ela é determinada como concluída e depois não recebo o resultado da compra.

Abro o Developer Console e logo após entro no Wallet para cancelar a Assinatura que foi debitada.

Gostaria de saber como eu faço essa requisição dentro da aplicação? Não consigo pegar o retorno da compra até agora.