Подтвердить что ты не робот

Как получить отдельную информацию о ценах и валюте для покупки в приложении?

Я осуществляю покупки в приложении для приложения с поддержкой нескольких стран.

API версии 3 для платежей в приложениях утверждает, что:

Не требуется конвертация или форматирование валюты: указаны цены в валюте пользователя и отформатирован в соответствии с их языковым стандартом.

Это true true, так как skuGetDetails() выполняет все необходимые форматирования. Ответ включает в себя поле под названием price, которое содержит

Отформатированная цена товара, включая знак валюты. В цену не входит налог.

Однако мне нужен код валюты ISO 4217 (извлекаемый, если я знаю локаль магазина), и фактическую неформатную цену (оптимально в переменной с плавающей запятой или десятичной), поэтому я могу выполнить дальнейшую обработку и анализ.

Анализ вывода skuGetDetails() не является надежной идеей, поскольку во многих странах используются одни и те же символы валюты.

Currencies

Как я могу получить код валюты ISO 4217 и неформатную цену покупки в приложении с помощью API-интерфейсов In-App Billing версии 3?

4b9b3361

Ответ 1

Полную информацию можно найти здесь, но по существу в августе 2014 года это было разрешено с помощью

Метод getSkuDetails()

Этот метод возвращает сведения о продукте для списка идентификаторов продуктов. В ответном пакете, отправленном Google Play, результаты запроса сохраняются в String ArrayList, сопоставленном с ключом DETAILS_LIST. Каждая строка в списке деталей содержит сведения о продукте для одного продукта в формате JSON. Поля в строке JSON с деталями продукта приведены ниже

price_currency_code Код валюты ISO 4217 по цене. Например, если цена указана в британских фунтах стерлингов, price_currency_code - "GBP".

price_amount_micros Цена в микроблоках, где 1 000 000 микро-единиц равны одной единице валюты. Например, если цена "7,99 евро", price_amount_micros "7990000".

Ответ 2

Вы не можете, это в настоящее время не поддерживается. Для этого есть запрос функции, но он может или не может быть реализован.

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

Ответ 3

Вы можете. Вам нужно изменить SkuDetails.java, как показано ниже.

Шаги:

  • Проверьте их пример приложения для выставления счетов в приложении.
  • Измените файл SkuDetails.java следующим образом:
import org.json.JSONException; import org.json.JSONObject;

/**  
 * Represents an in-app product 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;
    } 
}

Ответ 4

Вот мой способ:)

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();

Ответ 5

Вы можете проверить это  Разработчики Android в некоторых странах теперь могут предлагать приложения для продажи в разных валютах через Google Wallet Merchant Center. Чтобы продавать ваши приложения в дополнительных валютах, вам нужно будет установить цену приложения в каждой стране/валюте. Список поддерживаемых стран/валют доступен в нашем справочном центре.

Если вы делаете приложение доступным в местной валюте, пользователи Google Play будут видеть приложение только для продажи в этой валюте. Клиенты будут платить в местной валюте, но оплата будет выписана в валюте, установленной в вашем аккаунте Merchant Center в Google Кошельке.

Ответ 6

Другим способом жесткого кодирования является ценовое предложение для стран с одним и тем же символом, по-разному на цент или около того. Когда вы извлекаете цену товара из игры Google при покупке, и вы знаете, что полученный символ валюты - тот, который используется во многих странах, т.е. $. Затем у вас есть журнал разных цен на вашем серверном сервере и сопоставляйте цену покупки с конкретной страной.

Ответ 7

Вот полный код:

ArrayList<String> skuList = new ArrayList<>();
skuList.add("foo");
skuList.add("bar");

final String[] prices = new String[skuList.size()];

Bundle querySkus = new Bundle();
querySkus.putStringArrayList("ITEM_ID_LIST", skuList);

Bundle skuDetails = _appActivity.mService.getSkuDetails(3, _appActivity.getPackageName(), "inapp", querySkus);

int response = skuDetails.getInt("RESPONSE_CODE");
if(response == 0) {
    ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");

    int i = 0;
    for (String thisResponse : responseList) {
        JSONObject object = new JSONObject(thisResponse);
        String sku = object.getString("productId");
        final String priceCurrency = object.getString("price_currency_code");
        String priceAmountMicros = object.getString("price_amount_micros");
        float priceAmount = Float.parseFloat(priceAmountMicros) / 1000000.0f;
        String price = priceAmount + " " + priceCurrency;

        if(skuList.contains(sku)){
            prices[i] = price;
            i++;
        }
    }
}

Из документации:

Price_currency_code Код валюты ISO 4217 для цены. Например, если цена указана в британских фунтах стерлингов, price_currency_code равен "GBP".

price_amount_micros Цена в микро-единицах, где 1 000 000 микро-единиц соответствуют одной единице валюты. Например, если цена составляет "7,99 евро", цена "7_0000". Это значение представляет собой локализованную округленную цену для конкретной валюты.

Теперь вам просто нужно разделить price_amount_micros на 1000000 и объединить его с валютой.

Ответ 8

Очень просто. SKU возвращает код валюты (поле price_currency_code). С помощью этого кода вы можете получить символ, используя класс Currency. См. Прилагаемый код:

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