ÿÿ Installing Adapty SDK in an Expo React Native project | Adapty Docs

Install & configure Adapty React Native SDK in an Expo project

ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€Expo プロジェクトã¸ã® Adapty React Native SDK ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨è¨­å®šã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚

**Pure React Native(Expo ãªã—)**を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»£ã‚り㫠React Native インストールガイド ã‚’ã”覧ãã ã•ã„。

Adapty SDK ã«ã¯ã€React Native アプリã«ã‚·ãƒ¼ãƒ ãƒ¬ã‚¹ã«çµ±åˆã™ã‚‹ãŸã‚ã® 2 ã¤ã®ä¸»è¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ï¼š

  • Core Adapty: ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚¢ãƒ—リ㧠Adapty ãŒæ­£å¸¸ã«å‹•作ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚
  • AdaptyUI: ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã‚¯ãƒ­ã‚¹ãƒ—ラットフォームã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’ç°¡å˜ã«ä½œæˆã§ãるノーコードツール「Adapty ペイウォールビルダーã€ã‚’使用ã™ã‚‹å ´åˆã«å¿…è¦ã§ã™ã€‚AdaptyUI ã¯ã‚³ã‚¢ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨åŒæ™‚ã«è‡ªå‹•çš„ã«æœ‰åŠ¹åŒ–ã•れã¾ã™ã€‚

React Native アプリã¸ã®ã‚¢ãƒ—リ内課金ã®å®Ÿè£…方法ã«ã¤ã„ã¦è©³ã—ã知りãŸã„å ´åˆã¯ã€ã“ã¡ã‚‰ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’ã”覧ãã ã•ã„。

Adapty SDKã‚’Expoアプリã«çµ±åˆã™ã‚‹å®Ÿéš›ã®ä¾‹ã‚’見ã¦ã¿ãŸã„ã§ã™ã‹ï¼Ÿã‚µãƒ³ãƒ—ルアプリをã”確èªãã ã•ã„:

完全ãªå®Ÿè£…ã®ã‚¦ã‚©ãƒ¼ã‚¯ã‚¹ãƒ«ãƒ¼ã¯ã€ä»¥ä¸‹ã®å‹•ç”»ã§ã‚‚ã”覧ã„ãŸã ã‘ã¾ã™ï¼š

è¦ä»¶

Adapty React Native SDK 㯠iOS 15.0+ ãŒå¿…è¦ã§ã™ã€‚

iOS å‘ã‘ã«ãƒ“ルドã™ã‚‹ã«ã¯ Swift 6.0 以é™ãŒå¿…è¦ã§ã™ã€‚キッズモードã«ã¯ Swift 6.1 以é™ãŒå¿…è¦ã§ã™ã€‚

SDK v3.17 以é™ã€Adapty SDK ã¯ãƒ‡ãƒ•ォルト㧠Google Play Billing Library v8.0.0 を使用ã—ã¾ã™ã€‚

SDKã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¯ã€Adaptyセットアップã®ã‚¹ãƒ†ãƒƒãƒ—5ã§ã™ã€‚アプリ内ã§èª²é‡‘ãŒæ©Ÿèƒ½ã™ã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€ã‚¢ãƒ—ãƒªã‚’ã‚¹ãƒˆã‚¢ã«æŽ¥ç¶šã—ã€Adapty ダッシュボードã§ãƒ—ロダクトã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã€ãƒ—レースメントを作æˆã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚クイックスタートガイドã§ã¯ã€å¿…è¦ãªã™ã¹ã¦ã®æ‰‹é †ã‚’説明ã—ã¦ã„ã¾ã™ã€‚

Adapty SDK ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«

v4 以é™ã€Adapty React Native SDK ã¯ãƒã‚¤ãƒ†ã‚£ãƒ–ä¾å­˜é–¢ä¿‚ã® CocoaPods インストールをサãƒãƒ¼ãƒˆã—ãªããªã‚Šã¾ã—ãŸã€‚v4 以é™ï¼ˆãƒ•ロービルダーå‘ã‘)ãŒå¿…è¦ãªå ´åˆã¯ã€ä»£ã‚りã«ä»¥ä¸‹ã® Adapty SDK 4.0: Swift Package Manager を有効ã«ã™ã‚‹ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

