はじめに
現在作成しているアプリにアプリ内課金を導入していて、通貨によって表示を出しわけする方法が見つからなかったので記録しておきます。
以下の記事を参考に実装をしています。
やりかた
ContentView
import SwiftUI
struct ContentView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
VStack {
let price = viewModel.product?.price ?? 0
let priceFormatStyle = viewModel.product?.priceFormatStyle ?? Decimal.FormatStyle.Currency(code: "JPY")
Text(price, format: priceFormatStyle)
}
.task {
guard let product = try? await viewModel.fetchProducts("ここにProductIDを入力する").first else { return }
viewModel.product = product
}
}
}
ViewModel
import StoreKit
final class ViewModel: ObservableObject {
@Published var product: Product?
func fetchProducts(_ productId: String) async throws -> [Product] {
let products = try await Product.products(for: [productId])
return products
}
}
完成
AppStoreの言語設定によって表示が変わります(たぶん)
私は以下のようにSandboxテスターで2アカウント作成して、アカウントを切り替えることによって表示言語が切り替わることを確認しました。
日本 | アメリカ |
---|---|
![]() |
![]() |
おわり
リリース前に課金周りは入念に確認しておきたいです。