Flutter SDK のインストールと設定
Adapty SDK には、Flutter アプリへのシームレスな統合のための 2 つの主要モジュールが含まれています。
- Core Adapty: アプリで Adapty を正常に動作させるために必要な必須 SDK です。
- AdaptyUI: フローおよび旧ビルダーのペイウォールをレンダリングするモジュールです。
Adapty SDK がモバイルアプリにどのように統合されるか、実際の例を確認したいですか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを示すサンプルアプリをご覧ください。
必要条件
Adapty Flutter SDK を使用するには、iOS 15.0+、Xcode 26+、および Flutter 3.32.0+(Dart 3.8.0+)が必要です。インストールの詳細については、以下の Swift Package Manager (iOS) を参照してください。
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。
依存関係
Adapty SDK は、Android で以下のバージョンの Google Play Billing Library に対応しています:
| Adapty SDK バージョン | Billing Library バージョン |
|---|---|
| 4.0.4 以降 | v8 |
| 4.0.0〜4.0.3 | デフォルトは v7、別の依存関係によって引き上げられた場合は v8 |
特定の Billing Library バージョンへの対応は、Google がそのバージョンで導入したすべての機能を Adapty がサポートすることを意味するわけではありません。新しい Google Play の課金機能を採用する前に、Play Store のプロダクト を参照してください。
Adapty SDK のインストール
常に最新バージョンのSDKをインストールすることをお勧めします。最新の安定性修正と改善が含まれています。
この手順には Flutter 3.32.0 以上(Dart 3.8.0 以上)が必要です。プラグインは Swift Package Manager を使ってネイティブ iOS SDK を取得します。初回セットアップについては Swift Package Manager (iOS) を参照してください。
pubspec.yamlファイルに Adapty を追加します。
dependencies:
adapty_flutter: ^<the latest SDK version>
-
以下のコマンドを実行して依存関係をインストールします:
flutter pub get -
アプリケーションに Adapty SDK をインポートします:
import 'package:adapty_flutter/adapty_flutter.dart';
Swift Package Manager (iOS)
このプラグインはネイティブの iOS SDK を Swift Package Manager 経由で取得します。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");
}
}
他のAdapty SDKメソッドを呼び出す前に、activateの完了を待ってください。詳細な順序については、Flutter SDKの呼び出し順序を参照してください。
次に、アプリにペイウォールを設定します:
- フロー & ペイウォールビルダーを使用する場合は、まず以下のAdaptyUIモジュールをアクティベートしてから、クイックスタートに従ってください。
- 独自のペイウォールUIを構築する場合は、カスタムペイウォールのクイックスタートを参照してください。
Adapty SDK の 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 と一緒に自動的に有効化されます。Adapty が画面をレンダリングしない場合や 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
);
Adapty アトリビューションを有効化する
このパラメータは SDK バージョン 4.1 以降から利用できます。
Adapty アトリビューションを使用する場合は、SDK を有効化する際に withAdaptyAttributionEnabled(true) を呼び出してください。デフォルト値は false です。このパラメータを指定しない場合、SDK はインストールを記録せず、インストールの詳細をアプリに配信しません。SDK バージョン 4.1 未満では、Adapty アトリビューションは自動的に有効化されます。
await Adapty().activate(
configuration: AdaptyConfiguration(apiKey: 'YOUR_PUBLIC_SDK_KEY')
..withAdaptyAttributionEnabled(true)
);
トラブルシューティング
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 で別のアプリから戻ったときに購入が失敗する
購入フローを開始する 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 ビルドエラー
これは、Adapty iOS SDK がプロジェクトに CocoaPods としてインストールされている場合にのみ適用されます。Swift パッケージとしてインストールされている場合、post_install 内の SWIFT_VERSION オーバーライドは適用されません。
FlutterアプリをiOS向けにビルドすると、AdaptyのPodターゲットでSwift 6のコンパイルエラーが発生する場合があります。よくある症状としては、AdaptyUIBuilderLogicでの@Sendable不一致、AdaptyタイプへのSendable準拠の欠落、またはアクター分離エラーなどが挙げられます。
AdaptyのPodはs.swift_version = '6.0'を宣言しており、ビルドにSwift 6が必要です。アプリ本体のコードはSwift 5のままで構いません。Swift 6でのビルドが必要なのは、Adaptyのポッドターゲット(Adapty、AdaptyUI、AdaptyUIBuilder、AdaptyLogger、AdaptyPlugin)のみです。
最も一般的な原因は、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 と表示されているはずです。