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

Flutter SDKã®ã‚«ã‚¹ã‚¿ãƒ ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã§è³¼å…¥ã‚’有効ã«ã™ã‚‹

ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã¸ã®Adaptyçµ±åˆæ–¹æ³•を説明ã—ã¾ã™ã€‚ペイウォールã®å®Ÿè£…を完全ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã—ãªãŒã‚‰ã€Adapty SDKãŒãƒ—ロダクトã®å–å¾—ã€æ–°è¦è³¼å…¥ã®å‡¦ç†ã€éŽåŽ»ã®è³¼å…¥ã®å¾©å…ƒã‚’担当ã—ã¾ã™ã€‚ã“ã®ã‚¬ã‚¤ãƒ‰ã¯Adapty Flutter SDK v4ã®APIを使用ã—ã¦ã„ã¾ã™ã€‚v3ã‚’ãŠä½¿ã„ã®å ´åˆã¯ã€å¯¾å¿œã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰åã«ã¤ã„ã¦ãƒžã‚¤ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¬ã‚¤ãƒ‰ã‚’ã”å‚ç…§ãã ã•ã„。

ã“ã®ã‚¬ã‚¤ãƒ‰ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’実装ã™ã‚‹é–‹ç™ºè€…å‘ã‘ã§ã™ã€‚ 最も簡å˜ã«è³¼å…¥æ©Ÿèƒ½ã‚’有効ã«ã—ãŸã„å ´åˆã¯ã€Adapty ペイウォールビルダーをã”利用ãã ã•ã„。ペイウォールビルダーを使ãˆã°ã€ãƒŽãƒ¼ã‚³ãƒ¼ãƒ‰ã®ãƒ“ジュアルエディターã§ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’作æˆã§ãã€è³¼å…¥ãƒ­ã‚¸ãƒƒã‚¯ã¯ã™ã¹ã¦ Adapty ãŒè‡ªå‹•ã§å‡¦ç†ã—ã¾ã™ã€‚ã¾ãŸã€ã‚¢ãƒ—リをå†å…¬é–‹ã™ã‚‹ã“ã¨ãªãç•°ãªã‚‹ãƒ‡ã‚¶ã‚¤ãƒ³ã‚’テストã§ãã¾ã™ã€‚

å§‹ã‚ã‚‹å‰ã«

プロダクトã®è¨­å®š