Release

Expo Dev Client(カスタム開発ビルド)ã¯ã€Expoプロジェクトã§Adaptyを使用ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚

Expo Goã¯ã‚«ã‚¹ã‚¿ãƒ ãƒã‚¤ãƒ†ã‚£ãƒ–モジュールをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãŸã‚ã€UI/ロジック開発用ã®ãƒ¢ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ã®ã¿ä½¿ç”¨ã§ãã¾ã™ï¼ˆå®Ÿéš›ã®è³¼å…¥ã‚„AdaptyUI/ペイウォールビルダーã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã¯ã‚りã¾ã›ã‚“)。

  1. Adapty SDKをインストールã—ã¾ã™ï¼ˆ@adapty/coreも自動的ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ï¼‰ï¼š
    npx expo install react-native-adapty
    npx expo prebuild
  2. EASã¾ãŸã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ“ルドを使用ã—ã¦ã€é–‹ç™ºç”¨ã‚¢ãƒ—リをビルドã—ã¾ã™ï¼š
  1. 開発サーãƒãƒ¼ã‚’èµ·å‹•ã—ã¾ã™:
    npx expo start --dev-client

Adapty SDK 4.0: Swift Package Manager を有効ã«ã™ã‚‹

React Native SDK 4.0 — フローBuilder サãƒãƒ¼ãƒˆã‚’追加 — 㯠React Native 0.75 ä»¥é™ ãŒå¿…è¦ã§ã™ã€‚SDK をインストールã—ã¾ã™:

npx expo install react-native-adapty@^4.0.0

v4ã¯CocoaPodsã®ã‚µãƒ–ä¾å­˜é–¢ä¿‚ã®ä»£ã‚りã«ã€Swift Package Manager経由ã§ãƒã‚¤ãƒ†ã‚£ãƒ–iOS SDK(Adaptyã€AdaptyUIã€AdaptyPlugin)をå–å¾—ã—ã¾ã™ï¼ˆCocoaPodsã®specリãƒã‚¸ãƒˆãƒªã¯2026å¹´12月ã«èª­ã¿å–り専用ã«ãªã‚Šã¾ã™ï¼‰ã€‚SPMã¯ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ãƒ•レームワークを必è¦ã¨ã™ã‚‹ãŸã‚ã€Expoã§ã¯expo-build-propertiesãƒ—ãƒ©ã‚°ã‚¤ãƒ³ã§æœ‰åйã«ã—ã¾ã™ã€‚app.json(ã¾ãŸã¯app.config.js)ã«è¿½åŠ ã—ã¦ãã ã•ã„:

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "ios": {
            "useFrameworks": "dynamic"
          }
        }
      ]
    ]
  }
}

次ã«ã€ãƒ—ラグインをインストールã—ã¦ãƒã‚¤ãƒ†ã‚£ãƒ–プロジェクトをå†ç”Ÿæˆã—ã¾ã™:

npx expo install expo-build-properties
npx expo prebuild --clean

詳細ãªç§»è¡Œæ‰‹é †ã«ã¤ã„ã¦ã¯ã€Adapty React Native SDK ã‚’ v4 ã¸ç§»è¡Œã™ã‚‹ ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

Adapty SDK ã® Adapty モジュールを有効化ã™ã‚‹

Public SDK Key ã‚’å–å¾—ã™ã‚‹ã«ã¯ï¼š

  1. Adapty ダッシュボードを開ãã€App settings → General ã«ç§»å‹•ã—ã¾ã™ã€‚
  2. Api keys セクションã§ã€Public SDK Key(Secret Key ã§ã¯ãªã„)をコピーã—ã¾ã™ã€‚
  3. コード内㮠"YOUR_PUBLIC_SDK_KEY" ã‚’ç½®ãæ›ãˆã¾ã™ã€‚

