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.
- InApp comprado en Android
- Inventory.getPurchase () devuelve siempre null aunque ya comprado
- ¿Cómo cambio la cuenta de prueba que se va a utilizar en android en la facturación de la aplicación?
- No se puede realizar la compra en la aplicación de Android con la cuenta de prueba "El editor no puede comprar este elemento"
- Facturación en la aplicación: Inventario incorrecto; Hace que el usuario vuelva a comprar
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!
- IAB consumePurchase () ya no funciona para la respuesta estática android.test.purchased
- Cómo resolver "El elemento que estaba intentando comprar no se pudo encontrar"
- El ayudante IAB no está configurado. No se puede realizar la operación: queryInventory
- No se puede cambiar la moneda predeterminada para la facturación en la aplicación
- Cómo solucionar los defectos de la lógica de adquisición de la API de los consumibles en la API de facturación de Google Play v3 (relevante para todos los consumibles con API v3)
- En facturación de aplicaciones: artículo no encontrado
- Cómo verificar la compra de la aplicación de Android en el lado del servidor (Google Play en la facturación de aplicaciones v3)
- ¿Cómo determinar el número de suscriptores de facturación en la aplicación?
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.
- Obtenga la colección de nombres de parámetros de la url de Java / Android
- Android – ¿Cómo hacer que un icono brille en el tacto?