27

複数の国をサポートするアプリのアプリ内購入を実装しています。

In-App Billing バージョン 3 API は、次のことを主張しています。

通貨の変換や書式設定は必要ありません。価格はユーザーの通貨で報告され、ロケールに従って書式設定されます。

必要なすべてのフォーマットを処理するため、これは実際には trueです。skuGetDetails()応答には、 というフィールドpriceが含まれています。

通貨記号を含む、フォーマットされたアイテムの価格。価格には税金は含まれていません。

ただし、ISO 4217 通貨コード (ストアのロケールがわかっている場合は取得可能) と実際のフォーマットされていない価格 (浮動小数点または 10 進変数が最適) が必要なので、さらに処理して自分で分析できます。

多くの国が同じ通貨記号を共有しているため、 の戻り値を解析することはskuGetDetails()信頼できる考えではありません。

通貨

アプリ内課金バージョン 3 API を使用して、アプリ内購入の ISO 4217 通貨コードとフォーマットされていない価格を取得するにはどうすればよいですか?

4

8 に答える 8

5

これが私の回避策です:)

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();
于 2013-09-08T18:22:24.700 に答える
2

とてもシンプルです。SKU は通貨コード (「price_currency_code」フィールド) を返します。そのコードを使用すると、Currency クラスを使用してシンボルを取得できます。添付のコードを参照してください。

String currencyCode = skuObj.getString("price_currency_code");
currencySymbol = Currency.getInstance(currencyCode).getSymbol();
于 2016-04-12T08:28:11.410 に答える