ã¾ãŸã¯ã€Adapty CLI を使ã£ã¦ãƒ—ログラムã‹ã‚‰å–å¾—ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼š

npm install -g adapty
adapty auth login
adapty apps list

ã‚ã‚‹ã„ã¯ã€ç›´æŽ¥å®Ÿè¡Œã™ã‚‹å ´åˆï¼š

npx adapty auth login
adapty apps list
  • Adapty ã®åˆæœŸåŒ–ã«ã¯å¿…ãš Public SDK key を使用ã—ã¦ãã ã•ã„。Secret key ã¯ã‚µãƒ¼ãƒãƒ¼ã‚µã‚¤ãƒ‰ API 専用ã§ã™ã€‚
  • SDK keys ã¯ã‚¢ãƒ—リã”ã¨ã«å›ºæœ‰ã§ã™ã€‚複数ã®ã‚¢ãƒ—リãŒã‚ã‚‹å ´åˆã¯ã€æ­£ã—ã„ã‚­ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。

App.tsx ã«ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã‚’コピーã—㦠Adapty を有効化ã—ã¾ã™ï¼š


adapty.activate('YOUR_PUBLIC_SDK_KEY');

activate ãŒè§£æ±ºã™ã‚‹ã¾ã§ã€ä»–ã® Adapty SDK メソッドを呼ã³å‡ºã•ãªã„ã§ãã ã•ã„。完全ãªé †åºã«ã¤ã„ã¦ã¯ React Native SDK ã®å‘¼ã³å‡ºã—é †åº ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

次ã«ã€ã‚¢ãƒ—リ内ã§ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’設定ã—ã¾ã™ï¼š

開発環境ã§ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã‚¨ãƒ©ãƒ¼ã‚’回é¿ã™ã‚‹ã«ã¯ã€ã“ã¡ã‚‰ã®ãƒ’ントをå‚ç…§ã—ã¦ãã ã•ã„。

AdaptyUI モジュールを有効化ã™ã‚‹

ペイウォールビルダーを使用ã™ã‚‹å ´åˆã¯ã€AdaptyUI モジュールãŒå¿…è¦ã§ã™ã€‚コアモジュールを有効化ã™ã‚‹ã¨è‡ªå‹•çš„ã«æœ‰åŠ¹åŒ–ã•れるãŸã‚ã€è¿½åŠ ã®æ“作ã¯ä¸è¦ã§ã™ã€‚

オプション設定

ログ

ログシステムã®è¨­å®š

Adapty ã¯ã‚¨ãƒ©ãƒ¼ã‚„ãã®ä»–ã®é‡è¦ãªæƒ…報をログã«è¨˜éŒ²ã—ã€çжæ³ã‚’把æ¡ã—ã‚„ã™ãã—ã¾ã™ã€‚以下ã®ãƒ­ã‚°ãƒ¬ãƒ™ãƒ«ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚

LevelDescription
errorエラーã®ã¿ãŒãƒ­ã‚°ã«è¨˜éŒ²ã•れã¾ã™
warnエラーãŠã‚ˆã³é‡å¤§ãªã‚¨ãƒ©ãƒ¼ã¯å¼•ãèµ·ã“ã•ãªã„ã‚‚ã®ã®æ³¨æ„ã™ã¹ãSDKã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒãƒ­ã‚°ã«è¨˜éŒ²ã•れã¾ã™
infoエラーã€è­¦å‘Šã€ãŠã‚ˆã³å„種情報メッセージãŒãƒ­ã‚°ã«è¨˜éŒ²ã•れã¾ã™
verbose関数呼ã³å‡ºã—ã€APIクエリãªã©ã€ãƒ‡ãƒãƒƒã‚°æ™‚ã«å½¹ç«‹ã¤å¯èƒ½æ€§ã®ã‚る追加情報ãŒã™ã¹ã¦ãƒ­ã‚°ã«è¨˜éŒ²ã•れã¾ã™
ログレベルã¯ã€Adapty ã®è¨­å®šå‰ã¾ãŸã¯è¨­å®šä¸­ã«ã‚¢ãƒ—ãƒªå†…ã§æŒ‡å®šã§ãã¾ã™ã€‚
// Set log level before activation
// 'verbose' is recommended for development and the first production release
adapty.setLogLevel('verbose');

