モバイルアプリまたはCTVアプリの開発者と協力して、AndroidまたはiOSアプリにSDKをインストールし、実装してください。基本的な実装作業が完了すると、インストールのアトリビューションとアプリ内イベントの計測を開始できる状態になります。
アプリへのDevキーの組み込み
AppsFlyerでは、Devキーを使用してアカウントを一意に識別します。 Devキーは、SDKがアカウントに属するデータを安全に送受信するために必須です。開発者は、SDKをインストールして実装し、Devキーを組み込む必要があります。
Devキーの取得
開発者がSDKをインストールして実装する前に、Devキーを取得してください。
- AppsFlyerのサイドメニューで、設定 > アプリ設定 > Devキー管理を選択します。
-
Devキーをコピーし、モバイルアプリの開発者に共有します。
開発者へのDevキーの共有
Devキー、アプリID、AppsFlyer API v2トークンをモバイルアプリの開発者に共有し、以下の手順に従って実装するよう依頼してください。
- SDK実装ウィザードを使用して、SDKのインストールと実装を自動化します。
- 手順に従って、SDKをインストールし、実装します。
SDKを起動する箇所の選択
AppsFlyer SDKの実装を計画する際は、まずアプリの起動フローのどこでSDKを初期化し、起動するかを決める必要があります。
基本的には、アプリの起動後、できるだけ早くSDKによるデータ送信を開始します。これにより、SDKはインストールイベントと、そのセッション中に発生するその他すべてのアプリ内イベントを確実に取得できます。
ただし、GDPRやCCPAなどのプライバシー保護に関する規制に対応するため、ユーザーが情報の共有に同意するまで、AppsFlyerへのデータ送信を遅らせる必要がある場合があります。
Androidネイティブ
AndroidネイティブでのSDK起動
SDKを起動するクラスの選択
グローバルなApplicationクラスとActivityクラスのどちらでSDKを起動するかを選択します。
-
グローバルな
ApplicationクラスでSDKを起動:一般的には、グローバルなApplicationクラスまたはそのサブクラスでSDKを初期化することが推奨されます。Applicationクラスは、アプリのUIが表示される前に読み込まれ、初期化されるためです。これにより、ディープリンクを含むあらゆる状況でSDKを起動できます。 -
SDKを
Activityクラスで起動(遅延起動):ユーザーがデータ共有への同意を選択できるようにします。ユーザーの同意を得るには、Activityクラスで表示するユーザーインターフェース(UI)が必要なためです。
Android開発者への依頼事項
- 以下について決定し、開発者に伝えてください。
-
ApplicationとActivityのどちらのクラスでSDKを起動するか。 - どのオプトイン/オプトアウトのシナリオを使用するか。
-
- 以下の参考リンクを開発者に共有してください。
iOSネイティブ
iOSネイティブでのSDK起動
iOSでのSDK起動の遅延
SDKの起動方法を計画する際は、ユーザーの同意が得られるまでstartの実行を遅らせるかどうかを検討することが重要です。
SDKにはwaitForATTUserAuthorizationメソッドが用意されています。このメソッドを使用すると、AppsFlyerサーバーにデータを送信する前に、SDKがユーザーの同意を待つ時間を設定できます。
このメソッドのデータフローと、iOSのATTフレームワークとの連携については、App Tracking Transparency(ATT)への対応設定のセクションをご覧ください。
iOS開発者への依頼事項
以下の情報を開発者に共有してください。
- AppsFlyerへのデータ送信を開始するまでのタイムアウト時間(秒)。
- 開発者向けの参考リンク:
- iOS SDKの起動:SDKの起動方法に関する開発者向けガイドとリファレンスです。
-
App Tracking Transparency(ATT)への対応設定:
waitForATTUserAuthorizationメソッドのデータフローと、iOSのATTフレームワークとの連携について説明しています。 -
App Tracking Transparency(ATT)対応の有効化:
waitForATTUserAuthorizationに関する開発者向けガイドとリファレンスです。
Unity
UnityでのSDK起動
SDKの起動方法を説明したDev Hubの記事を開発者に共有してください。
React Native
React NativeでのSDK起動
SDKの起動方法を説明したDev Hubの記事を開発者に共有してください。
プライバシー保護の方針の選択
ユーザーのプライバシーを保護する方法を選択します。例えば、インストール時にSDKを停止する、第三者とのデータ共有を防ぐ、ユーザーデータを匿名化する、特定の識別子を無効にする、といった方法があります。
利用可能な各種プライバシー保護方法の詳細は、SDKのプライバシー保護方法をご覧ください。
アトリビューション
SDKは、アトリビューションのために識別子を収集します。 インストールが正しく記録され、アトリビューションされるよう、以下のガイドラインを確認し、対応してください。
すべてのプラットフォーム
インストールを一意に識別するID
アプリが新規インストールされるたびに、AppsFlyer IDが自動的に作成されます。マーケティング担当者による作業は不要です。
この識別子を使用して、以下の操作を行えます。
- サーバー間(S2S)でアプリ内イベントを送信します。
- AppsFlyer IDを、バックエンドシステムのユーザーレコードと照合します。
- アプリ内イベントのローデータレポートをダウンロードし、appsflyer_idを使用してユーザーの行動やジャーニーを分析します。
Androidのみ
以下のセクションでは、Google Playストアまたはサードパーティのアプリストアにおけるアトリビューションの考慮事項を説明します。
Google Playで公開しているアプリのアトリビューション
Google Play Install Referrer
Google Play Install Referrer APIは、アトリビューションの精度を高め、インストール不正を防ぎます。また、Google Playからリファラデータ(初回インストール時のアプリバージョンなど)を安全に取得できます。
Google Play Install Referrer APIを追加する手順を開発者に共有することをおすすめします。
GAID
SDK V4.8.0以降では、AppsFlyerがこのデバイス識別子を自動的に収集します。
サードパーティのアプリストアで配信しているアプリのアトリビューション
AppsFlyerでは、Amazon、Opera、GetJar、Baidu、Huaweiなど、サードパーティのアプリストア経由のインストールをアトリビューションできます。 これにより、Google Playストアを利用できない市場でもアプリを宣伝し、より多くのユーザーにリーチできます。
AppsFlyerは、サードパーティのアプリストアにおけるアトリビューションを、以下の方法でサポートしています。
-
IMEIまたはAndroid ID:SDKは、IMEIやAndroid IDを自動的には収集しません。ただし、これらの識別子を収集する必要がある場合(中国国内市場向けのアプリなど)は、開発者が以下のいずれかの収集方法を実装できます。
-
手動収集:アプリが
setImeiDataまたはsetAndroidIdDataAPIを使用して、IMEIまたはAndroid IDをSDKに渡します(以下のタブにある関数リファレンスを参照)。 SDKは、このデータをAppsFlyerサーバーに送信します。Androidネイティブ
以下の関数については、Android SDKリファレンスをご覧ください。
setImeiData- <0><1>setAndroidIdData1>0>
Unity
以下の関数については、Unity SDKリファレンスをご覧ください。
-
デバイスID収集のオプトイン:setCollectIMEIとsetCollectAndroidIDを使用して、SDKによるIMEIまたはAndroid IDの収集を有効にします(以下のタブにある関数リファレンスを参照)。
Androidネイティブ
以下の関数については、Android SDKリファレンスをご覧ください。
Unity
以下の関数については、Unity SDKリファレンスをご覧ください。
React Native
以下の関数については、React Nativeのリファレンスをご覧ください。
-
- OAID:サードパーティのAndroidアプリストア経由のインストールをアトリビューションします。詳細は、OAIDの実装ガイドをご覧ください。
- インストールリファラ:SDKは、Samsung Galaxy StoreとHuawei AppGalleryからのリファラデータの取得に対応しています。
iOSのみ
以下のセクションでは、iOS 14以降のデバイスへの対応に関する重要な情報を説明します。
App Tracking Transparency(ATT)への対応設定
背景
iOS 14.5以降では、IDFAの収集にユーザーの同意が必要です。つまり、IDFAへのアクセスは、App Tracking Transparency(ATT)フレームワークによって管理されます。 iOS 14以降のデバイスでは、SDKがATTフレームワークを使用してデバイスのIDFAにアクセスします。 ATTの基本的な仕組みについては、ATTの基本原則をご覧ください。
iOSネイティブ
Dev HubのATTの実装に関する開発者向け手順をご覧ください。
Unity
Dev HubのATTの実装に関する開発者向け手順をご覧ください。
IDFAを使用してアトリビューションを行う場合は、IDFAを初回起動時に送信することが重要です。 このため、SDKにはwaitForATTUserAuthorizationメソッドが用意されています。
waitForATTUserAuthorizationの概要
ATTの同意ダイアログを表示する予定がない場合は、waitForATTUserAuthorizationを呼び出さないでください。
waitForATTUserAuthorizationを使用すると、AppsFlyerサーバーへのデータ送信を保留し、SDKがATTのステータスの確定を待つ時間を設定できます。
ユーザーがアプリを起動すると、ATTのステータスはnotDeterminedです。 waitForATTUserAuthorizationのタイムアウト時間中、SDKは起動イベントと、その後に発生するアプリ内イベントをメモリ上のキューに保存します。これは、オフラインイベントを記録する仕組みと同様です。
- ユーザーがATTの同意ダイアログで同意した場合(IDFAの収集):
- SDKは、キャッシュされたイベントにIDFAを追加します。
- SDKは起動し、タイムアウト時間の終了を待たずに、IDFAを含むキャッシュ済みイベントを送信します。
- ユーザーがATTの同意ダイアログで拒否した場合:SDKは起動し、タイムアウト時間の終了を待たずに、IDFAを含まないキャッシュ済みイベントを送信します。
- タイムアウト時間が終了してもATTのステータスがnotDeterminedのままの場合:SDKは起動し、IDFAを含まないキャッシュ済みイベントを送信します。
考慮事項
-
requestTrackingAuthorizationを、waitForATTUserAuthorizationを設定せずに呼び出すと、iOS 14以降のデバイスでは、起動イベントやその他のイベントがIDFAを含まずに送信されます。 - タイムアウト時間中にユーザーがアプリをバックグラウンドに移した場合:
- アプリがフォアグラウンドに戻るまで、タイマーが一時停止します。
- イベントはメモリ上にキャッシュされます。
- タイムアウト時間中にユーザーがアプリを終了し、アプリのプロセスが停止した場合:
- 次回のアプリ起動時に、タイマーが再開始されます。
- キャッシュされたイベントは失われます。
ATTの同意ダイアログのカスタマイズ
ATTの同意ダイアログはカスタマイズできます。同意を求める目的を明確に伝えるメッセージを表示すると、ユーザーの同意率向上につながる可能性があります。
メッセージを作成する際は、以下の点を考慮してください。
- アプリが同意を求める理由を、ユーザーに最も分かりやすく伝えられる表現を使用します。
- ユーザーのデータをどのように使用するかを伝えます。 ユーザーのプライバシーとデータの使用に関する詳細をご覧ください。
メッセージが完成したら、文面と実装手順を開発者に共有してください。
iOSネイティブ
Dev HubのATTの同意ダイアログのカスタマイズに関する開発者向け手順をご覧ください。
Unity
Dev HubのATTの同意ダイアログのカスタマイズに関する開発者向け手順をご覧ください。
SKANアトリビューションへの対応
SKANアトリビューションに完全に対応するには、iOS SDK V6.2.3以降にアップグレードしてください。
SKANは、広告経由のアプリインストールを検証するためにiOSが使用するクラスです。アプリインストールの検証には、広告を表示するアプリと、広告対象のアプリが関わります。
広告を表示するアプリとは、アドネットワークの広告を表示することで広告キャンペーンに参加するアプリです。アプリに広告を表示するための設定は、AppsFlyer SDKの対応範囲外です。設定するには、Appleの手順に従ってください。
広告対象のアプリ(AppsFlyer SDKを実装したアプリ)では、AppsFlyerのSKANソリューションがSKANを使用してアトリビューションのポストバックを提供します。AppsFlyerは、ユーザーのプライバシーを保護しながら、データの収集・変換・集計を行います。アプリの初回起動時には、マーケティング担当者が指定した設定に基づき、AppsFlyerプラットフォームがSDKにSKANコンバージョン値の設定方法を指示します。
SKANソリューションを利用するには、以下の点を確認してください。
- マーケティング担当者は、AppsFlyerでSKAN計測を設定する必要があります。 開発者による作業は不要です。
- AppsFlyer SDKが、必要なSKAN APIを自動的に呼び出します。
- AppsFlyerでSKANアトリビューションを行う場合は、他のSDKによるSKANの呼び出しを必ず無効にしてください。
- 開発者・マーケティング担当者ともに、App Storeで追加の操作や登録を行う必要はありません。
SKANアトリビューションを無効にするには、SDK側で無効にするよう開発者に依頼してください。
iOSネイティブ
SKANアトリビューションを無効にするには、disableSKAdNetworkを使用します。
Unity
SKANアトリビューションを無効にするには、disableSKAdNetworkを使用します。
React Native
SKANアトリビューションを無効にするには、disableSKAdを使用します。
アプリ内イベントの記録
アプリ内イベント(IAE)を使用すると、アプリ内で何が起きているかを把握できます。アプリ内イベントを記録することで、投資対効果(ROI)や顧客生涯価値(LTV)などのKPIを計測できます。記録するイベントは、時間をかけて定義することをおすすめします。
計測するアプリ内イベントが決まったら、イベント名とパラメータを開発者に共有し、以下のリンクも添えてください。
- アプリ内イベントの実装専用の手順が用意されているSDK実装ウィザード。
- SDKでのアプリ内イベントの実装手順。
アプリ内イベントの定義方法と開発者への共有方法は、リッチアプリ内イベントガイドをご覧ください。
すべてのプラットフォーム
収益の記録
収益は、どのアプリ内イベントでも送信できます。収益を含める場合は、必ずaf_revenueパラメータを使用してください。 AppsFlyerがダッシュボードとローデータレポートで実際の収益として集計するイベントパラメータは、このパラメータのみです。 詳細はこちら。
アプリ内購入の検証
AppsFlyer SDKは、アプリ内購入のサーバー側での検証に対応しています。アプリ内購入を検証すると、アプリ内購入イベントがAppsFlyerに自動送信されます。このイベントを別途送信すると、イベントが重複して記録されます。
業種別の推奨イベント
旅行、ゲーム、Eコマースなどの業種別の推奨アプリ内イベント一覧をご覧ください。
OneLinkによるディープリンク
OneLinkは、複数のプラットフォームにまたがるアトリビューション、リダイレクト、ディープリンクに対応するAppsFlyerのソリューションです。
すべてのプラットフォーム
デバイスの検出とリダイレクト
アプリをインストールしていないユーザーに対しては、OneLinkがデバイスの種類を検出し、適切な遷移先(Google Play、Apple App Store、サードパーティのアプリストア、Webページなど)にリダイレクトします。リダイレクト先は、OneLinkテンプレートの設定に基づいて決まります。 詳細はこちら
ディープリンク
アプリをインストール済みのユーザーに対しては、OneLinkがアプリを起動します。アプリを起動するだけでなく、ディープリンクによってアプリ内の特定のアクティビティやページにユーザーを誘導することも可能です。この機能を利用するには、開発者が以下のいずれかを使用して、統合ディープリンク(UDL)を実装する必要があります。
- ディープリンクの実装専用の手順が用意されているSDK実装ウィザード、または
- 統合ディープリンクのSDK実装手順。
注意:
- UDLには、SDK V6.1以降が必要です。
- すでにOneLinkでディープリンクを利用している場合は、UDLではなく従来の方法を使用している可能性があります。
設定方法は、ディープリンクとディファードディープリンクのガイドをご覧ください。
ディファードディープリンク
アプリをインストールしていないユーザーに対しては、OneLinkがデバイスの種類を検出し、Google Play、Apple App Store、サードパーティのアプリストア、Webページなど、適切な遷移先にリダイレクトします。ユーザーがアプリを起動した後は、ディファードディープリンクを使用して、アプリ内の特定のアクティビティやページに誘導できます。
この機能を利用するには、開発者が以下のいずれかを使用して、ディファードディープリンクを実装する必要があります。
- ディープリンクの実装専用の手順が用意されているSDK実装ウィザード、または
- ディファードディープリンクのSDK実装手順。
注意:
- UDLには、SDK V6.1以降が必要です。
- すでにOneLinkでディファードディープリンクを利用している場合は、UDLではなく従来の方法を使用している可能性があります。
設定方法は、ディープリンクとディファードディープリンクのガイドをご覧ください。
アトリビューションデータとディープリンクデータの取得
アトリビューションデータとディープリンクデータを取得する方法を、以下の表にまとめています。
| 方法 | 関係者 | 結果が返るまでの時間 | 取得方法 | アトリビューションデータ | ディープリンクデータ | 利用対象 |
| Push API | • マーケティング担当者 • バックエンド開発者 | 通常、数分以内 | バックエンド | 可 | 不可 | プレミアム機能 |
| Pull API | • マーケティング担当者 • バックエンド開発者 | • 定期的に取得(リアルタイムではありません)。 • ローデータレポートのダウンロードをスケジュールできます。 | バックエンド | 可 | 可 | ローデータレポートはプレミアム機能 |
| Data Locker | • マーケティング担当者 • バックエンド開発者 | 1時間ごとのレポートを1~3時間以内に取得可能 | 以下のいずれかのクラウドストレージ:• AppsFlyerが所有するAWSバケット • 自社が所有するストレージ(AWSまたはGCS) | 可 | 可 | プレミアム機能 |
| コンバージョンデータの取得(GCD) | • マーケティング担当者 • モバイルアプリ開発者 開発者向けドキュメントを参照 | 最大5秒 | SDK | 可 | 可 | すべてのアカウント |
| 統合ディープリンク(UDL) | • マーケティング担当者 • モバイルアプリ開発者 開発者向けドキュメントを参照 | 最大1秒 | SDK | 不可 | 可 | すべてのアカウント |
iOS 14.5以降でATTに同意していないユーザーについては、以下の点に注意してください。
- 有料媒体とオウンドメディアでUDLを使用する場合、ディープリンクデータを取得できます。
- 有料媒体でGCDを使用する場合、取得できるデータは制限され、アトリビューションやディープリンクの詳細は含まれません。
以下の方法をおすすめします。
- Push APIを使用してアトリビューションデータを取得し、自社サーバーに送信して、後続の処理を行います。この方法では、データが利用可能になるまで待ってから取得するため、精度が高く、ほぼリアルタイムで処理できます。 GCDはリアルタイムでデータを返しますが、アトリビューションの最終的な判定までに5秒を超える時間がかかる場合は、データが不正確になる可能性があります。
- Pull APIを使用して定期的(例えば日次)にリアルタイムのアトリビューションデータを補完し、通信エラーなどによって生じるデータの欠落にも対応します。
SDK実装のテスト
SDKの実装が完了したら、AppsFlyer管理画面の「SDK実装テスト」ページで、オーガニック/非オーガニックインストール、アプリ内イベント、ディープリンク(リターゲティング)をテストできます。 これにより、インストールとアプリ内イベントが正しく記録され、アトリビューションされていることを確認できます。
テストのシナリオと手順は、SDK実装のテストをご覧ください。
注意:アトリビューションのテストを行う際は、各インストールが新規インストールとして記録されるよう、テストデバイスを登録してください(AndroidまたはiOS)。テストデバイスを登録すると、インストールが再インストールとして記録されるのを防げます。
関連記事
- CTV・PC・コンソール向けプラットフォームの概要