Как получить отдельную информацию о ценах и валюте для покупки в приложении?
Я осуществляю покупки в приложении для приложения с поддержкой нескольких стран.
API версии 3 для платежей в приложениях утверждает, что:
Не требуется конвертация или форматирование валюты: указаны цены в валюте пользователя и отформатирован в соответствии с их языковым стандартом.
Это true true, так как skuGetDetails()
выполняет все необходимые форматирования. Ответ включает в себя поле под названием price
, которое содержит
Отформатированная цена товара, включая знак валюты. В цену не входит налог.
Однако мне нужен код валюты ISO 4217 (извлекаемый, если я знаю локаль магазина), и фактическую неформатную цену (оптимально в переменной с плавающей запятой или десятичной), поэтому я могу выполнить дальнейшую обработку и анализ.
Анализ вывода skuGetDetails()
не является надежной идеей, поскольку во многих странах используются одни и те же символы валюты.
![Currencies]()
Как я могу получить код валюты ISO 4217 и неформатную цену покупки в приложении с помощью API-интерфейсов In-App Billing версии 3?
Ответы
Ответ 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();