Flutter SDK のインストールと設定
Adapty SDK には、Flutter アプリへのシームレスな統合を実現する 2 つの主要モジュールが含まれています。
- Core Adapty: これはAdaptyがアプリ内で正常に動作するために必要な基本SDKです。
- AdaptyUI: Adapty ペイウォールビルダーを使用する場合に必要なモジュールです。ペイウォールビルダーは、コードなしでクロスプラットフォームのペイウォールを簡単に作成できる使いやすいツールです。
Adapty SDKをモバイルアプリに統合する実際の例を確認したいですか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを示したサンプルアプリをぜひご覧ください。
必要条件
Adapty SDK は iOS 13.0+ をサポートしていますが、ペイウォールビルダーで作成したペイウォールを正しく動作させるには iOS 15.0+ が必要です。
Adapty Flutter SDK 4.0 — フロービルダーサポートを追加 — の最低要件は iOS 15.0+、Xcode 26+、Flutter 3.32.0+(Dart 3.8.0+)に引き上げられました。インストールの詳細については、以下の Adapty SDK 4.0 を参照してください。
Adapty は Google Play Billing Library 8.x までに対応しています。デフォルトでは Adapty は Google Play Billing Library v7.0.0 で動作しますが、より新しいバージョンを使用したい場合は、手動で依存関係を追加できます。
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。
Adapty SDK のインストール
以下の手順では最新の安定版 SDK(3.x)をインストールします。フロービルダーに必要でクイックスタートで使用される v4 が必要な場合は、代わりに下の Adapty SDK 4.0: Swift Package Manager の手順に従ってください。
pubspec.yamlファイルに Adapty を追加します:
dependencies:
adapty_flutter: ^<the latest SDK version>
-
以下のコマンドを実行して依存関係をインストールします:
flutter pub get -
アプリケーションに Adapty SDK をインポートします:
import 'package:adapty_flutter/adapty_flutter.dart';
Adapty SDK 4.0: Swift Package Manager
Adapty Flutter SDK 4.0(フロービルダーのサポートを追加)を pubspec.yaml に追加します:
dependencies:
adapty_flutter: 4.0.0
v4 以降、ネイティブ iOS SDK は CocoaPods での配布を終了し、Swift Package Manager のみを通じて提供されます(CocoaPods のスペックリポジトリは 2026 年 12 月に読み取り専用になります)。Flutter 3.32〜3.43 をご利用の場合は、Swift Package Manager のサポートを一度有効にしてください:
flutter config --enable-swift-package-manager
Flutter 3.44 以降では Swift Package Manager がデフォルトで有効になっているため、追加の操作は不要です。
v4 の API 変更については、移行ガイドをご覧ください。
Adapty SDKのAdaptyモジュールを有効化する
アプリのコードでAdapty SDKを有効化します。
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 はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
_initializeAdapty();
super.initState();
}
Future<void> _initializeAdapty() async {
try {
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY'),
);
} catch (e) {
// handle the error
}
}
Widget build(BuildContext context) {
return Text("Hello");
}
}
activate の処理が完了してから、他の Adapty SDK メソッドを呼び出してください。完全な呼び出し順序については、Flutter SDK の呼び出し順序を参照してください。
次に、アプリにペイウォールを設定します。
- Adapty Paywall Builder を使用する場合は、まず下の AdaptyUI モジュールを有効化する手順を実行してから、ペイウォールビルダーのクイックスタートに進んでください。
- 独自のペイウォール UI を構築する場合は、カスタムペイウォールのクイックスタートを参照してください。
AdaptyUI モジュールの有効化
ペイウォールビルダーを使用する予定があり、AdaptyUI モジュールをインストール済みの場合は、AdaptyUI も有効化する必要があります。
AdaptyUI が有効化されているかどうかに関わらず、AdaptyUI 関連の依存関係はアプリにリンクされます。
コード内では、AdaptyUI を有効化する前に、必ずコアの Adapty モジュールを先に有効化してください。
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withActivateUI(true), // This automatically activates AdaptyUI
);
オプションの設定
ログ
ログシステムを設定する
Adapty はエラーやその他の重要な情報をログに記録し、何が起きているかを把握できるようにします。以下のログレベルが利用可能です:
| レベル | 説明 |
|---|---|
AdaptyLogLevel.error | エラーのみがログに記録されます |
AdaptyLogLevel.warn | エラーと、重大なエラーは引き起こさないものの注意が必要なSDKからのメッセージがログに記録されます。 |
AdaptyLogLevel.info | エラー、警告、さまざまな情報メッセージがログに記録されます。デフォルト値 |
AdaptyLogLevel.verbose | 関数呼び出しやAPIクエリなど、デバッグ時に役立つ可能性のある追加情報がログに記録されます。 |
AdaptyLogLevel.debug | デバッグ情報がログに記録されます。 |
| Adaptyを設定する前に、アプリでログレベルを設定できます: |
// Set log level before activation.
// 'verbose' is recommended for development and the first production release
await Adapty().setLogLevel(AdaptyLogLevel.verbose);
// Or set it during configuration
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withLogLevel(AdaptyLogLevel.verbose),
);
データポリシー
Adapty はユーザーの個人データを明示的に送信しない限り保存しませんが、ストアや国のガイドラインに準拠するために追加のデータセキュリティポリシーを実装できます。
IPアドレスの収集と共有を無効にする
Adapty モジュールを有効化する際に、ipAddressCollectionDisabled を true に設定すると、ユーザーのIPアドレスの収集と共有を無効にできます。デフォルト値は false です。
IPベースの機能がアプリに必要ない場合に、ユーザーのプライバシー保護、GDPRやCCPAなどの地域のデータ保護規制への準拠、または不要なデータ収集の削減を目的として、このパラメータを使用できます。
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withIpAddressCollectionDisabled(true),
);
広告IDの収集と共有を無効にする
Adaptyモジュールを有効化する際、広告識別子の収集を無効にするには、appleIdfaCollectionDisabled(iOS)またはgoogleAdvertisingIdCollectionDisabled(Android)をtrueに設定してください。デフォルト値はfalseです。
App Store/Play Storeのポリシーへの準拠、App Tracking Transparencyプロンプトの表示回避、または広告IDに基づくアトリビューションや分析がアプリに不要な場合は、このパラメータを使用してください。
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withAppleIdfaCollectionDisabled(true) // iOS
..withGoogleAdvertisingIdCollectionDisabled(true), // Android
);
AdaptyUI のメディアキャッシュ設定
このモジュールは Adapty SDK と共に自動的に有効化されます。ペイウォールビルダーを使用せず、AdaptyUI モジュールを無効化したい場合は、有効化時に withActivateUI(false) を渡してください。
デフォルトでは、AdaptyUI はメディア(画像や動画など)をキャッシュしてパフォーマンスを向上させ、ネットワークの使用量を削減します。カスタム設定を指定することで、キャッシュの設定をカスタマイズできます。
withMediaCacheConfiguration を使用して、デフォルトのキャッシュ制限を上書きできます。これはオプションです。このメソッドを呼び出さない場合、デフォルト値が使用されます(ディスクサイズ 100MB、メモリ数制限なし)。ただし、設定オブジェクトを作成する場合、すべてのパラメータが必須です。
final mediaCacheConfig = AdaptyUIMediaCacheConfiguration(
memoryStorageTotalCostLimit: 200 * 1024 * 1024, // 200 MB
memoryStorageCountLimit: 2147483647, // max int value
diskStorageSizeLimit: 200 * 1024 * 1024, // 200 MB
);
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withMediaCacheConfiguration(mediaCacheConfig),
);
パラメーター:
| パラメーター | 必須/任意 | 説明 |
|---|---|---|
| memoryStorageTotalCostLimit | required | メモリ上のキャッシュサイズの合計(バイト単位)。デフォルトは100 MBです。 |
| memoryStorageCountLimit | required | メモリストレージのアイテム数の上限。デフォルトはint型の最大値です。 |
| diskStorageSizeLimit | required | ディスク上のファイルサイズの上限(バイト単位)。デフォルトは100 MBです。 |
Androidでローカルアクセスレベルを有効にする
デフォルトでは、ローカルアクセスレベルはiOSで有効、Androidで無効になっています。Androidでも有効にするには、withGoogleLocalAccessLevelAllowedをtrueに設定してください。
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withGoogleLocalAccessLevelAllowed(true),
);
バックアップから復元時のデータクリア
appleClearDataOnBackup を true に設定すると、SDKはアプリがiCloudバックアップから復元されたことを検知し、キャッシュされたプロファイル情報、プロダクト詳細、ペイウォールなど、ローカルに保存されているSDKデータをすべて削除します。その後、SDKはクリーンな状態で初期化されます。デフォルト値は false です。
削除されるのはローカルのSDKキャッシュのみです。Appleとのトランザクション履歴およびAdaptyサーバー上のユーザーデータは変更されません。
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withAppleClearDataOnBackup(true) // default – false
);
トラブルシューティング
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のルールとほかの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 で、購入フローを開始するアクティビティの launchMode が standard または singleTop に設定されていることを確認してください:
<activity
android:name=".MainActivity"
android:launchMode="standard" />
Podfile の SWIFT_VERSION オーバーライドによる Swift 6 ビルドエラー
Flutter アプリを iOS 向けにビルドする際、Adapty の pod ターゲットで Swift 6 のコンパイルエラーが発生することがあります。よくある症状としては、AdaptyUIBuilderLogic での @Sendable の不一致、Adapty 型の Sendable 準拠の欠如、またはアクター分離エラーなどが挙げられます。
Adapty の Pod は s.swift_version = '6.0' を宣言しており、ビルドに Swift 6 が必要です。あなた自身のアプリコードは Swift 5 のままでかまいません。Adapty の Pod ターゲット(Adapty、AdaptyUI、AdaptyUIBuilder、AdaptyLogger、AdaptyPlugin)のみが Swift 6 でビルドされる必要があります。
最もよくある原因は、ios/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
次に ios/ ディレクトリで pod install を実行し、再ビルドしてください。
確認するには、ios/Pods/Pods.xcodeproj を開き、Adapty pod ターゲットを選択して Build Settings → Swift Language Version を確認します。Swift 6 と表示されていれば正常です。