ÿÿ Adapty クイックスタートガイド | Adapty ドキュメント

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. プロダクトをå–å¾—ã™ã‚‹

カスタムペイウォール用ã®ãƒ—ロダクトをå–å¾—ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®æ‰‹é †ã‚’行ã„ã¾ã™ã€‚

  1. プレースメント ID ã‚’ getFlow ãƒ¡ã‚½ãƒƒãƒ‰ã«æ¸¡ã—㦠flow オブジェクトをå–å¾—ã™ã‚‹ã€‚
  2. 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 ã‚’ã”覧ãã ã•ã„。購入処ç†ã®ã‚¨ãƒ©ãƒ¼ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã‚„状態管ç†ã®å®Ÿè£…方法ãŒç¢ºèªã§ãã¾ã™ã€‚

ÿÿÿÿ