Краткий обзор: AppsFlyer использует бесшумные push-уведомления раз в день, чтобы проверить, что приложение удалено с устройства пользователя, и подсчитывает события удаления для определенного приложения, атрибутируя их определенному медиа-источнику. AppsFlyer предоставляет сырые данные об удалении в виде доступного для скачивания отчета, Pull API и Data Locker.
Преимущества использования функции измерения количества удалений
-
Сравнение качества медиа-источников
Показатель удалений — это метрика, которая позволяет сравнить качество пользователей, приобретенных из различных медиа-источников, кампаний, отдельной рекламы или из разных стран. -
Защита конфиденциальной информации пользователей
Многие рекламодатели проводят кампании по повторному вовлечению, чтобы удержать своих пользователей. Однако это может противоречить условиям использования магазина приложений. В таком случае используйте данные об удалениях, чтобы исключить пользователей, удаливших приложение, из аудитории ретаргетинговой кампании.
Операционные системы
Поддержка функциональности измерения удаления приложений потребует дополнительных усилий от разработчиков вашего приложения.
Указания для разработчиков:
Совет
Сколько пользователей и когда удаляют приложения?
Получите полную разбивку по категориям и странам здесь.
Важно!
Начиная с 29 мая 2019 года, компания Google удалила API сервера и клиента GCM. Если вы собираетесь добавить в новое приложение обмен сообщениями, используйте FCM. Если вы используете GCM, перейдите на FCM. После перехода на FCM настройте параметры измерения количества удалений для устройств на платформе Android, как описано в этой статье.
Дополнительные сведения см. в документации Google.
Измерение количества удалений для устройств на платформе Android
Измерение количества удалений с использованием службы Firebase Messaging поддерживается в SDK Android начиная с версии 4.7.0.
1. Получение серверного ключа Firebase
- Создайте на платформе Firebase проект приложения для Android (если это еще не сделано) или перенесите свой проект из Google Developer Console (следуйте инструкциям консоли). Чтобы получить дополнительную информацию, смотрите Firebase.
- Откройте консоль Firebase.
- На странице консоли Firebase перейдите в раздел "Project Settings" (Настройки проекта) (нажмите на значок шестеренки рядом с заголовком "Project Overview" (Обзор проекта) на левой панели страницы).
- На вкладке "Cloud Messaging" (Облачные сообщения) вы увидите два серверных ключа (см. снимок экрана ниже):
- Скопируйте серверный ключ.
2. Ввод серверного ключа на панели управления AppsFlyer.
- Перейдите на панель управления своего приложения на платформе AppsFlyer.
- Выберите App Settings (Настройки приложения) в меню слева.
- Ведите в поле Firebase Server Key только что скопированный серверный ключ.
3. Настройка Firebase-Messaging в вашем приложении.
- Загрузите файл google-services.json с консоли Firebase.
- Добавьте файл google-services.json в каталог модулей своего приложения,
- Добавьте правила в файл build.gradle корневого уровня, чтобы включить в проект плагин google-services:
buildscript { // ... dependencies { // ... classpath 'com.google.gms:google-services:4.2.0' // google-services plugin } }
- Добавьте зависимость GCM в файл build.gradle уровня приложения:
dependencies { implementation 'com.google.firebase:firebase-messaging:17.3.4' } // ADD THIS AT THE BOTTOM apply plugin: 'com.google.gms.google-services
Последняя версия Firebase доступна здесь: официальный документ Firebase.
В случае появления ошибки "Could not find..." (Не удалось найти...), убедитесь, что программа Android SDK Manager использует последний репозиторий Google.
4. Использование службы AppsFlyer для измерения количества удалений
Если разработчик интегрирует FCM с единственной целью — измерять количество удалений с помощью AppsFlyer, он может использовать службу appsFlyer.FirebaseMessagingServiceListener, которая включена в наш SDK.
Для этого нужно добавить эту службу в файл 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 <>FirebaseMessagingService, который используется для получения токена устройства от Firebase.
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: если приложение использовало FCM еще до интеграции SDK AppsFlyer, то, скорее всего, эта служба уже добавлена, и разработчику просто нужно добавить в метод onNewToken()
такую строку:
AppsFlyerLib.getInstance().updateServerUninstallToken(getApplicationContext(), refreshedToken);
Кроме того, обязательно добавьте соответствующую службу в файл AndroidManifest.xml:
<service
android:name=".MyNewFirebaseManager">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Если push-уведомления об удалениях на Android не бесшумные
Если вы замените метод Firebase onMessageReceived
на свою собственную логику, это может привести к тому, что push-уведомления об удалениях приложений будут не бесшумными. Это может повлиять на пользовательский опыт. Чтобы этого не допустить, проверьте, что сообщение содержит 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 часов, т.к. измерение удалений обрабатываются ежесуточно.
Если приложение повторно установлено в течение суток,удаление не фиксируется.
Событие удаления приложения в течение 48 часов отобразится в отчетах по сырым данными в сводном отчете об эффективностина вашем дэшборде AppsFlyer.
Независимо от того, работает ли приложение Android в Google Play, ожидает отправки или даже не опубликовано, тестирование выполняется одинаково.
7. Отключение измерения количества удалений
Если предоставлен серверный ключ Firebase/GCM, измерение количества удалений приложения включено по умолчанию. Владельцы приложений могут отключить эту функцию на дэшборде.
Внимание! Чтобы удаления приложения регистрировались, во время установки приложения должен быть включен параметр Enable uninstalls measurement (Включить измерение количества удалений). Для устройств, на которые приложение устанавливалось при отключенном параметре, удаление приложения регистрироваться не будет.
Отключение измерения количества удалений
- В AppsFlyer перейдите в раздел App settings (Настройки приложения).
- Прокрутите вниз до Attribution (Атрибуция) > Uninstalls (Удаления) и отключите параметр Enable uninstall measurement (Включить измерение количества удалений).
Примечание
AppsFlyer получает данные о событиях удаления на устройствах iOS через службу push-уведомлений Apple (APN). Из соображений конфиденциальности служба APN сообщает в режиме реального времени, что пользователь удаляет приложение, только если со времени установки прошло минимум восемь дней. Это значит, что сведения об удалении iOS-приложения доступны по истечении 8 дней.
Дополнительные сведения см. здесь.
Измерение количества удалений для устройств на платформе iOS
Важно!
Чтобы использовать эту функцию, необходим пакет SDK версии не ниже 4.5.0. Если вы хотите измерить удаления приложений для iOS версии 13 и новее, вам понадобится SDK версии 4.10.4 или новее.
Кроме того, для этой функции требуется файл сертификата в формате р12. Файлы сертификатов в формате р8 не поддерживаются.
Примечание
Невозможно измерить количество удалений для пользователей, которые отменили разрешения для Push-уведомлений.
1. Поиск своего приложения.
2. Если вы еще не зарегистрировали идентификатор приложения, нажмите знак + и заполните форму.
3. Установите флажок "Push Notifications" (Push-уведомления).
4. При добавлении службы в приложение на экране появятся два параметра для push-уведомлений со значками состояния желтого или зеленого цвета:
5. Чтобы продолжить, нажмите кнопку Settings (Настройки).
Примечание
Если Push-уведомления уже были настроены раньше, кнопка Settings (Настройки) может называться Edit (Изменить). Если кнопка "Settings/Edit" (Настройки/Изменить) недоступна, то, возможно, вы не являетесь ни членом группы, ни администратором. Аккаунт разработчика создается членом вашей группы, и именно члены группы выполняют остальные действия, описанные в этом разделе.
2. Создание сертификата.
1. Установите параметр Apple Push Notification service SSL (Sandbox & Production) ("SSL-сертификат службы Push-уведомлений Apple (для разработки и рабочий)") в разделе Production certificate ("Рабочий сертификат"). Если вы используете VoIP для Push-уведомлений, выберите VoIP Services Certificate ("Сертификат сервисов VoIP").
2. Нажмите кнопку Create Certificate (Создать сертификат) под параметром Production SSL Certificate (Рабочий SSL-сертификат).
3. После нажатия кнопки Create Certificate (Создать сертификат) появится окно помощника Add iOS Certificate (Добавление сертификата iOS). Следуйте указаниям в окне помощника и затем нажмите кнопку Continue (Продолжить).
4. Будет создан запрос "Certificate Signing request" (Запрос на подписание сертификата). Используйте его для создания SSL-сертификата службы Push-уведомлений Apple (APNS).
5. Когда в окне появится кнопка "Download" (Загрузить), сертификат можно загрузить. Возможно, для обновления страницы ее придется перезагрузить. Загрузите созданный сертификат.
6. Откройте сертификат. При открытии сертификата откроется окно "Keychain Access" (Связка ключей).
Чтобы найти в этом окне свой сертификат, выберите категорию My Certificates (Мои сертификаты). Если его там нет, попробуйте найти его в категории Certificates (Сертификаты).
Примечание
Добавлять на сервер и заменять файлы сертификатов формата р12 могут только администраторы аккаунтов.
3. Продление сертификата.
Чтобы продлить срок действия SSL-сертификата службы Push-уведомлений (для разработки или рабочий), выполните те же действия, которые описаны выше для первоначального добавления сертификата. При замене сертификата отменять предыдущий сертификат не нужно. Можно одновременно иметь два рабочих сертификата, что позволяет использовать старый сертификат, пока загружается новый.
4. Экспорт файла P12.
Последний этап перед возвратом на панель управления AppsFlyer, это сохранение подписанного сертификата в виде файла .р12.
1. Выберите сертификат, который только что был добавлен в окно "Keychain Access" (Связка ключей).
2. Откройте Файл > Экспорт.
3. Выберите в меню "Category" (Категория) на левой панели пункт My Certificates (Мои сертификаты).
Если пункт My Certificates (Мои сертификаты) не выделен, невозможно экспортировать сертификат в виде файла формата .p12.
3. Для сохранения файла используйте формат Personal Information Exchange (.p12) .
4. Убедитесь, что окно выглядит, как показано ниже, и в нем есть строка Apple Push Services (Служба Push-уведомлений Apple):
5. Перейдите на панель управления своего приложения на платформе AppsFlyer.
6. Выберите App Settings (Настройки приложения) в меню слева.
7. Щелкните на значке загрузки и выберите файл P12 для загрузки.
8. (вариант) Если сертификат P12 защищен паролем, введите пароль в поле P12 certificate Password.
9. Нажмите кнопку Validate (Проверка), чтобы отправить сертификат в AppsFlyer и проверить, действителен ли он.
10. Нажмите кнопку Save Settings (Сохранить настройки).
5. Интеграция с SDK
Чтобы включить сбор данных об удалениях, необходимо зарегистрировать Push-уведомления на уровне кода приложения.
//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>
Фрагменты кода выше запрашивают у пользователя разрешения на отправку Push-уведомлений. Но если вы используете Push-уведомления только в фоновом режиме для измерения удалений приложения, получать разрешение от пользователя не нужно. Это связано с тем, что такие Push-уведомления являются бесшумными, и для их использования не нужны разрешения от пользователей.
Разрешение от пользователя на отправку Push-уведомлений в фоновом режиме
Если вы используете только бесшумные Push-уведомления, включите функцию Remote Notifications ("Удаленные уведомления") в разделе Background Modes ("Фоновые режимы") на вкладке Capabilities ("Возможности"):
- Выберите свой проект в XCode.
- Выберите цель.
- Перейдите на вкладку Capabilities ("Возможности").
- Включите Background Modes ("Фоновые режимы").
- Установите флажок Remote notifications ("Удаленные уведомления").
6. Push-уведомления.
На вкладке "Capabilities" (Возможности) своего проекта в XCode обязательно добавьте возможность Push-уведомлений. Без этого получить токен устройства будет невозможно.
7. Тестирование удалений.
Чтобы протестировать измерение количества удалений для устройств на iOS:
- Установите приложение.
- Удалите приложение. Внимание! Приложение можно удалить сразу после установки.
При тестировании удаления из Xcode или TestFlight важно, чтобы наш SDK знал, что токен сгенерирован в безопасной среде. Используйте следующие API:
AppsFlyerTracker.shared().useUninstallSandbox = true
[AppsFlyerTracker sharedTracker].useUninstallSandbox = true;
Важно! Удаления не отображаются на дэшборде AppsFlyer сразу же.
- В среднем удаление отображается в отчетах в течение 9 дней
- Удаление приложения, выполненное в безопасной среде ("Песочнице"), может отобразиться в отчетах в течение месяца
Кроме того, датой удаления считается дата, когда удаление зафиксировано в отчете. Дополнительные сведения см. в следующем разделе.
8. Просмотр данных об удалениях на панели управления AppsFlyer.
Результаты измерения количества удалений отображаются на главной панели в сводной таблице показателей эффективности.
В результате последних изменений в службе Push-уведомлений Apple данные об удалениях появляются на панели управления не раньше чем через 9 дней. AppsFlyer обновляет показатели удалений в сводной таблице каждые 24 часа.
Пример
- День 1 - пользователь устанавливает ваше приложение
- День 4 - пользователь удаляет ваше приложение
- День 12 - Служба push-уведомлений Apple сообщает об удалении приложения через 8 дней после его удаления
- День 13 - Данные об удалении появляются на дэшборде AppsFlyer и в сырых данных
Подробные сведения см. в «Руководстве по интеграции SDK», раздел «Измерение количества удалений для устройств на платформе iOS».
9. Отключение измерения количества удалений
Если предоставлен и подтвержден сертификат P12, измерение количества удалений приложения включено по умолчанию. Владельцы приложений могут отключить эту функцию на дэшборде.
Внимание! Чтобы удаления приложения регистрировались, во время установки приложения должен быть включен параметр Enable uninstalls measurement (Включить измерение количества удалений). Для устройств, на которые приложение устанавливалось при отключенном параметре, удаление приложения регистрироваться не будет.
Отключение измерения количества удалений
- В AppsFlyer перейдите в раздел App settings (Настройки приложения).
- Прокрутите вниз до Attribution (Атрибуция) > Uninstalls (Удаления) и отключите параметр Enable uninstall measurement (Включить измерение количества удалений).
Постбэки событий удаления
AppsFlyer позволяет отправлять партнерам, с которыми вы работаете, постбэки событий удаления для всех известных пользователей, удаляющих приложение. На панели управления AppsFlyer событие удаления называется af_uninstall.
Сопоставление события удаления
Событие af_uninstall
можно сопоставить так же, как сопоставляются другие внутренние события приложения.
AppsFlyer отправляет постбэк внутреннего события приложения только в том случае, если событие действительно произошло и зарегистрировано в AppsFlyer. Поэтому сопоставление события af_uninstall действует только для завершенных операций удаления. Если удаления не отображаются на странице обзора или в отчетах об удалениях по необработанным данным, то постбэки удаления не отправляются партнерам, даже если событие af_uninstal
сопоставлено.
Время события af_uninstall
В отличие от постбэков для обычных внутренних событий, постбэк о событии удаления af_uninstall
не отправляется в реальном времени.
В сырых данных AppsFlyer и постбэках партнеров для времени события af_uninstall
указывается время, когда AppsFlyer узнает об удалении приложения.
- Для устройств Android: 24-48 часов после фактического удаления приложения
- Для устройств iOS: 9-11 дней после фактического удаления приложения
Ограничения
События af_uninstall не включаются в отчеты обратной передачи событий в приложении.
Событие af_uninstall в данное время доступно не всем партнерам.
Если вам нужно сопоставить это событие с событием партнера, но оказывается, что оно для партнера недоступно, обратитесь к своему менеджеру по работе с клиентами или напишите по адресу hello@appsflyer.com.
Если вы являетесь партнером и хотите получать события af_uninstall, обратитесь к своему менеджеру по работе с партнерами или напишите по адресу partners@appsflyer.com.