はじめまして、モバイル開発者のヨウと申します。
先日、MeltingHackが主催するハッカソンに参加する機会がありました。とても貴重な体験ができたので、ここでその経験を共有させていただきます。
ハッカソンに参加するのは今回が初めてだったため、最初は非常に緊張していました。しかし、スタッフの皆さんがとても親切で、わかりやすい日本語と英語でサポートしてくださったおかげで、すぐに不安は消え、イベントを楽しむことができました。
チームメンバーだけでなく、他のチームの参加者とも交流することができ、良い刺激をたくさん受けました。
RevenueCat SDKをiOSアプリに導入してみた。
-
Swift Package Managerを使用してRevenueCat SDKを追加する
-
Apple ConnectコンソルでSubscription Productを作成する
-
作ったProductのKey を Revunue Cat プロジェクトのProductと連携する
revuenue cat sdk の初期化
init() {
Purchases.logLevel = .debug
Purchases.configure(withAPIKey: <revenuecat_project_apple_api_key>, appUserID: <app_user_id>)
}
OfferingsのVMを作成する
class OfferingsViewModel: ObservableObject {
@Published private(set) var availablePackages: [Package] = []
@Published private(set) var isLoading = true
@Published private(set) var errorMessage: String?
@Published var alertItem: AlertItem?
func fetchOfferings() {
Purchases.shared.getOfferings { [weak self] (offerings, error) in
DispatchQueue.main.async {
self?.isLoading = false
if let error = error {
self?.errorMessage = "Failed to fetch offerings: \(error.localizedDescription)"
return
}
self?.availablePackages = offerings?.current?.availablePackages ?? []
}
}
}
Viewに表示してみる
struct OfferingsView: View {
@StateObject private var viewModel = OfferingsViewModel()
var body: some View {
VStack {
if viewModel.isLoading {
ProgressView("Loading Packages...")
} else if viewModel.errorMessage != nil {
ErrorView(message: viewModel.errorMessage!)
} else {
PackageListView(packages: viewModel.availablePackages, onSelect: viewModel.purchase)
}
}
.onAppear(perform: viewModel.fetchOfferings)
.alert(item: $viewModel.alertItem) { alertItem in
Alert(title: Text(alertItem.title),
message: Text(alertItem.message),
dismissButton: .default(Text("OK")))
}
}
}
Apple Connect Subscriptionに作成したプロダクトが表示できました!
結論
RevenueCat SDKは、iOSアプリにおけるサブスクリプション管理において非常に優れたツールであることがわかりました。初めての導入もスムーズで直感的で、今回のプロジェクトにも使いたいと思います。