純粋な React Native プロジェクトへの Adapty SDK のインストールと設定

このガイドは純粋な React Native(非 Expo)プロジェクトにのみ適用されます。 Expo を使用している場合は、代わりに Expo インストールガイドに従ってください。

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

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

Adapty SDK がモバイルアプリにどのように統合されているかの実例を見たいですか?ペイウォールの表示、購入、その他の基本機能を含む完全なセットアップを示すサンプルアプリをご確認ください。

要件

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

  1. Adapty SDK をインストールします(@adapty/core も自動的にインストールされます):
    # using npm
    npm install react-native-adapty
    
    # or using yarn
    yarn add react-native-adapty
  2. iOS の場合、pods をインストールします:
    cd ios && pod install
Android で React Native のバージョンが 0.73.0 より古い場合(クリックして展開)

/android/build.gradle ファイルを更新してください。kotlin-gradle-plugin:1.8.0 以降の依存関係があることを確認してください。

...
buildscript {
  ...
  dependencies {
    ...
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
  }
}
...

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 のポリシーに準拠する場合、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 でも有効にするには、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
   },
});

開発環境のヒント

開発目的で 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 の 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
}

ローカルテスト用のモックモードをセットアップする

ローカルの開発およびテストでは、サンドボックスの App Store/Google Play アカウントを必要とせずにイテレーションを高速化するためにモックモードを有効にできます。モックモードは Adapty のネイティブモジュールを完全にバイパスし、シミュレートされたデータを返します。

モックモードは実際の購入をテストするためのツールではありません

  • App Store / Google Play の購入フローを開きません。また、実際のトランザクションを作成しません
  • Adapty Paywall Builder(AdaptyUI)で作成したペイウォール/オンボーディングをレンダリングしません
  • Adapty のネイティブモジュールは完全にバイパスされます。Xcode/Android ビルドにネイティブ SDK ファイルがなくても、無効な API キーでもエラーは発生しません。
  • Adapty のサーバーにデータは送信されません。

実際の購入とペイウォールビルダーのペイウォールをテストするには、モックモードを無効にしてサンドボックスアカウントを使用してください。

モックモードを有効にするには、enableMocktrue に設定します。

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

モックモードが有効な場合:

  • すべての 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');

トラブルシューティング

iOS の最小バージョンエラー

iOS の最小バージョンエラーが発生した場合は、Podfile を更新してください。

-platform :ios, min_ios_version_supported
+platform :ios, '13.0'  # For core features only
# OR
+platform :ios, '15.0'  # If using paywalls created in the paywall builder

Android Auto Backup マニフェストの競合

一部のSDK(Adaptyを含む)には、独自のAndroid Auto Backup設定が含まれています。バックアップルールを定義する複数のSDKを使用している場合、Androidのマニフェストマージャーが android:fullBackupContentandroid:dataExtractionRules、または android:allowBackup に関するエラーで失敗することがあります。

よくあるエラーの症状: Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/your_data_extraction_rules) is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)

これらの変更は、Androidプラットフォームのディレクトリ(通常はプロジェクトの android/ フォルダー内)で行う必要があります。

この問題を解決するには、以下が必要です:

  • バックアップ関連の属性に対して、アプリの値を使用するようマニフェストマージャーに指示する。

  • AdaptyのルールとほかのSDKのルールをマージしたバックアップルールファイルを作成する。

1. マニフェストに tools 名前空間を追加する

AndroidManifest.xml ファイルのルートの <manifest> タグに tools が含まれていることを確認してください:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">

    ...
</manifest>

2. <application> でバックアップ属性を上書きする

同じ AndroidManifest.xml ファイルで、<application> タグを更新して、アプリが最終的な値を提供し、マニフェストマージャーにライブラリの値を置き換えるよう指示します:

<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"           
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">

    ...
</application>

いずれかのSDKが android:allowBackup も設定している場合は、tools:replace に含めてください:

tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"

3. マージしたバックアップルールファイルを作成する

AndroidプロジェクトのAdaptyのルールとほかのSDKのルールを組み合わせた res/xml/ ディレクトリにXMLファイルを作成します。AndroidはOSのバージョンによって異なるバックアップルール形式を使用するため、両方のファイルを作成することで、アプリがサポートするすべてのAndroidバージョンとの互換性が確保されます。

以下の例では、サンプルのサードパーティSDKとしてAppsFlyerを使用しています。アプリで使用しているほかのSDKのルールに置き換えるか、追加してください。

Android 12以降(新しいデータ抽出ルール形式を使用):

<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
    <cloud-backup>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </cloud-backup>

    <device-transfer>
        
        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </device-transfer>
</data-extraction-rules>

Android 11以前(従来のフルバックアップコンテンツ形式を使用):

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    
    <exclude domain="sharedpref" path="appsflyer-data"/>

    
    <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>

    

Android で別のアプリから戻った後に購入が失敗する

購入フローを開始する Activity がデフォルト以外の launchMode を使用している場合、Google Play、銀行アプリ、またはブラウザからユーザーが戻ったときに Android が Activity を誤って再作成または再利用することがあります。これにより、購入結果が失われたり、キャンセルとして処理されたりする可能性があります。

購入が正しく機能するようにするには、購入フローを開始する Activity に standard または singleTop の起動モードのみを使用し、その他のモードを避けてください。

AndroidManifest.xml で、購入フローを開始する Activity が standard または singleTop に設定されていることを確認してください。

<activity
    android:name=".MainActivity"
    android:launchMode="standard" />

Podfile の SWIFT_VERSION オーバーライドによる Swift 6 ビルドエラー

iOS 向けに React Native アプリをビルドすると、Adapty pod ターゲットで Swift 6 のコンパイルエラーが表示される場合があります。典型的な症状としては、AdaptyUIBuilderLogic での @Sendable の不一致、Adapty 型での Sendable 適合の欠如、またはアクター分離エラーがあります。

Adapty pod は s.swift_version = '6.0' を宣言しており、Swift 6 でビルドする必要があります。アプリ自体のコードは Swift 5 のままで問題ありません。Adapty pod ターゲット(AdaptyAdaptyUIAdaptyUIBuilderAdaptyLoggerAdaptyPlugin)のみが Swift 6 でビルドされる必要があります。

最も一般的な原因は、すべての pod ターゲットに対して SWIFT_VERSION を書き換える ios/Podfilepost_install フックです。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

修正方法: Adapty pod ターゲットをオーバーライドから除外します。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if %w[Adapty AdaptyUI AdaptyUIBuilder AdaptyLogger AdaptyPlugin].include?(target.name)
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '5.9'
    end
  end
end

次に ios/ ディレクトリから pod install を実行し、再ビルドしてください。

確認するには、ios/Pods/Pods.xcodeproj を開き、Adapty pod ターゲット → Build SettingsSwift Language Version を選択してください。Swift 6 になっているはずです。