1. 程式人生 > >iOS In-App Purchase中涉及到的貨幣單位

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

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

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

現在iOS的AppStore上各類應用非常豐富,有付費的也有免費的,而免費的應用也可以支援IAP (In-App Purchase,應用內支付) 。 對於應用內支付,我們有時候希望對使用者的支付行為進行記錄,甚至通過記錄支付過程進行記賬,那在這個過程中使用者支付所使用的貨幣型別是我們需要考慮的一個問題,這裡我整理一下。

做過iOS釋出的朋友應該都知道,我們在iTunes Connect上釋出一款應用的時候會選擇釋出的國家/地區。這實際上也就是說我們在不同國家地區的AppStore上,可下載安裝的應用是不同的,而且這與使用者的Apple ID賬號有關。

所以,本文的問題主要是針對多地區釋出的,如果你的應用只在中國大陸釋出,而不考慮港、澳、臺及其他國家和地區,應用收費只需要關注人民幣就可以了。

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

在應用客戶端裡,商品資訊通過向AppStore發起SKProductsRequest獲得。每一個商品的價格等由一個SKProduct物件來維護,其中有兩個重要屬性:

  • price,一個NSDecimalNumber類物件
  • priceLocale,一個NSLocale物件,表示地區資訊,和price的數值對應;這裡麵包含的東西就多了,其中包括一個貨幣單位

一個商品,比如設定了Tier1,那麼如果他在美國AppStore釋出,即使用者賬號是在美國AppStore登入,則得到的price是0.99,單位是USD;而如果在中國大陸,則是6,單位CNY。關於貨幣單位,這其中有幾種辦法,可以通過localeIdentifier方法來獲取,也可以通過key-value的方式獲取到。

如果需要在付款時給使用者提示,顯示的字串可以這樣拼湊:

//就這裡。

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(維基百科)