ExpoプロジェクトにAdapty React Native SDKをインストール・設定する

このガイドは、ExpoプロジェクトへのAdapty React Native SDKのインストールと設定を説明します。

**純粋なReact Native(Expoなし)**を使用している場合は、代わりにReact Nativeインストールガイドをご覧ください。

Adapty SDKには、React Nativeアプリへのシームレスな統合に必要な2つの主要モジュールが含まれています:

  • Core Adapty:アプリでAdaptyを正しく動作させるために必要なモジュールです。
  • AdaptyUI:クロスプラットフォームのペイウォールを簡単に作成できるノーコードツールAdapty ペイウォールビルダーを使用する場合に必要なモジュールです。AdaptyUIはコアモジュールと同時に自動的に有効化されます。

React NativeアプリでIAPを実装する方法の完全なチュートリアルが必要な場合は、こちらをご覧ください。

Adapty SDKがExpoアプリにどのように統合されているかの実際の例を見たい方は、サンプルアプリをご確認ください:

完全な実装ウォークスルーは、以下の動画でも確認できます:

要件

Adapty React Native SDKはiOS 13.0以降をサポートしていますが、Adapty ペイウォールビルダーで作成したペイウォールを使用するにはiOS 15.0以降が必要です。

SDK v3.17以降、Adapty SDKはデフォルトでGoogle Play Billing Library v8.0.0を使用します。

SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。

Adapty SDKをインストールする

Release

ExpoプロジェクトでAdaptyを使用するには、Expo Dev Client(カスタム開発ビルド)が必要です。

Expo Goはカスタムネイティブモジュールをサポートしていないため、UI/ロジックの開発にはモックモードでのみ使用できます(実際の購入やAdaptyUI/ペイウォールビルダーのレンダリングは不可)。

  1. Adapty SDKをインストールします(@adapty/coreも自動的にインストールされます):

    npx expo install react-native-adapty
    npx expo prebuild
  2. EASまたはローカルビルドを使用して開発用のアプリをビルドします:

  3. devサーバーを起動します:

    npx expo start --dev-client

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 の初期化には必ず Public SDK key を使用してください。Secret keyサーバーサイド API 専用です。
  • SDK keys はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。

Adaptyを有効化するために、以下のコードをApp.tsxにコピーしてください:


adapty.activate('YOUR_PUBLIC_SDK_KEY');

他のAdapty SDKメソッドを呼び出す前に、activateの完了を待ってください。完全なシーケンスについてはReact Native SDKの呼び出し順序をご覧ください。

次に、アプリでペイウォールを設定します:

開発環境でのアクティベーションエラーを回避するには、ヒントをご参照ください。

Adapty SDKのAdaptyUIモジュールを有効化する

ペイウォールビルダーを使用する場合は、AdaptyUIモジュールが必要です。コアモジュールを有効化すると自動的に有効化されるため、追加の設定は不要です。

オプション設定

ログ

ログシステムを設定する

Adaptyはエラーやその他の重要な情報をログに記録し、何が起きているかを把握できるようにします。以下のレベルが使用可能です:

レベル説明
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モジュールを有効化する際に、ipAddressCollectionDisabledtrueに設定すると、ユーザーのIPアドレスの収集と共有を無効にできます。デフォルト値はfalseです。

このパラメータは、ユーザープライバシーの強化、地域のデータ保護規制(GDPRやCCPAなど)への準拠、またはIPベースの機能がアプリに不要な場合の不必要なデータ収集の削減に使用します。

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

広告IDの収集と共有を無効にする

Adaptyモジュールを有効化する際に、ios.idfaCollectionDisabled(iOS)またはandroid.adIdCollectionDisabled(Android)をtrueに設定すると、広告識別子の収集を無効にできます。デフォルト値はfalseです。

このパラメータは、App Store/Play Storeのポリシーへの準拠、アプリトラッキングの透明性プロンプトの回避、または広告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でも有効にするには、localAccessLevelAllowedtrueに設定します:

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

バックアップ復元時にデータをクリアする

clearDataOnBackuptrueに設定すると、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(); // Optional: pass mockConfig to customize mock data

// Now you can call methods before activation

await adapty.activate('YOUR_PUBLIC_SDK_KEY');

開発目的でSDKの有効化を遅延させる

AdaptyはSDK有効化時に必要なユーザーデータをすべて事前取得し、最新データへの高速アクセスを可能にします。

ただし、これはiOSシミュレーターで問題になる場合があります。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のFast Refresh機能が開発中に複数回の有効化呼び出しをトリガーするために発生します。これを防ぐには、__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の最小バージョンまたはデプロイメントターゲットに関するエラーが表示されることがあります。特に、iOS 15.0以降が必要なAdapty ペイウォールビルダーで作成したペイウォールを使用する場合に発生します。

Expoはexpo prebuild中にiOSプロジェクト(Podfileを含む)を生成するため、Podfileを直接編集すべきではありません。代わりに、expo-build-properties設定プラグインを使用してデプロイメントターゲットを設定してください。

  1. プラグインをインストールします:

    npx expo install expo-build-properties
  2. Expo設定(app.jsonまたはapp.config.js)を更新してiOSデプロイメントターゲットを設定します:

{
    "expo": {
        // ...other Expo config...
        "plugins": [
            [
                "expo-build-properties",
                {
                    "ios": {
                        // Use "13.0" for core Adapty features only,
                        // or "15.0" if you use paywalls created in the paywall builder.
                        "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でAndroid Auto Backupを設定する複数のSDK(Adapty、AppsFlyer、expo-secure-storeなど)を使用している場合、マニフェストマージの競合が発生することがあります。

典型的なエラーは次のようになります: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のバックアップ要件のみを対象としています。 プロジェクト内の他のライブラリがカスタムバックアップルールを定義している場合は、それらを手動で設定する必要があります。