Capacitor - Adapty SDK のインストールと設定
Adapty SDK には、Capacitor アプリにシームレスに統合するための 2 つの主要モジュールが含まれています:
- Core Adapty: Adapty をアプリで正常に動作させるために必要なモジュールです。
- AdaptyUI: このモジュールはフローと従来のビルダーペイウォールをレンダリングします。AdaptyUI はコアモジュールと同時に自動的に有効化されます。
Adapty SDKがモバイルアプリにどのように統合されるか、実際の例を見てみませんか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを示すサンプルアプリをご覧ください。
要件
Adapty Capacitor SDK には以下のバージョン要件があります:
| Adapty SDK バージョン | Capacitor バージョン | iOS バージョン |
|---|---|---|
| 4.1+ | 8 | 15.0+ |
| 3.16.0+ | 8 | 15.0+ |
| 3.15 | 7 | 14.0+ |
Capacitor バージョン 6 以下はサポートされていません。
iOSのビルドにはXcode 26以降が必要です。ネイティブiOS SDKはSwift tools 6.2でビルドされています。Androidの最小SDKバージョンは24です。
Adapty Capacitor SDKはGoogle Play Billing Library v8に対応しています。
Billing Libraryのバージョンとの互換性は、Googleがそのバージョンで導入したすべての機能をAdaptyがサポートしているという意味ではありません。Google Playの新しい課金機能を採用する前に、Play StoreのProductを参照してください。
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。
Adapty SDK のインストール
Adapty SDK をインストールします:
npm install @adapty/capacitor
npx cap sync
iOS では、Adapty SDK はネイティブの Adapty SDK を Swift Package Manager のみ 経由で取得します。CocoaPods の podspec は削除されました(CocoaPods のスペックリポジトリは 2026 年 12 月に読み取り専用になります)。アプリの iOS プロジェクトは Capacitor の SPM 連携を使用する必要があります:
-
新しいアプリの場合は、SPM パッケージマネージャーを使用して iOS プラットフォームを追加します:
npx cap add ios --packagemanager SPM -
既存のアプリの場合は、Capacitor の既存プロジェクトでの SPM 使用ガイドに従って、iOS プロジェクトを CocoaPods から SPM に移行してください。
v3 からアップグレードする場合は、API の変更点の完全なリストについて Adapty Capacitor SDK を v4.1 に移行するを参照してください。
Adapty SDK の Adapty モジュールを有効化する
Adapty SDK のアクティベーションは、アプリ内で一度だけ行う必要があります。
Public SDK Key を取得するには:
- Adapty ダッシュボードを開き、App settings → General に移動します。
- Api keys セクションで、Public SDK Key(Secret Key ではない)をコピーします。
- コード内の
"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 はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。
以下のコードをアプリの任意のファイルにコピーして、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の呼び出し順序を参照してください。
開発環境でのアクティベーションエラーを回避するには、ヒントを参照してください。
次に、アプリでペイウォールを設定します:
- フロー&ペイウォールビルダーを使用する場合は、クイックスタートに従ってください。
- 独自のペイウォールUIを構築する場合は、カスタムペイウォールのクイックスタートを参照してください。
Adapty SDKのAdaptyUIモジュールを有効にする
Flow & Paywall Builderを使用する予定がある場合は、AdaptyUIモジュールが必要です。コアモジュールを有効にすると自動的に設定されるため、追加の作業は必要ありません。
オプション設定
ログ
ログシステムの設定
Adapty はエラーやその他の重要な情報をログに記録し、何が起きているかを把握できるようにします。以下のログレベルが利用可能です。
| Level | Description |
|---|---|
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モジュールを有効化する際、ipAddressCollectionDisabled を true に設定すると、ユーザーのIPアドレスの収集と共有を無効にできます。デフォルト値は false です。
このパラメーターを使用すると、ユーザーのプライバシーを強化したり、地域のデータ保護規制(GDPRやCCPAなど)に準拠したり、アプリでIPベースの機能が不要な場合に不必要なデータ収集を減らしたりできます。
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のポリシーに準拠する場合、App Tracking Transparencyのプロンプトを表示したくない場合、または広告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 でも有効にするには、localAccessLevelAllowed を true に設定してください。
await adapty.activate({
apiKey: 'YOUR_PUBLIC_SDK_KEY',
params: {
android: {
localAccessLevelAllowed: true,
},
}
});
バックアップ復元時にデータを削除する
clearDataOnBackup を true に設定すると、SDKはアプリがiCloudバックアップから復元されたことを検知し、キャッシュされたプロファイル情報、プロダクト詳細、ペイウォールなど、ローカルに保存されているすべてのSDKデータを削除します。その後、SDKはクリーンな状態で初期化されます。デフォルト値は false です。
削除されるのはローカルのSDKキャッシュのみです。Appleとのトランザクション履歴およびAdaptyサーバー上のユーザーデータは変更されません。
await adapty.activate({
apiKey: 'YOUR_PUBLIC_SDK_KEY',
params: {
ios: {
clearDataOnBackup: true,
},
}
});
Adapty アトリビューションを有効にする
このパラメータは SDK バージョン 4.1 以降で利用できます。
Adapty アトリビューションを使用する場合は、SDK をアクティベートする際に adaptyAttributionEnabled を true に設定してください。デフォルト値は false です。このパラメータを指定しない場合、SDK はインストールを登録せず、インストールの詳細をアプリに送信しません。SDK バージョン 4.1 未満では、Adapty アトリビューションは自動的に有効化されます。
await adapty.activate({
apiKey: 'YOUR_PUBLIC_SDK_KEY',
params: {
adaptyAttributionEnabled: true,
}
});
開発環境のヒント
Capacitorのライブリロードでのアクティベーションエラーのトラブルシューティング
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
}
このオプションを有効にすると、SDKはすでにアクティベートされている場合、アクティベーション呼び出し全体をスキップします。そのため、アクティベーションパラメーターへの変更はライブリロード時に反映されません。新しいアクティベーションパラメーターを適用するには、アプリを完全に閉じてから再起動してください。
トラブルシューティング
iOS最小バージョンエラー
これは SDK 3.x の CocoaPods ベースのプロジェクトに適用されます。SDK 4 は Swift Package Manager を通じて iOS にインストールします(Podfile はありません)。iOS 15.0 が必要なので、Xcode でデプロイメントターゲットを 15.0 に設定してください。
SDK 3.x で iOS 最小バージョンエラーが発生した場合は、Podfile を更新してください:
-platform :ios, min_ios_version_supported
+platform :ios, '15.0'
Android バックアップルール(Auto Backup の設定)
一部のSDK(Adaptyを含む)は、独自のAndroid Auto Backup設定を同梱しています。バックアップルールを定義する複数のSDKを使用している場合、Androidマニフェストマージャーがandroid:fullBackupContent、android: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のルールをres/xml/ディレクトリにXMLファイルを作成し、AdaptyのルールをほかのSDKのルールと組み合わせます。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 ビルドエラー
これは SDK 3.x の CocoaPods ベースのプロジェクトに適用されます。SDK 4 では Swift Package Manager を通じてネイティブ SDK をインストールするため、調整が必要な Podfile はありません。
Capacitor アプリを iOS 向けにビルドする際、Adapty の pod ターゲットで Swift 6 のコンパイルエラーが発生することがあります。典型的な症状としては、AdaptyUIBuilderLogic での @Sendable の不一致、Adapty の型に Sendable 適合が欠如しているエラー、またはアクターの分離エラーなどが挙げられます。
Adapty の Pod は s.swift_version = '6.0' を宣言しており、ビルドに Swift 6 が必要です。アプリ本体のコードは Swift 5 のままで構いません。Swift 6 でビルドが必要なのは、Adapty の Pod ターゲット(Adapty、AdaptyUI、AdaptyUIBuilder、AdaptyLogger、AdaptyPlugin)のみです。
最もよくある原因は、ios/App/Podfile 内の post_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 Settings → Swift Language Version を確認します。Swift 6 になっているはずです。