// Or set it during configuration
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  logLevel: 'verbose',
});

データãƒãƒªã‚·ãƒ¼

Adaptyã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å€‹äººãƒ‡ãƒ¼ã‚¿ã‚’明示的ã«é€ä¿¡ã—ãªã„é™ã‚Šä¿å­˜ã—ã¾ã›ã‚“ãŒã€ã‚¹ãƒˆã‚¢ã‚„国ã®ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã«æº–æ‹ ã™ã‚‹ãŸã‚ã«è¿½åŠ ã®ãƒ‡ãƒ¼ã‚¿ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒãƒªã‚·ãƒ¼ã‚’実装ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

IPアドレスã®åŽé›†ã¨å…±æœ‰ã‚’無効ã«ã™ã‚‹

Adaptyモジュールをアクティベートã™ã‚‹éš›ã«ã€ipAddressCollectionDisabledã‚’trueã«è¨­å®šã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®IPアドレスã®åŽé›†ã¨å…±æœ‰ã‚’無効ã«ã§ãã¾ã™ã€‚デフォルト値ã¯falseã§ã™ã€‚ ã“ã®ãƒ‘ラメータを使用ã—ã¦ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ライãƒã‚·ãƒ¼ã‚’強化ã—ã€åœ°åŸŸã®ãƒ‡ãƒ¼ã‚¿ä¿è­·è¦åˆ¶ï¼ˆGDPRã‚„CCPAãªã©ï¼‰ã«æº–æ‹ ã—ã€IPãƒ™ãƒ¼ã‚¹ã®æ©Ÿèƒ½ãŒã‚¢ãƒ—リã«ä¸è¦ãªå ´åˆã«ä¸å¿…è¦ãªãƒ‡ãƒ¼ã‚¿åŽé›†ã‚’削減ã§ãã¾ã™ã€‚

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ipAddressCollectionDisabled: true,
});

広告IDã®åŽé›†ã¨å…±æœ‰ã‚’無効ã«ã™ã‚‹

Adapty モジュールを有効化ã™ã‚‹éš›ã€åºƒå‘Šè­˜åˆ¥å­ã®åŽé›†ã‚’無効ã«ã™ã‚‹ã«ã¯ã€iOS ã®å ´åˆã¯ ios.idfaCollectionDisabledã€Android ã®å ´åˆã¯ android.adIdCollectionDisabled ã‚’ true ã«è¨­å®šã—ã¦ãã ã•ã„。デフォルト値㯠false ã§ã™ã€‚

App Store / Play Store ã®ãƒãƒªã‚·ãƒ¼ã¸ã®æº–æ‹ ã€App Tracking Transparency プロンプトã®è¡¨ç¤ºå›žé¿ã€ã¾ãŸã¯åºƒå‘Š ID ã«åŸºã¥ãアトリビューションや分æžãŒã‚¢ãƒ—リã§ä¸è¦ãªå ´åˆã«ã€ã“ã®ãƒ‘ラメータを使用ã—ã¦ãã ã•ã„。

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ios: {
    idfaCollectionDisabled: true,
  },
  android: {
    adIdCollectionDisabled: true,
  },
});

AdaptyUI ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚­ãƒ£ãƒƒã‚·ãƒ¥è¨­å®š

デフォルトã§ã¯ã€AdaptyUI ã¯ãƒ‘フォーマンスå‘上ã¨ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä½¿ç”¨é‡ã®å‰Šæ¸›ã®ãŸã‚ã«ã€ç”»åƒã‚„å‹•ç”»ãªã©ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’キャッシュã—ã¾ã™ã€‚カスタム設定を指定ã™ã‚‹ã“ã¨ã§ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®å‹•作を変更ã§ãã¾ã™ã€‚

