Capacitor - Adapty SDK のインストールと設定

Adapty SDK には、Capacitor アプリへのスムーズな統合を実現する 2 つの主要モジュールが含まれています。

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

Adapty SDK をモバイルアプリに統合した実際の例を見たい方は、サンプルアプリをご確認ください。ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを確認できます。

要件

Adapty Capacitor SDK には以下のバージョン要件があります。

Adapty SDK バージョンCapacitor バージョンiOS バージョン
3.16.0+815.0+
3.15714.0+

Capacitor バージョン 6 以下はサポートされていません。

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

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

Adapty SDK のインストール

Release

Adapty SDK をインストールします。

npm install @adapty/capacitor
npx cap sync

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

Adapty SDK の有効化はアプリ内で一度だけ行う必要があります。

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 を有効化するために、以下のコードをアプリの任意のファイルにコピーしてください。


try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
      // verbose logging is recommended for the development purposes and for the first production release
        logLevel: 'verbose',
      // in the development environment, use this variable to avoid multiple activation errors. Set it to your development environment variable
      __ignoreActivationOnFastRefresh: true,
    }
  });
  console.log('Adapty activated successfully!');
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
}

他の Adapty SDK メソッドを呼び出す前に、activate の完了を待ってください。完全な呼び出し順序については Capacitor SDK の呼び出し順序 を参照してください。

開発環境での有効化エラーを避けるには、ヒント を参照してください。

次に、アプリでペイウォールをセットアップします。

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

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

オプション設定

ロギング

ロギングシステムのセットアップ

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

レベル説明
errorエラーのみがログに記録されます
warn重大なエラーは発生しないが注意すべき SDK のエラーやメッセージがログに記録されます
infoエラー、警告、および各種情報メッセージがログに記録されます
verbose関数呼び出し、API クエリなど、デバッグ時に役立つ追加情報がすべてログに記録されます

ログレベルは Adapty の設定前または設定中にアプリで指定できます。

// Set log level before activation
adapty.setLogLevel({ logLevel: 'verbose' });

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

データポリシー

Adapty は明示的に送信しない限りユーザーの個人データを保存しませんが、ストアや国のガイドラインに準拠するための追加のデータセキュリティポリシーを実装できます。

IP アドレスの収集と共有を無効にする

Adapty モジュールを有効化する際に ipAddressCollectionDisabledtrue に設定すると、ユーザーの IP アドレスの収集と共有が無効になります。デフォルト値は false です。

IP ベースの機能がアプリに必要でない場合や、GDPR や CCPA などの地域データ保護規制に準拠する必要がある場合、あるいは不必要なデータ収集を減らしたい場合に使用してください。

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

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

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

App Store/Play Store ポリシーへの準拠、アプリトラッキングの透明性プロンプトの非表示、または広告 ID に基づくアトリビューションや分析がアプリに不要な場合に使用してください。

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

AdaptyUI のメディアキャッシュ設定をセットアップする

デフォルトでは、AdaptyUI はパフォーマンス向上とネットワーク使用量削減のために画像や動画などのメディアをキャッシュします。カスタム設定を指定してキャッシュ設定を変更できます。

デフォルトのキャッシュ設定を上書きするには mediaCache を使用してください。

await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    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 に設定してください。

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

バックアップ復元時のデータクリア

clearDataOnBackuptrue に設定すると、アプリが iCloud バックアップから復元された際に SDK が検出し、キャッシュされたプロファイル情報、プロダクト詳細、ペイウォールを含むすべてのローカル SDK データを削除します。SDK はクリーンな状態で初期化されます。デフォルト値は false です。

削除されるのはローカルの SDK キャッシュのみです。Apple とのトランザクション履歴および Adapty サーバー上のユーザーデータは変更されません。

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

開発環境のヒント

Capacitor のライブリロードでの SDK 有効化エラーのトラブルシューティング

Capacitor で Adapty SDK を開発中に、次のエラーが発生することがあります: Adapty can only be activated once. Ensure that the SDK activation call is not made more than once.

これは Capacitor のライブリロード機能が開発中に複数回の有効化呼び出しをトリガーするために発生します。これを防ぐには、__ignoreActivationOnFastRefresh オプションを Capacitor の開発モードフラグに設定してください。使用するバンドルによって異なります。

try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        // Set your development environment variable
      __ignoreActivationOnFastRefresh: true,
    }
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

トラブルシューティング

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

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

-platform :ios, min_ios_version_supported
+platform :ios, '14.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 ファイルを変更した後は、npx cap sync android を実行してプラットフォームを再生成した際に Capacitor が更新されたリソースを取得できるようにしてください。

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 向けに Capacitor アプリをビルドする際に、Adapty pod ターゲットで Swift 6 のコンパイルエラーが発生することがあります。典型的な症状としては、AdaptyUIBuilderLogic での @Sendable の不一致、Adapty 型での Sendable 適合の欠如、またはアクター分離エラーなどがあります。

Adapty pods は s.swift_version = '6.0' を宣言しており、ビルドに Swift 6 が必要です。アプリ独自のコードは Swift 5 のままでも構いません。Swift 6 でのビルドが必要なのは Adapty pod ターゲット(AdaptyAdaptyUIAdaptyUIBuilderAdaptyLoggerAdaptyPlugin)のみです。

最もよくある原因は、ios/App/Podfilepost_install フックがすべての pod ターゲットの SWIFT_VERSION を上書きしていることです。

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

その後、npx cap sync ios を実行してリビルドしてください。

確認するには、ios/App/Pods/Pods.xcodeproj を開き、Adapty pod ターゲットを選択して Build SettingsSwift Language Version を確認します。Swift 6 になっている必要があります。