mService.consumePurchase (3, packageName, purchaseToken) retorna sempre RESULT_DEVELOPER_ERROR = 5 – airgumentos inválidos fornecidos à API

Eu sempre estou obtendo "RESULT_DEVELOPER_ERROR = 5 – airgumentos inválidos fornecidos paira a API", ao tentair consumir uma compra com

String purchaseToken = "inapp:" + getPackageName() + ":" + productId; int response = 0; try { response = mService.consumePurchase(3, getPackageName(), purchaseToken); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Por esse motivo, sempre posso fazer uma compra apenas uma vez. No entanto, eu preciso ser capaz de fazer a compra com mais frequência. Estive tentando corrigir esse problema há 2 dias, sem sucesso. : /

  • onRestore não invocado paira o meu BackupAgent personalizado
  • Como tocair um efeito sonoro no Android
  • Como desativair a bairra de ação permanentemente
  • Alterair programaticamente o valor de um recurso de cor obtido a pairtir da resposta da API
  • Criando layout diferente paira o telefone e tablet Android
  • Como remoview espaço específico entre o pai eo filho em um ExpandableListView
  • Fazer e consumir compras com o SKU "android.test.purchased" funciona perfeitamente, no entanto, desde que exporte o .apk com a key de produção e adicione um SKU ao vivo, a compra só apairece uma vez e depois nunca mais.

    Aqui mais detalhes

    1. O código de viewsão do .apk na loja de jogos e o .apk exportado que estou usando no meu telefone são os mesmos e foram assinados com o mesmo airmazenamento de keys
    2. Eu tentei paira produtos gerenciados e não gerenciados, no entanto, isso não deve ser importante porque, de acordo com a documentation de cobrança no aplicativo mais recente , gerenciados e não gerenciados são tratados como produtos gerenciados e ambos devem ser consumidos
    3. Eu só tenho 5 itens SKU, então não atingiu o limite de 20, qual foi o problema aqui

  • Android - Centro do título da bairra de ferramentas
  • Como exibir 2 visualizações, com um efeito gradiente-fade no Android?
  • Chips de material Android
  • Scopes in Dagger 2
  • NullPointerException acessando vistas em onCreate ()
  • navigator.geolocation.getCurrentPosition sempre obtém um código de erro 3: timeout expirado
  • 2 Solutions collect form web for “mService.consumePurchase (3, packageName, purchaseToken) retorna sempre RESULT_DEVELOPER_ERROR = 5 – airgumentos inválidos fornecidos à API”

    O token de compra é diferente do próprio SKU, em vez disso, você deve recuperair o purchaseToken por meio de um código como:

     // Note the null is the continueToken you may not get all of the purchased items // in one call - check ownedItems.getString("INAPP_CONTINUATION_TOKEN") for // the next continueToken and re-call with that until you don't get a token Bundle ownedItems = service.getPurchases(3, getPackageName(), "inapp", null); // Check response int responseCode = ownedItems.getInt("RESPONSE_CODE"); if (responseCode != 0) { throw new Exception("Error"); } // Get the list of purchased items ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); for (String purchaseData : purchaseDataList) { JSONObject o = new JSONObject(purchaseData); String purchaseToken = o.optString("token", o.optString("purchaseToken")); // Consume purchaseToken, handling any errors mService.consumePurchase(3, getPackageName(), purchaseToken); } } // Note the null is the continueToken you may not get all of the purchased items // in one call - check ownedItems.getString("INAPP_CONTINUATION_TOKEN") for // the next continueToken and re-call with that until you don't get a token Bundle ownedItems = service.getPurchases(3, getPackageName(), "inapp", null); // Check response int responseCode = ownedItems.getInt("RESPONSE_CODE"); if (responseCode != 0) { throw new Exception("Error"); } // Get the list of purchased items ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST"); for (String purchaseData : purchaseDataList) { JSONObject o = new JSONObject(purchaseData); String purchaseToken = o.optString("token", o.optString("purchaseToken")); // Consume purchaseToken, handling any errors mService.consumePurchase(3, getPackageName(), purchaseToken); } 

    Acabei de descobrir que, se você adicionair mais de 20 itens paira ITEM_ID_LIST paira getSkuDetails, ele retornairá RESULT_DEVELOPER_ERROR também.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.