mediaCache を使用ã—ã¦ã€ãƒ‡ãƒ•ォルトã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥è¨­å®šã‚’上書ãã—ã¦ãã ã•ã„:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  mediaCache: {
    memoryStorageTotalCostLimit: 200 * 1024 * 1024, // Optional: memory cache size in bytes
    memoryStorageCountLimit: 2147483647,            // Optional: max number of items in memory
    diskStorageSizeLimit: 200 * 1024 * 1024,       // Optional: disk cache size in bytes
  },
});
パラメーター必須説明
memoryStorageTotalCostLimitä»»æ„メモリ上ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚µã‚¤ã‚ºï¼ˆãƒã‚¤ãƒˆå˜ä½ï¼‰ã€‚デフォルト値ã¯ãƒ—ラットフォームã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚
memoryStorageCountLimitä»»æ„メモリストレージã®ã‚¢ã‚¤ãƒ†ãƒ æ•°åˆ¶é™ã€‚デフォルト値ã¯ãƒ—ラットフォームã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚
diskStorageSizeLimitä»»æ„ディスク上ã®ãƒ•ァイルサイズ制é™ï¼ˆãƒã‚¤ãƒˆå˜ä½ï¼‰ã€‚デフォルト値ã¯ãƒ—ラットフォームã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚

ローカルアクセスレベルを有効ã«ã™ã‚‹ï¼ˆAndroid)

デフォルトã§ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ã‚¢ã‚¯ã‚»ã‚¹ãƒ¬ãƒ™ãƒ«ã¯ iOS ã§æœ‰åйã€Android ã§ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚Android ã§ã‚‚有効ã«ã™ã‚‹ã«ã¯ã€localAccessLevelAllowed ã‚’ true ã«è¨­å®šã—ã¦ãã ã•ã„:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  android: {
     localAccessLevelAllowed: true,
  },
});

ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—復元時ã®ãƒ‡ãƒ¼ã‚¿ã‚¯ãƒªã‚¢

clearDataOnBackup ã‚’ true ã«è¨­å®šã™ã‚‹ã¨ã€SDKã¯ã‚¢ãƒ—リãŒiCloudãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‹ã‚‰å¾©å…ƒã•れãŸã“ã¨ã‚’検出ã—ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れãŸãƒ—ロファイル情報ã€ãƒ—ロダクト詳細ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ãªã©ã€ãƒ­ãƒ¼ã‚«ãƒ«ã«ä¿å­˜ã•れãŸã™ã¹ã¦ã®SDKデータを削除ã—ã¾ã™ã€‚ãã®å¾Œã€SDKã¯ã‚¯ãƒªãƒ¼ãƒ³ãªçŠ¶æ…‹ã§åˆæœŸåŒ–ã•れã¾ã™ã€‚デフォルト値㯠false ã§ã™ã€‚

削除ã•れるã®ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã®SDKキャッシュã®ã¿ã§ã™ã€‚Appleã¨ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å±¥æ­´ãŠã‚ˆã³Adaptyサーãƒãƒ¼ä¸Šã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã¯å¤‰æ›´ã•れã¾ã›ã‚“。

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   ios: {
       clearDataOnBackup: true
   },
});

開発環境ã«é–¢ã™ã‚‹ãƒ’ント

Expo Go / Expo Web å‘ã‘モックモードã®è¨­å®š

Expo Go ãŠã‚ˆã³ Expo Web 環境ã§ã¯ã€Adapty ã®ãƒã‚¤ãƒ†ã‚£ãƒ–モジュールã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。ランタイムエラーをé¿ã‘ãªãŒã‚‰ã€ã‚¢ãƒ—リ㮠UI やペイウォールã®ãƒ­ã‚¸ãƒƒã‚¯ã‚’ビルド・テストã§ãるよã†ã€Adapty ã¯ãƒ¢ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’æä¾›ã—ã¦ã„ã¾ã™ã€‚

