发表于 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
一个商品,好比设置了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上的内容: