StoreKitで取得した製品情報から価格を表示する(Swift)

StoreKitで取得した製品情報から価格を表示する(Swift)

検証環境

  • Swift 2.2
  • XCode 7.3

iOSでIn App Purchase(アプリ内課金)を実装する際に価格をApp Storeから取得して表示する必要がでてきたので、ローカライズされた金額をフォーマットするProtocol Extensionを書いてみました。

課金の金額は設定されているロケールとも違うため、App Storeによって返されるロケールと通貨を使用して価格を明示する必要があります。
そのあたりはAppleのSotreKitGuideにも書いてあります。

StoreKitGuide
https://developer.apple.com/jp/documentation/StoreKitGuide.pdf

課金アイテムの製品情報をあらわすSKProductには、localizedDescriptionや
localizedTitleなどの説明とかタイトルの文字列を取得するプロパティはあるのですが、
価格は数値とロケールに分かれていたのでそのまま表示するというわけにはいかないようです。

    @available(iOS 3.0, *)
    public var localizedDescription: String { get }
    
    @available(iOS 3.0, *)
    public var localizedTitle: String { get }
    
    @available(iOS 3.0, *)
    public var price: NSDecimalNumber { get }

    @available(iOS 3.0, *)
    public var priceLocale: NSLocale { get }

実装

以下の実装が金額の文字列を取得するProtocol Extensionです

import Foundation
import StoreKit

extension SKProduct {
    func localizedPrice() -> String {
        let numberFormatter = NSNumberFormatter()
        numberFormatter.formatterBehavior = .Behavior10_4
        numberFormatter.numberStyle = .CurrencyStyle
        numberFormatter.locale = priceLocale
        return numberFormatter.stringFromNumber(price)!
    }
}

使用例

var product = SKProduct() // 実際には取得したSKProductが入ります
product.localizedPrice()

TAG

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。