モックモードã¯ã€å®Ÿéš›ã®è³¼å…¥ã‚’テストã™ã‚‹ãŸã‚ã®ãƒ„ールã§ã¯ã‚りã¾ã›ã‚“:

  • App Store / Google Play ã®è³¼å…¥ãƒ•ローを開ãã¾ã›ã‚“。ã¾ãŸã€å®Ÿéš›ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’作æˆã—ã¾ã›ã‚“。
  • Adapty ペイウォールビルダー(AdaptyUI)ã§ä½œæˆã—ãŸãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«/オンボーディングをレンダリングã—ã¾ã›ã‚“。
  • Adaptyã®ãƒã‚¤ãƒ†ã‚£ãƒ–モジュールã¯å®Œå…¨ã«ãƒã‚¤ãƒ‘スã•れã¾ã™ã€‚Xcode/Androidビルドã«ãƒã‚¤ãƒ†ã‚£ãƒ– SDK ファイルãŒå­˜åœ¨ã—ãªã„å ´åˆã‚„ã€ç„¡åŠ¹ãª API キーを使用ã—ãŸå ´åˆã§ã‚‚エラーã¯ç™ºç”Ÿã—ã¾ã›ã‚“。

実際ã®è³¼å…¥ã‚„ペイウォールビルダーã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’テストã™ã‚‹ã«ã¯ã€ãƒ¢ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ãŒè‡ªå‹•çš„ã«ç„¡åйã«ãªã‚‹ Expo Dev Client / プロダクションビルドを使用ã—ã¦ãã ã•ã„。

デフォルトã§ã¯ã€SDKã¯Expo GoãŠã‚ˆã³Webç’°å¢ƒã‚’è‡ªå‹•çš„ã«æ¤œå‡ºã—ã€ãƒ¢ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã—ã¾ã™ã€‚モックデータをカスタマイズã—ãŸã„å ´åˆã‚’除ãã€è¨­å®šã¯ä¸è¦ã§ã™ã€‚

ãƒ¢ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ãŒæœ‰åйãªå ´åˆï¼š

  • ã™ã¹ã¦ã®Adaptyメソッドã¯ã€Adaptyã®ã‚µãƒ¼ãƒãƒ¼ã¸ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’行ã‚ãšã«ãƒ¢ãƒƒã‚¯ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã¾ã™ã€‚
  • デフォルトã§ã¯ã€åˆæœŸãƒ¢ãƒƒã‚¯ãƒ—ロファイルã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚µãƒ–スクリプションã¯ã‚りã¾ã›ã‚“。
  • デフォルトã§ã¯ã€makePurchase(...) ã¯è³¼å…¥æˆåŠŸã‚’ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆã—ã€ãƒ—レミアムアクセスを付与ã—ã¾ã™ã€‚ アクティベーション時㫠mockConfig を使ã£ã¦ãƒ¢ãƒƒã‚¯ãƒ‡ãƒ¼ã‚¿ã‚’カスタマイズã§ãã¾ã™ã€‚設定フォーマットã¨ã‚µãƒãƒ¼ãƒˆã•れã¦ã„るパラメータã¯ã“ã¡ã‚‰ã‚’ã”覧ãã ã•ã„。

