如何获得单独的价格和货币信息的应用程序内购买?

我正在为支持多个国家的应用程序实施应用程序内购买。

应用内结算版本3 API 声称 :

没有货币转换或格式化是必要的:价格以用户的货币报告,并根据其区域设置格式。

这实际上是真的 ,因为skuGetDetails()负责所有必要的格式。 响应包括一个叫price的字段,其中包含

该项目的格式化的价格,包括其货币符号。 价格不包括税。

但是,我需要ISO 4217货币代码(如果我知道商店区域设置,则可以检索)以及实际的非格式化价格(最好在浮点数或小数variables中),这样我可以自己进行进一步的处理和分析。

parsingskuGetDetails()的返回不是一个可靠的想法,因为许多国家共享相同的货币符号。

货币

如何使用应用内结算版本3 API获取应用内购买的ISO 4217货币代码和非格式价格?

Solutions Collecting From Web of "如何获得单独的价格和货币信息的应用程序内购买?"

完整的信息可以在这里find,但基本上在2014年8月这是解决与:

getSkuDetails()方法

此方法返回产品ID列表的产品详细信息。 在Google Play发送的响应包中,查询结果存储在映射到DETAILS_LIST键的stringArrayList中。 详细信息列表中的每个string都包含JSON格式的单个产品的产品详细信息。 下面总结了产品详细信息的JSONstring中的字段

price_currency_code价格的ISO 4217货币代码。 例如,如果价格用英制英镑指定,price_currency_code是“GBP”。

price_amount_micros以微单位表示的价格,其中1,000,000个微单位等于一个货币单位。 例如,如果价格是“€7.99”,则price_amount_micros是“7990000”。

你不能,目前不支持。 有一个function请求,但它可能会或可能不会实现。

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

您可以。 你需要像下面那样修改SkuDetails.java。

脚步:

  1. 检查他们的示例应用程序的应用程序内结算。
  2. 修改SkuDetails.java文件,如下所示:
 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; } } 

这是我的解决方法:)

 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; } 

用法:

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

您可以select此项目select国家/地区的Android开发者现在可以通过Google电子钱包商家中心以多种货币提供应用程序。 要以其他货币出售您的应用,您需要在每个国家/货币中设置该应用的价格。 我们的帮助中心提供支持的国家/货币列表。

如果您使用本地货币制作应用,Google Play客户将只能看到以该货币出售的应用。 客户将使用当地货币付款,但付款将使用您的Google电子钱包Merchant Center帐户中设置的币种进行付款。

另一个硬编码的解决方法是对具有相同符号的国家的价格项目进行定价,差异大约一分钱左右。 当你在购买时从谷歌播放商品的价格,你知道检索的货币符号是在许多国家使用的货币符号,即。 $。 然后在后端服务器上logging不同价格的日志,并将购买价格与特定国家相关联。

很简单。 SKU返回货币代码(“price_currency_code”字段)。 使用该代码,您可以使用Currency类检索符号。 请参阅附加的代码:

 String currencyCode = skuObj.getString("price_currency_code"); currencySymbol = Currency.getInstance(currencyCode).getSymbol();