概要: AppsFlyerは ユーザーのデバイスにまだアプリがインストールされていることを確認するために1日に1回サイレントプッシュ通知を行って 、アンインストールイベントを計測し、 それを特定のメディアソースにアトリビューションします。 アンインストールのローデータは、管理画面からのダウンロード、Pull API、Data Lockerのいづれかの方法にて取得可能です。
アンインストール計測の利点
-
メディアソースのクオリティの比較
アンインストールの計測は、さまざまなメディアソース、キャンペーン、広告クリエイティブ、または特定の地域などから獲得したユーザーの品質を比較するのに役立ちます。 -
ユーザーのプライバシーを保護します
多くの広告主は、ユーザーのリテンションを維持するためにリエンゲージメントキャンペーンを実行しています。ただし、これを行うと、App Storeの利用規約に矛盾する可能性があります。この場合に、アンインストールデータを使用してリターゲティングオーディエンスから、既にアンインストールしたユーザーを除外することができます。
オペレーティングシステム
アンインストール計測機能をサポートするには、アプリの開発が必要です。
開発者向けの手順は次のとおりです。
ヒント
何人のユーザーが、アプリをいつアンインストールしましたか?
全てのカテゴリ/国の内訳データをこちらからご確認いただけます。
重要
2019年5月29日以降、GoogleはGCMサーバーとクライアントAPIを削除しました。メッセージングを新しいアプリに統合する場合は、FCMを使用してください。GCMを使用している場合は、FCMにアップグレードしてください。FCMにアップグレードした後、この記事の手順に従って、Androidのアンインストール計測をセットアップします。
詳細については、Googleのドキュメントをご覧ください。
Androidアンインストール計測
Firebase Messagingを使用したアンインストール計測は、Android SDKバージョン4.7.0以降でサポートされています。
1. Firebaseサーバーキーの取得
- Firebase Android Applicationプロジェクトを作成(まだ作成していない場合)、または Google Developer Consoleからプロジェクトを移行します(Google Developer Consoleの手順に従ってください)。詳細は、Firebaseをご覧ください。
- Firebase Consoleを開きます。
- Firebase Consoleページで、Project Settings(プロジェクト設定)に移動します(ページの左パネルでOverview(概要)の横にある歯車をクリック)。
- [Cloud Messaging] タブで、2つのサーバーキーを確認できます(下のスクリーンショットを参照):
- サーバーキーをコピーします。
2. AppsFlyer管理画面でサーバーキーを入力する
- AppsFlyerのアプリ管理画面に移動します。
- 左側のメニューから アプリの設定 を選択します。
- サーバーキーをコピーしてFireBaseサーバーキーを設定します。
3. アプリでFirebase-Messagingを設定する
- Firebase consoleから google-services.json をダウンロードしてください。
- google-services.json をアプリのモジュールディレクトリに追加します。
- ルートレベルのbuild.gradleファイルにルールを追加して、google-servicesプラグインを含めます。
buildscript { // ... dependencies { // ... classpath 'com.google.gms:google-services:4.2.0' // google-services plugin } }
- アプリレベルのbuild.gradleファイルにFCM dependencyを追加します。
dependencies { implementation 'com.google.firebase:firebase-messaging:17.3.4' } // ADD THIS AT THE BOTTOM apply plugin: 'com.google.gms.google-services
Firebaseの最新バージョンはこちら:Firebase公式ドキュメント
「見つかりませんでした..」というエラーが表示される場合は、Android SDK Managerで最新のGoogleリポジトリを使用していることを確認してください。
4. AppsFlyerアンインストール計測サービスの実装
開発者がアンインストールケイソクのみを目的としてFCMをAppsFlyerと統合する場合、開発者はSDKに含まれている appsFlyer.FirebaseMessagingServiceListener サービスを利用できます。
そのためには、このサービスをAndroidManifest.xmlに追加します。
<application
<!-- ... -->
<service
android:name="com.appsflyer.FirebaseMessagingServiceListener">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<!-- ... -->
</application>
appsflyer.FirebaseMessagingServiceListener は、Firebaseのデバイストークンを受信するために使用される、Firebaseの<> FirebaseMessagingService クラスを拡張します。
import com.appsflyer.AppsFlyerLib;
import com.google.firebase.messaging.FirebaseMessagingService;
public class MyNewFirebaseManager extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
// Sending new token to AppsFlyer
AppsFlyerLib.getInstance().updateServerUninstallToken(getApplicationContext(), s);
// the rest of the code that makes use of the token goes in this method as well
}
}
このサービスが機能するには、AndroidManifest.xmlに追加する必要があります。AppsFlyer SDKを実装する前にアプリケーションでFCMが使用されていた場合、このサービスはすでに拡張されている可能性が高く、次の行をonTokenRefresh()メソッドに追加するのみで済みます。
AppsFlyerLib.getInstance().updateServerUninstallToken(getApplicationContext(), refreshedToken);
関連サービスを AndroidManifest.xml に追加したことも確認してください。
<service
android:name=".MyNewFirebaseManager">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Androidのアンインストールプッシュ通知がサイレントでないことを解決する
Firebaseの onMessageReceived
メソッドを上書きし その中に独自のロジックを実装すると、アンインストールプッシュ通知がサイレントにならない場合があり、ユーザーエクスペリエンスに影響を与える可能性があります。これを防ぐには、メッセージに af-uinstall-tracking
が含まれているかどうかを確認します。次の例を参照してください。
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if(remoteMessage.getData().containsKey("af-uinstall-tracking")){
return;
} else {
// handleNotification(remoteMessage);
}
}
5. Proguardを使用したアンインストール計測
ProGuardを使用している場合は、次のルールを追加します。
-dontwarn com.appsflyer.**
-keep public class com.google.firebase.messaging.FirebaseMessagingService {
public *;
}
6. Androidアンインストール計測のテスト
アンインストール指標はオーバービュー管理画面で確認できます。
アプリをアンインストールしたユーザーのリストは、アンインストール ローデータレポートからご利用いただけます。
Androidアンインストール計測のテスト方法:
- アプリをインストールします。
-
アプリをアンインストールします。 注!アプリをインストール後すぐにアンインストールできます。
アンインストール計測は毎日処理されるため、アンインストールイベントは24時間以内に登録されます。
アプリがこの最中に再インストールされた場合は、アンインストールイベントは記録されません。
アプリのアンインストールイベントは、AppsFlyerのローデータレポートと集計パフォーマンスレポートに反映されるまでに最大48時間かかります。
テスト方法は、AndroidアプリがGoogle Playでリリース済み、リリースの保留中、外部ストアで公開されていても同じです。
7. アンインストール計測を無効にする
Firebase/GCM サーバーキーが提供されている場合、アプリのアンインストール計測はデフォルトで有効になります。アプリ所有者はこの機能を管理画面上で無効にできます。
注!アンインストールを計測するためには:アプリインストールの時点でアンインストール計測を有効にするがオンになっている必要があります。アンインストール計測を有効にするがオフの時に発生したインストールに関しては計測されません。
アンインストール計測を無効にする方法:
- AppsFlyerにて、アプリ設定を開きます。
- アトリビューション > アンインストールへスクロールダウンし、アンインストール計測を利用するをオフにします。
注意
AppsFlyerの iOSアンインストールイベントデータは、Appleプッシュ通知サービス(APN)に依存しています。プライバシーに関するポリシーにより、APNは、ユーザーがアプリを削除すると、インストールから少なくとも8日が経過した場合にのみリアルタイムで報告します。つまり、iOSのアンインストールデータは8日目以降にしか利用できません。
こちらから詳細をご確認ください。
iOSアンインストール計測
重要:
この機能を使用するには、SDKバージョン4.5.0以上が必要です。 iOS 13以降でアンインストールを測定する場合は、SDKバージョン4.10.4以降が必要です。
この機能には、p12証明書も必要です。p8証明書はサポートされていません。
注意
プッシュ通知の権限を拒否するユーザーは、アンインストール計測はできません。
1. アプリを見つける
2. アプリIDをまだ登録していない場合は、 + アイコンをクリックして、フォームに入力します。
3. Push Notifications(プッシュ通知)チェックボックスを選択します。
4. アプリケーションを展開すると、 黄色または緑色のステータスアイコンが付いたプッシュ通知の設定が2つ表示されます。
5. Settings (設定)をクリックして続行します。
注意
プッシュ通知がすでに設定されている場合、 Settings (設定)ボタンに Edit (編集)という名前が付いていることがあります。Settings/Edit(設定/編集)ボタンを利用できない場合は、 チームエージェント または管理者でないことが考えられます。デベロッパーアカウントを最初に作成したユーザーがチームエージェントであり、チームエージェントがこのセクションの残りの手順を実行できます。
2. 証明書を生成する
1. Production certificate(本番環境の証明書)オプションで、Apple Push Notification service SSL (Sandbox & Production)(Appleプッシュ通知サービスSSL(サンドボックス&本番環境))を選択します。プッシュ通知に VoIP を使用している場合は、[VoIP サービス証明書] を選択します。
2. Production SSL Certificate(本番環境のSSL証明書)オプションで Create Certificate (証明書の作成)をクリックします。
3. Create Certificate(証明書の作成)をクリックした後、 Add iOS Certificate Assistant(iOS証明書追加アシスタント)が表示されます。アシスタントの指示に沿って操作し、 Continue(続行)をクリックします。
4. 先ほど作成したCertificate Signing(証明書の署名)リクエストを使用して、APNSプッシュSSL証明書を生成します。
5. ダウンロードの準備が完了すると、Download(ダウンロード)ボタンが表示されます。これが更新されるには、ページを再度読み込むことが必要になる場合があります。新たに作成した証明書を次のようにダウンロードします。
6. 証明書を開きます。証明書を開くと、キーチェーンアクセスが開きます。
キーチェーンアクセスの My Certificates(自分の証明書)に、ダウンロードした証明書 が表示されます。証明書が表示されない場合は、Certificates (証明書)に配置されているかどうかを確認します。
注意
p12証明書をアップロードまたは変更できるのは、アカウント管理者のみです。
3. 証明書を更新する
開発用または本番環境用のプッシュSSL証明書を更新する場合は、証明書を初めてアップロードする場合と同様に、上記の手順に沿って操作します。この変更を行うために、以前の証明書を失効させる必要はありません。新しい証明書をアップロードする際に古い証明書を引き続き使用できるようにするため、本番環境用の証明書を同時に2つ作成することができます。
4. P12ファイルをエクスポートする
AppsFlyer管理画面に戻る前の最後の手順として、署名する証明書を.p12ファイルとして保存します。
1. キーチェーンアクセスに先ほど追加した証明書を選択します
2. ファイル > エクスポートアイテム をクリックします
3. 左下のCategory(カテゴリ)メニューで My Certificates を選択します。
My Certificates がハイライト表示されていない場合は、p12ファイルとして証明書をエクスポートできません。
3. ファイルを保存する際に、Personal Information Exchange (.p12)形式 を使用します。
4. Apple Push Services(Appleプッシュサービス)と記載され、次のように表示されていることを確認します。
5. AppsFlyerプラットフォームでアプリの管理画面に移動します。
6. 左側のメニューで App Settings を選択します。
7. アップロードアイコンをクリックし、アップロードするP12ファイルを選択します。
8.(オプション)P12 certificate がパスワードで保護されている場合は、 P12証明書のパスワード にパスワードを入力します。
9. Validate(検証)をクリックして、有効であるかを確認するために証明書をAppsFlyerに送信します。
10. Save Settings をクリックします。
5. SDKの実装
アンインストールデータの収集を有効にするため、プッシュ通知はアプリのコードレベルで登録する必要があります。
//add UserNotifications.framework
import UserNotifications
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//...
// iOS 10 support
if #available(iOS 10, *) {
UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in }
application.registerForRemoteNotifications()
}
// iOS 9 and iOS 8 support
else if #available(iOS 8, *), #available(iOS 9, *) {
UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
UIApplication.shared.registerForRemoteNotifications()
}
// iOS 7 support
else {
application.registerForRemoteNotifications(matching: [.badge, .sound, .alert])
}
return true
}
// Called when the application sucessfuly registers for push notifications
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
AppsFlyerTracker.shared().registerUninstall(deviceToken)
}
次のコードをAppDelegate.mに追加します。
- #import <UserNotifications/UserNotifications.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// The userNotificationTypes below is just an example and may be changed depending on the app
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
}];
[[UIApplication sharedApplication] registerForRemoteNotifications];
// if you do not use push notificaiton in your app, uncomment the following line
//application.applicationIconBadgeNumber = 0;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[[AppsFlyerTracker sharedTracker] registerUninstall:deviceToken];
}
}
AppDelegate.h 内に次のコードを挿入して、インターフェイス宣言に UNUserNotificationCenterDelegate を追加します。
#import <AppsFlyerLib/AppsFlyerTracker.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, AppsFlyerTrackerDelegate>
上記のコードスニペットは、ユーザーにプッシュ通知を送信する権限をリクエストします。ただし、アンインストールの測定にプッシュ通知をバックグラウンドモードでのみ使用している場合は、ユーザーの承認を求める必要はありません。これらのプッシュ通知がサイレントプッシュ通知しているので、ユーザーからの許可を求める必要がありません。
バックグラウンドモードでのプッシュ通知のユーザー権限
サイレントプッシュ通知のみを使用している場合は、アプリのCapabilitiesでバックグラウンドモードの リモート通知を必ず有効にしてください。
6. プッシュ通知
XCode capabilities(XCode機能)タブに必ずプッシュ通知を追加します。これを追加しない場合、deviceTokenが 収集されません。
7. アンインストールをテストする
iOSアンインストール計測のテスト:
- アプリをインストールします。
- アプリをアンインストールします。 注!アプリをインストールした直後にアンインストールできます。
Xcode または TestFlight からアンインストールテストをする場合は、トークンがサンドボックス環境から生成されていることをSDKに知らせることが重要です。次のAPIを使用します:
AppsFlyerTracker.shared().useUninstallSandbox = true
[AppsFlyerTracker sharedTracker].useUninstallSandbox = true;
注意!アンインストールはAppsFlyer管理画面には即座に表示されません。
- アンインストールがレポートに表示されるまでに平均9日かかります
- サンドボックス環境から発生したアンインストールがレポートに表示されるには、 1 か月以上 かかる場合もあります。
また、アンインストールの日付は、 アンインストールが報告された日付です 。詳しくは、以下のセクションをご覧ください。
8. AppsFlyer管理画面でアンインストールデータを確認する
アンインストール計測は、集約されたパフォーマンステーブルのメインダッシュボードに表示されます。
Appleプッシュ通知サービスの直近の変更により、アンインストールがダッシュボードに表示されるまでに最低9日かかります。 AppsFlyerは、24時間ごとのアンインストールのメトリックを更新および集計します
例
- 1日目 - ユーザーがアプリをインストールします
- 4日目 - ユーザーがアプリをアンインストールします
- 12日目 - アンインストールから8日後にApple Push Notification Service がアプリの削除をレポートします
- 13日目 - AppsFlyer管理画面とローデータにアンインストールデータが表示されます
詳細については、SDK統合ガイドの iOSアプリのアンインストール計測を参照してください。
9. アンインストール計測を無効にする
P12証明書が提供され有効である場合、アプリのアンインストール計測はデフォルトで有効になります。アプリ所有者はこの機能を管理画面上で無効にできます。
注!アンインストールを計測するためには:アプリインストールの時点でアンインストール計測を有効にするがオンになっている必要があります。アンインストール計測を有効にするがオフの時に発生したインストールに関しては計測されません。
アンインストール計測を無効にする方法:
- AppsFlyerにて、アプリ設定を開きます。
- アトリビューション > アンインストールへスクロールダウンし、アンインストール計測を利用するをオフにします。
アンインストールイベントのポストバック
AppsFlyerを使用すると、アンインストールが認知された全てのユーザーに対して、連携しているパートナーにアンインストールイベントポストバックを送信できます。アンインストールイベントはAppsFlyer管理画面上で af_uninstall
と表示されます。
アンインストールイベントのマッピング
アプリのアプリ内イベントをマッピングするのと同様に、af_uninstall
イベントをマッピングできます。
アプリ内イベントと同様に、AppsFlyerは、イベントが実際に発生してAppsFlyerによって記録された場合にのみポストバックを送信できます。したがって、 af_uninstallのマッピングは、アンインストール計測の実装が完了した場合のみ機能します。オーバービュー管理画面またはアンインストールのローデータレポートにアンインストールが表示されない場合、af_uninstall
イベントをマッピングしていても、アンインストールポストバックはパートナーに送信されません。
af_uninstall
のタイミング
通常のアプリ内イベントのポストバックと異なり、af_uninstall
イベントはリアルタイムで送信されません。
AppsFlyerのローデータとパートナーポストバックでは、af_uninstall
に紐づくイベント時刻は、AppsFlyerがアンインストールを認識した時刻を指します。
- Androidデバイスの場合:実際のアンインストールから24-48時間後
- iOSデバイスの場合:実際のアンインストールから9-11日後
制限事項
af_uninstall イベントは、アプリ内イベントポストバックレポートに含まれません。
現在、af_uninstall イベントはすべてのパートナーで利用できるわけではありません。
パートナーとのマッピングを希望するが、そのイベントがパートナーにはない場合は、専任のCSMにお問い合わせいただくか、hello@appsflyer.com までご連絡ください。
あなたがパートナーで、af_uninstallイベントを受け取りたい場合は、専任のPDMにお問い合わせいただくか、partners@appsflyer.com までご連絡ください。