Kotlin Multiplatform SDKのカスタムペイウォールで購入機能を有効にする
このガイドでは、カスタムペイウォールへのAdaptyの統合方法について説明します。ペイウォールの実装を完全に制御しながら、Adapty SDKがプロダクトの取得、新規購入の処理、および以前の購入の復元を行います。このガイドはAdapty Kotlin Multiplatform SDK v4(ベータ版)APIを使用しています。v3をお使いの場合は、対応するメソッド名については移行ガイドを参照してください。
このガイドは、カスタムペイウォールを実装する開発者向けです。 購入機能を最も簡単に有効にしたい場合は、Adapty Flow Builderをご利用ください。Flow Builder を使えば、ノーコードのビジュアルエディターでフローを作成でき、購入ロジックはすべて Adapty が自動的に処理します。また、アプリを再公開することなく、さまざまなデザインをテストできます。
始める前に
プロダクトを設定する
アプリ内課金を有効にするには、3つの重要な概念を理解する必要があります。
- プロダクト – ユーザーが購入できるもの(サブスクリプション、消耗型アイテム、永続アクセス)
- ペイウォール – どのプロダクトを提供するかを定義する設定。Adapty では、プロダクトを取得する唯一の方法がペイウォールです。この設計により、アプリのコードを変更することなく、プロダクト・価格・オファーを変更できます。SDK v4 では、プレースメントのペイウォールバリアントは flow オブジェクトによって管理されます。フローを取得してそのプロダクトを参照する形になります。
- プレースメント – アプリ内でペイウォールを表示する場所とタイミング(
main、onboarding、settingsなど)。ダッシュボードでプレースメントにペイウォールを設定し、コード内ではプレースメント ID を指定してリクエストします。これにより、A/B テストの実施や、ユーザーごとに異なるペイウォールの表示が簡単に行えます。
Make sure you understand these concepts even if you work with your custom paywall. Basically, they are just your way to manage the products you sell in your app.
カスタムペイウォールを実装するには、ペイウォールを作成してプレースメントに追加する必要があります。この設定によってプロダクトを取得できるようになります。ダッシュボードで何をすればよいかを理解するには、クイックスタートガイドこちらを参照してください。
ユーザーの管理
バックエンド認証の有無にかかわらず、Adapty を利用できます。
ただし、Adapty SDK は匿名ユーザーと識別済みユーザーを異なる方法で処理します。詳細を理解し、ユーザーを適切に管理するために、識別クイックスタートガイドをご覧ください。
ステップ 1. プロダクトを取得する
カスタムペイウォール用のプロダクトを取得するには、以下の手順を行います。
- プレースメント ID を
getFlowメソッドに渡してflowオブジェクトを取得する。 getPaywallProductsメソッドを使用して、このフローのプロダクト配列を取得する。
fun loadPaywall() {
Adapty.getFlow(placementId = "YOUR_PLACEMENT_ID")
.onSuccess { flow ->
Adapty.getPaywallProducts(flow = flow)
.onSuccess { products ->
// Use products to build your custom paywall UI
}
.onError { error ->
// Handle the error
}
}
.onError { error ->
// Handle the error
}
}
ステップ 2. 購入を受け付ける
ユーザーがカスタムペイウォール上のプロダクトをタップしたら、選択されたプロダクトを引数に makePurchase メソッドを呼び出してください。これにより購入フローが処理され、更新されたプロファイルが返されます。
fun purchaseProduct(product: AdaptyPaywallProduct) {
Adapty.makePurchase(product = product)
.onSuccess { purchaseResult ->
when (purchaseResult) {
is AdaptyPurchaseResult.Success -> {
val profile = purchaseResult.profile
// Purchase successful, profile updated
}
is AdaptyPurchaseResult.UserCanceled -> {
// User canceled the purchase
}
is AdaptyPurchaseResult.Pending -> {
// Purchase is pending (e.g., user will pay offline with cash)
}
}
}
.onError { error ->
// Handle the error
}
}
ステップ 3. 購入の復元
アプリストアでは、サブスクリプションを提供するすべてのアプリに対して、ユーザーが購入を復元できる手段を設けることを求めています。
ユーザーが復元ボタンをタップしたときに restorePurchases メソッドを呼び出してください。これにより、購入履歴が Adapty と同期され、更新されたプロファイルが返されます。
fun restorePurchases() {
Adapty.restorePurchases()
.onSuccess { profile ->
// Restore successful, profile updated
}
.onError { error ->
// Handle the error
}
}
ステップ 4. サブスクリプションのステータスを確認する
購入またはリストア後は、ペイウォールを表示するか有料機能を解放するかを判断するために、ユーザーのアクセスレベルを確認します。makePurchase メソッドと restorePurchases メソッドはすでに更新済みのプロファイルを返しますが、アプリ内の他の場所で現在のステータスが必要な場合は getProfile メソッドを使用してください:
fun checkPremiumAccess() {
Adapty.getProfile()
.onSuccess { profile ->
val hasPremiumAccess = profile.accessLevels["premium"]?.isActive == true
// Grant access to paid features if hasPremiumAccess is true
}
.onError { error ->
// Handle the error
}
}
サブスクリプションのステータスを確認・監視する方法(リアルタイム更新のリスニングを含む)については、サブスクリプションのステータスを確認するを参照してください。
次のステップ
ご質問やお困りのことがあれば、サポートフォーラムをご覧ください。よくある質問への回答を見つけたり、ご自身の質問を投稿することができます。チームとコミュニティがサポートいたします!
ペイウォールをアプリに表示する準備ができました。App Store サンドボックスまたはGoogle Play ストアでテスト購入を行い、ペイウォールからの購入が正常に完了することを確認してください。本番環境に近い実装例を確認するには、サンプルアプリの AppViewModel.kt をご覧ください。購入処理のエラーハンドリングや状態管理の実装方法が確認できます。