Как получить валюту продукта для покупки в приложении на Windows Phone 8?
Чтобы отслеживать покупки в приложении, сделанные в наших приложениях Windows Phone 8, мы хотели бы знать, в какой валюте покупки совершаются внутри приложения. Сейчас мы знаем цену, используя свойство FormattedPrice, например:
public static async void LoadProductListing()
{
ListingInformation listings = await CurrentApp.LoadListingInformationAsync();
ProductListing product = listings.ProductListings["SomeProductID"];
String price = product.FormattedPrice;
}
В результате получается цена, форматированная только знаком типа €0,99
или $0.99
. Для €
это нормально, например. $
Это недостаточно информации: мы до сих пор не знаем, это доллар США, канадский доллар, австралийский доллар или чилийское песо (этот знак также равен $). Мы хотели бы получить эту информацию с соответствующим кодом валюты ISO 4217 (например, EUR
, USD
, CAD
, AUD
, CLP
)) или, по крайней мере, символ, который объясняет точную валюту (например, US$
, C$
и т.д.).
В Windows 8 можно использовать свойство ListingInformation.CurrentMarket
для получения локали текущего рынка (и, следовательно, используемой валюты), однако в документации есть примечание:
Windows Phone 8
This API is not implemented and will throw an exception if called.
Мы используем системный язык не достаточно точный: он может быть не таким, как язык, используемый для текущего рынка (но мы можем ошибаться там!).
Есть ли способ правильно определить валюту покупки в приложении из приложения Windows Phone 8?
Ответы
Ответ 1
WP8 использует ваш профиль профиля платежей в режиме Live ID, чтобы выбрать рынок, который использует телефон, и вы не можете изменить его с помощью настройки на телефоне. Я знаю только об этом, потому что мой профиль платежей настроен на Канаду каким-то образом (я из США), и я не могу изменить это с помощью настройки на телефоне.
Однако вернемся к исходному вопросу: ваш телефон всегда будет сообщать о культуре, используемой для покупок приложений через System.Globalization.RegionInfo.CurrentRegion. Таким образом, вы можете надежно получить правильный код валюты, который используется для покупок в приложении:
var regionInfo = System.Globalization.RegionInfo.CurrentRegion;
var currencyCode = regionInfo.ISOCurrencySymbol;
Ответ 2
В Windows Phone 8 изменение области на вашем устройстве изменит доступ к рынку.
Например, если я меняю регион на своем телефоне из Австралии в США, я обращаюсь к магазину в США. Любые покупки из этого магазина будут производиться в местной валюте (при условии, что у меня есть способ оплаты, принятый в этом регионе - например, кредитная карта США).
Итак, System Locale должен быть подходящим решением для ваших целей, так как в отличие от WP7 ваш рынок не связан с локалию живого идентификатора.