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

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

ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã¸ã®Adaptyã®çµ±åˆæ–¹æ³•を説明ã—ã¾ã™ã€‚Adapty SDKãŒãƒ—ロダクトã®å–å¾—ã€æ–°è¦è³¼å…¥ã®å‡¦ç†ã€éŽåŽ»ã®è³¼å…¥ã®å¾©å…ƒã‚’担当ã—ãªãŒã‚‰ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®å®Ÿè£…を完全ã«ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã§ãã¾ã™ã€‚ã“ã®ã‚¬ã‚¤ãƒ‰ã¯Adapty Capacitor 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 メソッドを使ã£ã¦ã€ã“ã®ãƒ•ローã®ãƒ—ロダクトé…列をå–å¾—ã—ã¾ã™ã€‚

async function loadPaywall() {
  try {
    const flow: AdaptyFlow = await adapty.getFlow({
      placementId: 'YOUR_PLACEMENT_ID'
    });

    const products: AdaptyPaywallProduct[] = await adapty.getPaywallProducts({
      flow
    });

    // Use products to build your custom paywall UI
  } catch (error) {
    // Handle the error
  }
}

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

ユーザーãŒã‚«ã‚¹ã‚¿ãƒ ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ä¸Šã®ãƒ—ロダクトをタップã—ãŸã‚‰ã€é¸æŠžã•れãŸãƒ—ロダクト㧠makePurchase メソッドを呼ã³å‡ºã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šè³¼å…¥ãƒ•ローãŒå‡¦ç†ã•ã‚Œã€æ›´æ–°ã•れãŸãƒ—ロファイルãŒè¿”ã•れã¾ã™ã€‚


async function purchaseProduct(product: AdaptyPaywallProduct) {
  try {
    const result: AdaptyPurchaseResult = await adapty.makePurchase({ product });

    if (result.type === 'success') {
      // Purchase successful, profile updated
    } else if (result.type === 'user_cancelled') {
      // User canceled the purchase
    } else if (result.type === 'pending') {
      // Purchase is pending (e.g., user will pay offline with cash)
    }
  } catch (error) {
    // Handle the error
  }
}

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

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

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


async function restorePurchases() {
  try {
    const profile: AdaptyProfile = await adapty.restorePurchases();
    // Restore successful, profile updated
  } catch (error) {
    // Handle the error
  }
}

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

購入ã¾ãŸã¯ãƒªã‚¹ãƒˆã‚¢å¾Œã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ã‹æœ‰æ–™æ©Ÿèƒ½ã‚’アンロックã™ã‚‹ã‹ã‚’判断ã™ã‚‹ãŸã‚ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ¬ãƒ™ãƒ«ã‚’確èªã—ã¦ãã ã•ã„。makePurchase ãŠã‚ˆã³ restorePurchases メソッドã¯ã™ã§ã«æ›´æ–°æ¸ˆã¿ã®ãƒ—ロファイルを返ã—ã¾ã™ãŒã€ã‚¢ãƒ—リ内ã®ä»–ã®å ´æ‰€ã§ç¾åœ¨ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãŒå¿…è¦ãªå ´åˆã¯ getProfile メソッドを使用ã—ã¦ãã ã•ã„。


async function hasPremiumAccess(): Promise<boolean> {
  try {
    const profile = await adapty.getProfile();
    return profile.accessLevels?.['premium']?.isActive ?? false;
  } catch (error) {
    // Handle the error
  }
  return false;
}

サブスクリプションã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªãƒ»ç›£è¦–ã™ã‚‹æ–¹æ³•ï¼ˆãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ ã®æ›´æ–°ã‚’å—ã‘å–る方法をå«ã‚€ï¼‰ã«ã¤ã„ã¦ã¯ã€ã‚µãƒ–スクリプションã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã™ã‚‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

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

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

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

ÿÿÿÿ