¿Cómo obtener información separada de precios y monedas para una compra integrada en la aplicación?

Estoy implementando compras en la aplicación para una aplicación con soporte para varios países.

La API de la Versión 3 de Facturación en la Aplicación afirma que :

No es necesaria ninguna conversión o formato de moneda: los precios se informan en la moneda del usuario y se formatean de acuerdo con su configuración regional.

Esto es realmente cierto , ya que skuGetDetails() se encarga de todo el formato necesario. La respuesta incluye un campo llamado price , que contiene el

Precio de formato del artículo, incluyendo su signo de moneda. El precio no incluye impuestos.

Sin embargo, necesito el código de moneda ISO 4217 (recuperable si conozco la configuración regional de la tienda) y el precio real no formateado (óptimamente en una variable flotante o decimal) para poder procesar y analizar más a fondo.

Analizar la devolución de skuGetDetails() no es una idea fiable, porque muchos países comparten los mismos símbolos de moneda.

Monedas

¿Cómo puedo obtener el código de moneda ISO 4217 y el precio no formateado de una compra integrada en la aplicación con la API de facturación en la aplicación 3?

La información completa se puede encontrar aquí , pero esencialmente en agosto de 2014 esto se resolvió con:

El método getSkuDetails ()

Este método devuelve los detalles del producto para obtener una lista de ID de producto. En el paquete de respuestas enviado por Google Play, los resultados de la consulta se almacenan en una lista de cadenas ArrayList asignada a la tecla DETAILS_LIST. Cada cadena en la lista de detalles contiene los detalles del producto para un solo producto en formato JSON. Los campos de la cadena JSON con los detalles del producto se resumen a continuación

Price_currency_code ISO 4217 código de moneda para el precio. Por ejemplo, si el precio se especifica en libras esterlinas británicas, price_currency_code es "GBP".

Price_amount_micros Precio en micro-unidades, donde 1.000.000 de micro-unidades equivalen a una unidad de la moneda. Por ejemplo, si el precio es "€ 7,99", price_amount_micros es "7990000".

No se puede, actualmente no se admite. Hay una solicitud de característica para ello, pero puede o no puede implementarse.

https://code.google.com/p/marketbilling/issues/detail?id=93

Usted puede. Debes modificar SkuDetails.java como a continuación.

Pasos:

  1. Compruebe su aplicación de ejemplo para la facturación en la aplicación.
  2. Modifique el archivo SkuDetails.java de la siguiente manera:
 import org.json.JSONException; import org.json.JSONObject; /** * Represents an in-app product's listing details. */ public class SkuDetails { String mItemType; String mSku; String mType; int mPriceAmountMicros; String mPriceCurrencyCode; String mPrice; String mTitle; String mDescription; String mJson; public SkuDetails(String jsonSkuDetails) throws JSONException { this(IabHelper.ITEM_TYPE_INAPP, jsonSkuDetails); } public SkuDetails(String itemType, String jsonSkuDetails) throws JSONException { mItemType = itemType; mJson = jsonSkuDetails; JSONObject o = new JSONObject(mJson); mSku = o.optString("productId"); mType = o.optString("type"); mPrice = o.optString("price"); mPriceAmountMicros = o.optInt("price_amount_micros"); mPriceCurrencyCode = o.optString("price_currency_code"); mTitle = o.optString("title"); mDescription = o.optString("description"); } public String getSku() { return mSku; } public String getType() { return mType; } public String getPrice() { return mPrice; } public String getTitle() { return mTitle; } public String getDescription() { return mDescription; } public int getPriceAmountMicros() { return mPriceAmountMicros; } public String getPriceCurrencyCode() { return mPriceCurrencyCode; } @Override public String toString() { return "SkuDetails:" + mJson; } } 

Aquí está mi solución 🙂

 private static Locale findLocale(String price) { for (Locale locale : Locale.getAvailableLocales()){ try { Currency currency = Currency.getInstance(locale); if (price.endsWith(currency.getSymbol())) return locale; }catch (Exception e){ } } return null; } 

Uso:

 Locale locale = findLocale(price); String currency = Currency.getInstance(locale).getCurrencyCode(); double priceClean = NumberFormat.getCurrencyInstance(locale).parse(price).doubleValue(); 

Puede comprobarlo. Los desarrolladores de Android en determinados países pueden ahora ofrecer aplicaciones para la venta en varias monedas a través de Google Wallet Merchant Center. Para vender tus aplicaciones en monedas adicionales, deberás establecer el precio de la aplicación en cada país / moneda. Una lista de países / monedas compatibles está disponible en nuestro Centro de ayuda.

Si haces que una aplicación esté disponible en moneda local, los clientes de Google Play solo verán la aplicación para la venta en esa moneda. Los clientes se cargarán en su moneda local, pero el pago se emitirá en la moneda establecida en su cuenta de Google Wallet Merchant Center.

Otra solución de código duro es el precio de artículos para los países con el mismo símbolo, de manera diferente por un centavo más o menos. Cuando usted recupera el precio del artículo de google jugar a la compra y usted sabe que el símbolo de moneda recuperado es uno que se utiliza en muchos países es decir. ps A continuación, tiene un registro de diferentes precios en su servidor de back-end y correlacionar el precio de compra con un país específico.

Muy simple. SKU devuelve el código de moneda (campo "price_currency_code"). Con ese código puede recuperar el símbolo usando la clase Currency. Vea el código adjunto:

 String currencyCode = skuObj.getString("price_currency_code"); currencySymbol = Currency.getInstance(currencyCode).getSymbol(); 
  • Android In-App Billing - queryInventoryAsync devuelve 0 resultado
  • ¿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?
  • ¿Son reembolsables para Android en la compra de consumibles compatibles con aplicaciones? - En API de facturación de aplicaciones V3
  • ¿Cómo actualizar / bajar las suscripciones en Android InAppBilling?
  • ¿Es OFICIALMENTE imposible recibir el precio de un elemento de facturación en la aplicación en tiempo de ejecución?
  • Cómo obtener datos de suscripción en la facturación de Android en la aplicación
  • Id de pedido de suscripciones de Android
  • Pagos en la aplicación para Android Amazon AppStore
  • Error en la facturación de Android en la aplicación, diciendo "Ya tienes una orden pendiente para este elemento".
  • Caché de dispositivos múltiples de Google IAB V3
  • ¿Vendiendo Ebooks en androide usando la opción paypal?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.