El retorno de API de Google IAB API3 getSkuDetails () falló 5: Error del programador

Estoy tratando de incorporar API de Google en la aplicación de facturación en mi código que ha estado utilizando API2.

Mi llamada a mHelper (el objeto IabHelper) tiene éxito, por lo que me estoy conectando a los servidores de Google. Parece que puedo determinar los elementos de propiedad, ya que mi QueryInventoryFinishedListener devuelve un inventario válido con todos los artículos comprados. También puedo ejecutar una compra.

Sin embargo, la consulta de detalles sku falla (getSkuDetails ()). Aquí está toda la salida LogCat relacionada con IabHelper de Eclipse (he eliminado mi nombre de paquete y SKUs de producto) que conducen al fallo:

12-31 11:47:04.642: D/IabHelper(13633): Starting in-app billing setup. 12-31 11:47:04.832: D/IabHelper(13633): Billing service connected. 12-31 11:47:04.832: D/IabHelper(13633): Checking for in-app billing 3 support. 12-31 11:47:04.832: D/IabHelper(13633): In-app billing version 3 supported for com.XXXX.XXXX 12-31 11:47:04.832: D/IabHelper(13633): Subscriptions AVAILABLE. 12-31 11:47:04.842: D/IabHelper(13633): Starting async operation: refresh inventory 12-31 11:47:04.842: D/IabHelper(13633): Querying owned items, item type: inapp 12-31 11:47:04.842: D/IabHelper(13633): Package name: com.XXXX.XXXX 12-31 11:47:04.842: D/IabHelper(13633): Calling getPurchases with continuation token: null 12-31 11:47:04.912: D/IabHelper(13633): Owned items response: 0 12-31 11:47:04.912: D/IabHelper(13633): Sku is owned: com.XXXX.XXXX.item_one 12-31 11:47:04.922: D/IabHelper(13633): Sku is owned: com.XXXX.XXXX.item_two ... (and 45 other items) ... 12-31 11:47:05.012: D/IabHelper(13633): Continuation token: null 12-31 11:47:05.012: D/IabHelper(13633): Querying SKU details. 12-31 11:47:05.012: D/IabHelper(13633): getSkuDetails() failed: 5:Developer Error 12-31 11:47:05.012: D/IabHelper(13633): Ending async operation: refresh inventory 

No parece un problema de firma, ya que puedo conectarme y realizar una compra con éxito.

¿Alguien más ha tenido problemas en los que getSkuDetails () falla con el mensaje "Error de desarrollador", mientras que otros aspectos del trabajo de facturación en la aplicación?

¡Gracias por tu tiempo!

He experimentado el mismo problema. El problema parece ocurrir cuando tiene más de 20 SKUs en su inventario.

La solución era obtener los detalles del SKU en trozos. Reemplace querySkuDetails en IabHelper.java con:

 int querySkuDetails(String itemType, Inventory inv, List<String> moreSkus) throws RemoteException, JSONException { logDebug("Querying SKU details."); ArrayList<String> skuList = new ArrayList<String>(); skuList.addAll(inv.getAllOwnedSkus(itemType)); if (moreSkus != null) { for (String sku : moreSkus) { if (!skuList.contains(sku)) { skuList.add(sku); } } } if (skuList.size() == 0) { logDebug("queryPrices: nothing to do because there are no SKUs."); return BILLING_RESPONSE_RESULT_OK; } while (skuList.size() > 0) { ArrayList<String> skuSubList = new ArrayList<String>( skuList.subList(0, Math.min(19, skuList.size()))); skuList.removeAll(skuSubList); Bundle querySkus = new Bundle(); querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuSubList); Bundle skuDetails = mService.getSkuDetails(3, mContext.getPackageName(), itemType, querySkus); if (!skuDetails.containsKey(RESPONSE_GET_SKU_DETAILS_LIST)) { int response = getResponseCodeFromBundle(skuDetails); if (response != BILLING_RESPONSE_RESULT_OK) { logDebug("getSkuDetails() failed: " + getResponseDesc(response)); return response; } else { logError("getSkuDetails() returned a bundle with neither an error nor a detail list."); return IABHELPER_BAD_RESPONSE; } } ArrayList<String> responseList = skuDetails .getStringArrayList(RESPONSE_GET_SKU_DETAILS_LIST); for (String thisResponse : responseList) { SkuDetails d = new SkuDetails(itemType, thisResponse); logDebug("Got sku details: " + d); inv.addSkuDetails(d); } } return BILLING_RESPONSE_RESULT_OK; } 

Este método obtiene las SKU en trozos de 18. Funcionó para mí.

El número de SKU no es siempre la razón. Esto también comenzó hapenning después de que Google cambió la manera que las cosas trabajan en la tienda del juego del revelador.

Antes , sólo teníamos que cargar firmado APK sin publicarlo.

Ahora , hay secciones Beta y Alpha donde tienes que cargar APK firmado y publicarlo para poder comprar en la aplicación. No se olvide de agregarse a la lista de probadores y establecer correctamente una lista de usuarios beta.

  • Facturación en la aplicación: Error: su pago no se pudo procesar en este momento
  • La opción UnManaged no está disponible en la consola de Google Play para desarrolladores
  • ¿Hay alternativas a usar la facturación de Google en la aplicación, como una manera de evitar la publicación de información privada?
  • No puede hacer que la aplicación de ejemplo de facturación de Android en la aplicación funcione
  • Compra exitosa pero no se encuentra la clase cuando se desmarca: com.google.android.finsky.billing.lightpurchase.PurchaseParams
  • IAB firmó datos sin órdenes en él
  • "Usted ya posee este artículo" pero las compras están vacías
  • En la aplicación de facturación v3 cuando no hay red
  • Expiración de facturación dentro de la aplicación
  • Facturación en la aplicación: "Elementos de consulta disponibles para la compra" devuelve 0 artículos
  • Diferencia entre IABHelper y IInAppBillingService en InAPPBilling
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.