¿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 :
- ¿Es posible tener múltiples apoyos de APK basados en el país?
- Android en la aplicación de facturación: proteger la clave pública de la aplicación
- Ofrecer recursos multimedia adicionales (gráficos / sonidos) como elementos facturados en la aplicación de Google Play
- Android IAB - Actividad destruida después de una compra exitosa
- IInAppBillingService mostrar una advertencia - método getInterfaceDescriptor nunca se utiliza localmente - ¿Cómo eliminar?
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.
¿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?
- "Regalo" en una aplicación en Android de compra
- El ayudante IAB no está configurado. No se puede realizar la operación (en Android 2.3.3)
- Mostrando precios localizados en la aplicación de Android
- Facturación en la aplicación: Error: su pago no se pudo procesar en este momento
- ¿Cómo proteger Google In-App Billing v3 contra la piratería de código?
- ¿Cómo puedo verificar la facturación de Android en la aplicación con un servidor con Ruby?
- Facturación inapp android
- ¿Cómo actualizar / bajar las suscripciones en Android InAppBilling?
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.
Usted puede. Debes modificar SkuDetails.java como a continuación.
Pasos:
- Compruebe su aplicación de ejemplo para la facturación en la aplicación.
- 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();
- OnEditorActionListener llamado dos veces con el mismo eventTime en el teclado SenseUI
- Llamada de API para obtener la arquitectura del procesador