Flutter × AppsFlyer で広告効果の測定
はじめに
モバイルアプリの利用拡大のために、インターネット、SNS 広告を利用することも多いと思います。これらの広告効果測定のため Mobile Measurement Partner (MMP) を利用することが一般的です。
モバイル計測パートナー(MMP)は、サードパーティプロバイダーとして、アプリデータの計測、アトリビューション、収集、管理を行い、ツールを利用する企業のキャンペーンパフォーマンスに関する情報を提供します。
MMP の説明についてはこちらの Adjust の解説記事がわかりやすいです。この記事では MMP の 1 つである AppsFlyer を Flutter アプリに導入しイベント計測する方法を解説します。
AppsFlyer と Google Analytics の用途の違い
AppsFlyer でもアプリ内にイベントを仕込み、ユーザーのイベントを計測することが可能です。一方でユーザーの行動やエンゲージメント計測に Google Analytics for Firebase, Amplitude などを使っている方も多いと思います。これらの違いは何なのでしょうか?
AppsFlyer, Adjust などの MMP の主目的は 「広告効果計測(アトリビューションや LTV/ROAS 計測」 です。そのため細かくユーザーの行動ログを送信するというより、収益に直結するイベントを送信しどのキャンペーンや広告媒体で獲得したユーザーが収益の観点から価値が高いのかを明確化します。
例えば、 AppsFlyer が eコマースアプリで計測を推奨しているイベントは以下です。

そのためユーザーの詳細行動のイベントを追跡し、アプリの改善や A/B テストなどの実施には Google Analytics などを利用し、マーケティング施策の効果測定用に MMP を利用するという併用策が良いでしょう。
Flutter 用の SDK
appsflyer_sdk を追加するだけで簡単に導入できます。今回はアトリビューションとイベント計測だけなので Deep Link の設定は必要ありません。
AppsFlyer の初期化
まずアプリを起動したら AppsFlyerSdk を初期化する必要があります。
final option = AppsFlyerOptions(
afDevKey: 'YOUR_DEV_KEY', // AppsFlyer から取得
appId: 'YOUR_APP_ID', // Apple App ID
showDebug: true, // 本番環境では false に
manualStart: true, // これを true にしないと
);
final sdk = AppsflyerSdk(option);
await sdk.initSdk(
registerConversionDataCallback: true,
registerOnAppOpenAttributionCallback: false,
registerOnDeepLinkingCallback: false,
);
// Conversion data callback
sdk.onInstallConversionData((res) {
_logger.i("onInstallConversionData res: $res");
});
sdk.startSDK(
onSuccess: () {
_logger.i("Succeeded in starting AppsFlyer SDK");
},
onError: (code, message) {
_logger.e(
"Exception during AppsFlyer initialization errorCode: $code errorMessage: $message",
);
},
);
-
manualStart オプション:
trueにしない場合、 initSdk のタイミングで自動で startSDK が実行されるため、手動でのstartSDK 実行や onSucess や onError のハンドリングができない - registerOnAppOpenAttributionCallback , registerOnDeepLinkingCallback: DeepLink を実装しないなら false のままで問題ない
- 環境ごとに Dev Key を切り替える場合は、Flutter の環境変数や dart-define を活用します。
flutter run --dart-define=APPSFLYER_DEV_KEY=your_dev_key
イベント送信の実装例
イベント送信自体は非常にシンプルで以下のような関数を送信したいイベント発火の箇所に仕込むだけです。
Future<bool?> logEvent(String eventName, Map? eventValues) async {
bool? result;
try {
result = await appsflyerSdk.logEvent(eventName, eventValues);
} on Exception catch (e) {}
print("Result logEvent: $result");
}
AppsFlyer では事前定義済みのイベントはこちらのイベントジェネレータで一覧化できるのでマーケターとの共有資料作成にもおすすめです。
サブスクリプション収益のイベント送信
サブスクリプションではユーザーの自動更新、キャンセル、アップグレード、ダウングレードなど様々な収益の増減イベントがあります。単純に課金ぺージのタップイベントにログの送信を仕込んだだけでは、これらの収益を正確にトラッキングすることはできません。
例えばサブスクリプションの自動更新はユーザーが何もしていなくても(アプリを開いていなくても)発生するため、ユーザーの行動を契機としたイベント送信だけでは不十分です。
これを追跡するために、以下の 2 つの方法があります。
- ROI360 を使う (プレミアム機能)
- 自前のサーバーで App Store Server Notification などを受け取ってレシート検証をしている場合はそれに合わせてサーバーから AppsFlyer にログを送信する
プレミアム機能なしで収益を正確にトラッキングするには後者の自前のサーバーからログを送る必要があります。
デバッグ方法
テストデバイスの登録
テスト端末を登録する理由は👇です。
アトリビューションテストを行う場合、リアトリビューション期間により、インストールのアトリビューションは90日間に1回に制限されます。したがって、同じ端末を繰り返し利用してインストールのアトリビューションをテストすると、何も記録されません。端末をテスト端末として登録すると、その端末での繰り返しインストールが再インストールとして記録されなくなります。
リアルタイムでのイベント計測の確認には後述する ATT の許可が必要 (iOS)。
非オーガニックインストールの確認
オーガニックインストール、イベント計測は AppsFlyer SDK を適切に初期化し、イベントを送信していれば簡単にダッシュボードに反映されるためすぐに確認可能です。
一方、非オーガニックインストール計測の確認では、 AppsFlyer 公式の手順 がうまくいかず一手間かかりました。
- アプリをアンインストール
- 上述したテスト端末の登録
- iPhone のメモアプリなどに
https://app.appsflyer.com/<iOSのApp ID>?pid=Test&c=Test&idfa=<端末のIDFA>のリンクを貼りタップ (例 :https://app.appsflyer.com/id1111111111?pid=Test&c=Test&idfa=AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE) - アプリを実行して起動する
参考 : https://qiita.com/maktag/items/9b362d84c216974798bb
まとめ
本記事では、Flutter アプリに AppsFlyer SDK を導入し、イベントトラッキングを実装する方法を解説しました。
私自身、MMP と Google Analytics の役割の違いや、AppsFlyer でのサブスクリプションの正確な計測など新しいことを知れて勉強になりました。どなたかのお役に立てれば幸いです🙇
Discussion