iOS In-App Purchase中涉及到的貨幣單位

iOS In-App Purchase中涉及到的貨幣單位

發表於 2014 年 2 月 18 日 由 三石html

如今iOS的AppStore上各種應用很是豐富,有付費的也有免費的,而免費的應用也能夠支持IAP (In-App Purchase,應用內支付) 。 對於應用內支付,咱們有時候但願對用戶的支付行爲進行記錄,甚至經過記錄支付過程進行記帳,那在這個過程當中用戶支付所使用的貨幣類型是咱們須要考慮的一個問題,這裏我整理一下。spa

作過iOS發佈的朋友應該都知道,咱們在iTunes Connect上發佈一款應用的時候會選擇發佈的國家/地區。這實際上也就是說咱們在不一樣國家地區的AppStore上,可下載安裝的應用是不一樣的,並且這與用戶的Apple ID帳號有關。操作系統

因此,本文的問題主要是針對多地區發佈的,若是你的應用只在中國大陸發佈,而不考慮港、澳、臺及其餘國家和地區,應用收費只須要關注人民幣就能夠了。code

在iTunes Connect提交IAP商品信息時,咱們定的價格只須要選擇對應的Price Tier,蘋果的AppStore會根據特定的貨幣單位轉換成對應的值。orm

在應用客戶端裏,商品信息經過向AppStore發起SKProductsRequest得到。每個商品的價格等由一個SKProduct對象來維護,其中有兩個重要屬性:htm

  • price,一個NSDecimalNumber類對象
  • priceLocale,一個NSLocale對象,表示地區信息,和price的數值對應;這裏麪包含的東西就多了,其中包括一個貨幣單位

一個商品,好比設置了Tier1,那麼若是他在美國AppStore發佈,即用戶帳號是在美國AppStore登陸,則獲得的price是0.99,單位是USD;而若是在中國大陸,則是6,單位CNY。關於貨幣單位,這其中有幾種辦法,能夠經過localeIdentifier方法來獲取,也能夠經過key-value的方式獲取到。對象

若是須要在付款時給用戶提示,顯示的字符串能夠這樣拼湊:ip

//就這裏。ci

NSNumberFormatter*numberFormatter = [[NSNumberFormatteralloc] init];

[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];

[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

[numberFormatter setLocale:product.priceLocale];

NSString*formattedPrice = [numberFormatter stringFromNumber:product.price];//例如 ¥12.00

 

這也是蘋果官方文檔給出的示例代碼。其中主要是使用了NSNumberFormatter類,behavior是和操做系統版本有關的參數,style則是顯示NSDecimalNumber時的格式,除了CurrencyStyle這個常量還有百分號、科學計數法等風格,讀者能夠本身嘗試,locale則決定了CurrencyStyle下的貨幣單位符號,並且僅僅是符號。注意一點,NSNumberFormatter不會根據單位和匯率給你作貨幣數值轉換的工做,若是須要轉成統一貨幣,那要本身根據實時匯率作轉換計算嘍。文檔

除了貨幣單位,每一個商品能夠在iTunesConnect上配置本地化/國際化的名稱和描述信息,這裏就很少說了。

有關貨幣單位,能夠參看蘋果的支付協議文檔或App Store Pricing Matrix,也能夠參看ISO 4217上的內容:

ISO4217(維基百科)

相關文章
相關標籤/搜索