2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めてのハッカソン体験とRevenueCat SDKの導入体験

Last updated at Posted at 2024-09-19

はじめまして、モバイル開発者のヨウと申します。

先日、MeltingHackが主催するハッカソンに参加する機会がありました。とても貴重な体験ができたので、ここでその経験を共有させていただきます。

ハッカソンに参加するのは今回が初めてだったため、最初は非常に緊張していました。しかし、スタッフの皆さんがとても親切で、わかりやすい日本語と英語でサポートしてくださったおかげで、すぐに不安は消え、イベントを楽しむことができました。

チームメンバーだけでなく、他のチームの参加者とも交流することができ、良い刺激をたくさん受けました。
1726488850786.jpeg

RevenueCat SDKをiOSアプリに導入してみた。

  1. Swift Package Managerを使用してRevenueCat SDKを追加する

  2. Apple ConnectコンソルでSubscription Productを作成する

    2.1 サブスク表示名の多言語対応を作成する
    image.png

  3. 作ったProductのKey を Revunue Cat プロジェクトのProductと連携する

  4. Revunue Cat プロジェクトにOfferings(すべてのProducts)、entitlementを作る
    image.png

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に作成したプロダクトが表示できました!
Simulator Screenshot - iPhone 15 Pro - 2024-09-20 at 12.15.56.png

結論
RevenueCat SDKは、iOSアプリにおけるサブスクリプション管理において非常に優れたツールであることがわかりました。初めての導入もスムーズで直感的で、今回のプロジェクトにも使いたいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?