アプリ内課金を有効ã«ã™ã‚‹ã«ã¯ã€3ã¤ã®é‡è¦ãªæ¦‚念をç†è§£ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

  • プロダクト – ユーザーãŒè³¼å…¥ã§ãã‚‹ã‚‚ã®ï¼ˆã‚µãƒ–ã‚¹ã‚¯ãƒªãƒ—ã‚·ãƒ§ãƒ³ã€æ¶ˆè€—åž‹ã‚¢ã‚¤ãƒ†ãƒ ã€æ°¸ç¶šã‚¢ã‚¯ã‚»ã‚¹ãªã©ï¼‰
  • ペイウォール – ã©ã®ãƒ—ロダクトをæç¤ºã™ã‚‹ã‹ã‚’定義ã™ã‚‹è¨­å®šã€‚Adapty ã§ã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’通ã˜ã¦ã®ã¿ãƒ—ロダクトをå–å¾—ã§ãã¾ã™ã€‚ã“ã®è¨­è¨ˆã«ã‚ˆã‚Šã€ã‚¢ãƒ—リã®ã‚³ãƒ¼ãƒ‰ã‚’変更ã›ãšã«ãƒ—ロダクト・価格・オファーを更新ã§ãã¾ã™ã€‚SDK v4 ã§ã¯ã€ãƒ—レースメントã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®ãƒãƒªã‚¢ãƒ³ãƒˆã¯ flow オブジェクトã§ç®¡ç†ã•れã¾ã™ã€‚flow ã‚’å–å¾—ã—ã¦ãƒ—ロダクトをå‚ç…§ã—ã¾ã™ã€‚
  • プレースメント – アプリ内ã§ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹å ´æ‰€ã‚„タイミング(mainã€onboardingã€settings ãªã©ï¼‰ã€‚ダッシュボードã§ãƒ—レースメントã«ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’設定ã—ã€ã‚³ãƒ¼ãƒ‰ã‹ã‚‰ãƒ—レースメント ID ã§å‘¼ã³å‡ºã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Š A/B テストã®å®Ÿæ–½ã‚„ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã”ã¨ã«ç•°ãªã‚‹ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®è¡¨ç¤ºãŒç°¡å˜ã«è¡Œãˆã¾ã™ã€‚ ã“れらã®ã‚³ãƒ³ã‚»ãƒ—トã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’使用ã™ã‚‹å ´åˆã§ã‚‚å¿…ãšç†è§£ã—ã¦ãŠã„ã¦ãã ã•ã„。基本的ã«ã€ã“れらã¯ã‚¢ãƒ—リã§è²©å£²ã™ã‚‹ãƒ—ロダクトを管ç†ã™ã‚‹ãŸã‚ã®ä»•組ã¿ã§ã™ã€‚

カスタムペイウォールを実装ã™ã‚‹ã«ã¯ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’作æˆã—ã¦ãƒ—レースメントã«è¿½åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®è¨­å®šã«ã‚ˆã£ã¦ã€ãƒ—ロダクトをå–å¾—ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ダッシュボードã§ã®æ“作手順ã«ã¤ã„ã¦ã¯ã€ã“ã¡ã‚‰ã®ã‚¯ã‚¤ãƒƒã‚¯ã‚¹ã‚¿ãƒ¼ãƒˆã‚¬ã‚¤ãƒ‰ã‚’ã”覧ãã ã•ã„。

ユーザーを管ç†ã™ã‚‹

ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰èªè¨¼ã®æœ‰ç„¡ã«é–¢ã‚らãšã€ã©ã¡ã‚‰ã®æ–¹æ³•ã§ã‚‚利用ã§ãã¾ã™ã€‚

ãŸã ã—ã€Adapty SDK ã¯åŒ¿åユーザーã¨è­˜åˆ¥æ¸ˆã¿ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ç•°ãªã‚‹æ–¹æ³•ã§æ‰±ã„ã¾ã™ã€‚詳細をç†è§£ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’é©åˆ‡ã«ç®¡ç†ã™ã‚‹ãŸã‚ã«ã€è­˜åˆ¥ã‚¯ã‚¤ãƒƒã‚¯ã‚¹ã‚¿ãƒ¼ãƒˆã‚¬ã‚¤ãƒ‰ ã‚’ã”覧ãã ã•ã„。

ステップ 1. プロダクトをå–å¾—ã™ã‚‹

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

  1. プレースメント ID ã‚’ getFlow ãƒ¡ã‚½ãƒƒãƒ‰ã«æ¸¡ã—ã¦ã€flow オブジェクトをå–å¾—ã—ã¾ã™ã€‚
  2. getPaywallProducts メソッドを使用ã—ã¦ã€ã“ã®ãƒ•ローã®ãƒ—ロダクトé…列をå–å¾—ã—ã¾ã™ã€‚

Future<void> loadPaywall() async {
  try {
    final flow = await Adapty().getFlow(placementId: 'YOUR_PLACEMENT_ID');
    final products = await Adapty().getPaywallProducts(flow: flow);
    
    // Use products to build your custom paywall UI
  } on AdaptyError catch (adaptyError) {
    // Handle the error
  } catch (e) {
    // Handle the error
  }
}

ステップ 2. 購入をå—ã‘付ã‘ã‚‹

カスタムペイウォールã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ—ロダクトをタップã—ãŸã‚‰ã€é¸æŠžã—ãŸãƒ—ロダクトを引数ã¨ã—㦠makePurchase メソッドを呼ã³å‡ºã—ã¦ãã ã•ã„。ã“れã«ã‚ˆã‚Šè³¼å…¥ãƒ•ローãŒå‡¦ç†ã•ã‚Œã€æ›´æ–°ã•れãŸãƒ—ロファイルãŒè¿”ã•れã¾ã™ã€‚


Future<void> purchaseProduct(AdaptyPaywallProduct product) async {
  try {
    final purchaseResult = await Adapty().makePurchase(product: product);
    
    switch (purchaseResult) {
      case AdaptyPurchaseResultSuccess(profile: final profile):
        // Purchase successful, profile updated
        break;
      case AdaptyPurchaseResultUserCancelled():
        // User canceled the purchase
        break;
      case AdaptyPurchaseResultPending():
        // Purchase is pending (e.g., user will pay offline with cash)
        break;
    }
  } on AdaptyError catch (adaptyError) {
    // Handle the error
  } catch (e) {
    // Handle the error
  }
}

ステップ3. 購入を復元ã™ã‚‹

アプリストアã§ã¯ã€ã‚µãƒ–スクリプションをæä¾›ã™ã‚‹ã™ã¹ã¦ã®ã‚¢ãƒ—リã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè³¼å…¥ã‚’復元ã§ãる手段を設ã‘ã‚‹ã“ã¨ã‚’義務付ã‘ã¦ã„ã¾ã™ã€‚

ユーザーãŒå¾©å…ƒãƒœã‚¿ãƒ³ã‚’タップã—ãŸã¨ãã« restorePurchases メソッドを呼ã³å‡ºã—ã¦ãã ã•ã„。ã“れã«ã‚ˆã‚Šè³¼å…¥å±¥æ­´ãŒ Adapty ã¨åŒæœŸã•ã‚Œã€æ›´æ–°ã•れãŸãƒ—ロファイルãŒè¿”ã•れã¾ã™ã€‚


Future<void> restorePurchases() async {
  try {
    final profile = await Adapty().restorePurchases();
    // Restore successful, profile updated
  } on AdaptyError catch (adaptyError) {
    // Handle the error
  } catch (e) {
    // Handle the error
  }
}

ステップ 4. サブスクリプションã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã™ã‚‹

購入やリストアã®å¾Œã€ã‚¢ã‚¯ã‚»ã‚¹ãƒ¬ãƒ™ãƒ«ã‚’確èªã—ã¦ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ã‹æœ‰æ–™æ©Ÿèƒ½ã‚’解放ã™ã‚‹ã‹ã‚’決定ã—ã¾ã™ã€‚makePurchase メソッド㨠restorePurchases メソッドã¯ã™ã§ã«æ›´æ–°ã•れãŸãƒ—ロファイルを返ã—ã¾ã™ãŒã€ã‚¢ãƒ—リã®ä»–ã®å ´æ‰€ã§ç¾åœ¨ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãŒå¿…è¦ãªå ´åˆã¯ã€getProfile メソッドを使用ã—ã¦ãã ã•ã„。


Future<bool> hasPremiumAccess() async {
  try {
    final profile = await Adapty().getProfile();
    return profile.accessLevels['premium']?.isActive ?? false;
  ÿÿ} on AdaptyError catch (adaptyError) {
    // Handle the error
  } catch (e) {
    // Handle the error
  }
  return false;
}

サブスクリプションステータスã®ç¢ºèªæ–¹æ³•やリアルタイム更新ã®ãƒªã‚¹ãƒ‹ãƒ³ã‚°ãªã©ã€è©³ç´°ã«ã¤ã„ã¦ã¯ã‚µãƒ–スクリプションステータスã®ç¢ºèªã‚’ã”覧ãã ã•ã„。

次ã®ã‚¹ãƒ†ãƒƒãƒ—

ã”質å•ã‚„ãŠå›°ã‚Šã®ã“ã¨ãŒã‚れã°ã€ã‚µãƒãƒ¼ãƒˆãƒ•ォーラムをã”覧ãã ã•ã„。よãã‚る質å•ã¸ã®å›žç­”を見ã¤ã‘ãŸã‚Šã€ã”自身ã®è³ªå•を投稿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒãƒ¼ãƒ ã¨ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒã‚µãƒãƒ¼ãƒˆã„ãŸã—ã¾ã™ï¼

ペイウォールをアプリã«è¡¨ç¤ºã™ã‚‹æº–å‚™ãŒã§ãã¾ã—ãŸã€‚App Store サンドボックスã¾ãŸã¯ Google Play Store ã§ãƒ†ã‚¹ãƒˆè³¼å…¥ã‚’行ã„ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‹ã‚‰ãƒ†ã‚¹ãƒˆè³¼å…¥ã‚’完了ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。本番環境ã«è¿‘ã„実装例を確èªã—ãŸã„å ´åˆã¯ã€ã‚µãƒ³ãƒ—ルアプリ㮠PurchasesObserver ã‚’ã”覧ãã ã•ã„。エラーãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã€UI オブザーãƒãƒ¼ã€åŒ…括的㪠SDK インテグレーションをå«ã‚€è³¼å…¥å‡¦ç†ã®å®Ÿè£…例ãŒç¢ºèªã§ãã¾ã™ã€‚

ÿÿÿÿ