try {
  await adapty.activate('YOUR_PUBLIC_SDK_KEY', {
    mockConfig: {
      // Customize the initial mock profile (optional)
    },
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
}

SDKã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’有効化å‰ã«å‘¼ã³å‡ºã™å¿…è¦ãŒã‚ã‚‹å ´åˆï¼ˆisActivated()ã‚„setLogLevel()ãªã©ï¼‰ã€activate()ã®å‰ã«enableMock()を使用ã—ã¦ãã ã•ã„。ブリッジãŒã™ã§ã«åˆæœŸåŒ–ã•れã¦ã„ã‚‹å ´åˆã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ä½•ã‚‚ã—ã¾ã›ã‚“。


adapty.enableMock(); // オプション: mockConfigを渡ã—ã¦ãƒ¢ãƒƒã‚¯ãƒ‡ãƒ¼ã‚¿ã‚’カスタマイズã§ãã¾ã™

// ã“ã‚Œã§æœ‰åŠ¹åŒ–å‰ã«ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã›ã¾ã™

await adapty.activate('YOUR_PUBLIC_SDK_KEY');

開発目的ã§SDKã®æœ‰åŠ¹åŒ–ã‚’é…らã›ã‚‹

Adapty 㯠SDK ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³æ™‚ã«å¿…è¦ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’ã™ã¹ã¦äº‹å‰å–å¾—ã™ã‚‹ãŸã‚ã€æœ€æ–°ãƒ‡ãƒ¼ã‚¿ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒé«˜é€Ÿã«ãªã‚Šã¾ã™ã€‚

ãŸã ã—ã€iOS シミュレーターã§ã¯é–‹ç™ºä¸­ã«èªè¨¼ã‚’é »ç¹ã«æ±‚ã‚られるãŸã‚ã€å•題ãŒç”Ÿã˜ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚Adapty 㯠StoreKit ã®èªè¨¼ãƒ•ローを制御ã§ãã¾ã›ã‚“ãŒã€SDK ãŒæœ€æ–°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã™ã‚‹ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é…å»¶ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

__debugDeferActivation プロパティを有効ã«ã™ã‚‹ã¨ã€æ¬¡ã« Adapty SDK を呼ã³å‡ºã™ã¾ã§ activate ã®å®Ÿè¡ŒãŒä¿ç•™ã•れã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€å¿…è¦ã§ãªã„å ´åˆã«èªè¨¼ãƒ‡ãƒ¼ã‚¿ã‚’求ã‚るプロンプトãŒä¸å¿…è¦ã«è¡¨ç¤ºã•れるã®ã‚’防ã’ã¾ã™ã€‚ ã“ã®æ©Ÿèƒ½ã¯é–‹ç™ºç”¨é€”ã®ã¿ã‚’想定ã—ãŸã‚‚ã®ã§ã‚りã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚·ãƒŠãƒªã‚ªã«å¯¾å¿œã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ãªã„点ã«ã”注æ„ãã ã•ã„。本番環境ã§ã¯ã€å®Ÿéš›ã®ãƒ‡ãƒã‚¤ã‚¹ã¯èªè¨¼ãƒ‡ãƒ¼ã‚¿ã‚’記憶ã—ã¦ãŠã‚Šã€ä½•度もèªè¨¼ã‚’求ã‚ã‚‹ã“ã¨ã¯ãªã„ãŸã‚ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã‚’é…らã›ã‚‹ã¹ãã§ã¯ã‚りã¾ã›ã‚“。

推奨ã™ã‚‹ä½¿ç”¨æ–¹æ³•ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __debugDeferActivation: isSimulator(), // 'isSimulator' from any 3rd party library
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

React Nativeã®Fast Refreshã«ãŠã‘ã‚‹SDKアクティベーションエラーã®ãƒˆãƒ©ãƒ–ルシューティング

React Nativeã§Adapty SDKを使ã£ã¦é–‹ç™ºã—ã¦ã„ã‚‹ã¨ã€æ¬¡ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ï¼šAdapty can only be activated once. Ensure that the SDK activation call is not made more than once. ã“れã¯ã€React Native ã®ãƒ•ァスト リフレッシュ機能ãŒé–‹ç™ºä¸­ã«è¤‡æ•°ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³å‘¼ã³å‡ºã—をトリガーã™ã‚‹ãŸã‚ã«ç™ºç”Ÿã—ã¾ã™ã€‚ã“れを防ãã«ã¯ã€__ignoreActivationOnFastRefresh オプションを __DEV__(React Native ã®é–‹ç™ºãƒ¢ãƒ¼ãƒ‰ãƒ•ラグ)ã«è¨­å®šã—ã¦ãã ã•ã„。

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __ignoreActivationOnFastRefresh: __DEV__,
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

トラブルシューティング

iOSã®æœ€å°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¨ãƒ©ãƒ¼

iOSビルド時ã«ã€æœ€å°iOSãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¾ãŸã¯ãƒ‡ãƒ—ロイメントターゲットã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•れるã“ã¨ãŒã‚りã¾ã™ã€‚Adaptyã¯iOS 15.0以é™ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚

Expoã¯iOSプロジェクト(Podfileã‚’å«ã‚€ï¼‰ã‚’expo prebuildã®å®Ÿè¡Œæ™‚ã«ç”Ÿæˆã™ã‚‹ãŸã‚ã€Podfileを直接編集ã—ãªã„ã§ãã ã•ã„。代ã‚りã«ã€expo-build-properties設定プラグインを使用ã—ã¦ãƒ‡ãƒ—ロイメントターゲットを設定ã—ã¦ãã ã•ã„。

  1. プラグインをインストールã—ã¾ã™ï¼š

    npx expo install expo-build-properties
  2. Expoã®Config(app.jsonã¾ãŸã¯app.config.js)を更新ã—ã¦ã€iOSã®ãƒ‡ãƒ—ロイメントターゲットを設定ã—ã¾ã™ï¼š

{
    "expo": {
        // ...other Expo config...
        "plugins": [
            [
                "expo-build-properties",
                {
                    "ios": {
                        // Adapty requires iOS 15.0+.
                        "deploymentTarget": "15.0"
                    }
                }
            ],
        ]
    }
}
  1. ãƒã‚¤ãƒ†ã‚£ãƒ– iOS プロジェクトをå†ç”Ÿæˆã—ã¦ãƒªãƒ“ルドã—ã¾ã™ï¼š
npx expo prebuild --clean
npx expo run:ios      # or `eas build -p ios` on your CI

Android Auto Backup マニフェストã®ç«¶åˆ

Expo ã§è¤‡æ•°ã® SDK(Adaptyã€AppsFlyerã€expo-secure-store ãªã©ï¼‰ã‚’使用ã—ã¦ã„ã¦ã€ãれãžã‚ŒãŒ Android Auto Backup を設定ã—ã¦ã„ã‚‹å ´åˆã€ãƒžãƒ‹ãƒ•ェストã®ãƒžãƒ¼ã‚¸ç«¶åˆãŒç™ºç”Ÿã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚

典型的ãªã‚¨ãƒ©ãƒ¼ã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™: Manifest merger failed : Attribute application@fullBackupContent value=(@xml/secure_store_backup_rules) from AndroidManifest.xml:24:248-306 is also present at [io.adapty:android-sdk:3.12.0] AndroidManifest.xml:9:18-70 value=(@xml/adapty_backup_rules). ã“ã®ç«¶åˆã‚’解決ã™ã‚‹ã«ã¯ã€Adapty プラグイン㫠Android ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—設定を管ç†ã•ã›ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ プロジェクト㧠expo-secure-store も使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€é‡è¤‡ã‚’é¿ã‘ã‚‹ãŸã‚ã«ãã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—設定を無効ã«ã—ã¦ãã ã•ã„。

app.json ã®è¨­å®šæ–¹æ³•ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚

{
  "expo": {
    "plugins": [
      ["react-native-adapty", { "replaceAndroidBackupConfig": true }],
      ["expo-secure-store", { "configureAndroidBackup": false }]
    ]
  }
}

replaceAndroidBackupConfig オプションã¯ãƒ‡ãƒ•ォルト㧠false ã§ã™ã€‚有効ã«ã™ã‚‹ã¨ã€Adapty プラグイン㌠Android ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ルールを管ç†ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ expo-secure-store を使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€è­¦å‘Šã‚’防ããŸã‚ã« "configureAndroidBackup": false ã‚’å«ã‚ã¦ãã ã•ã„。SecureStore ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—設定㯠Adapty ã«ã‚ˆã£ã¦å‡¦ç†ã•れã¾ã™ã€‚

ã“ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ã¯ã€Adaptyã€AppsFlyerã€ãŠã‚ˆã³ expo-secure-store ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—è¦ä»¶ã«ã®ã¿å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚ プロジェクト内ã®ä»–ã®ãƒ©ã‚¤ãƒ–ラリãŒã‚«ã‚¹ã‚¿ãƒ ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ルールを定義ã—ã¦ã„ã‚‹å ´åˆã¯ã€æ‰‹å‹•ã§è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

ÿÿÿÿ