Как расшифровать Meta Install Referrer на Android
Facebook и Instagram могут сообщить приложению, какая кампания, группа объявлений и объявление принесли установку, включая показы. Данные зашифрованы ключом, который есть только у вас.
Google Play Install Referrer передаёт только клики по рекламе Meta, после которых установка прошла в той же сессии. Остальное закрывает Meta Install Referrer: приложения Facebook, Instagram и Facebook Lite запоминают объявление, которое пользователь видел или нажал, и отдают его вашему приложению.
Play Install Referrer
- Клики в той же сессии
- Зашифрованные данные Meta
- Ещё и клики Google Ads
Meta Install Referrer
- Клики, показы и прошлые сессии
- То же шифрование, тот же ключ
- Отличает клик от показа
Что нужно заранее
Кампания на установки Android-приложения
В Facebook, Instagram или Audience Network.
Ваш Facebook App ID
Тот, от имени которого крутится реклама.
Ключ расшифровки
Meta for Developers › App settings › Basic › Android. Нужны права администратора.
1. Прочитайте его при первом запуске
AndroidManifest.xml
<queries>
<package android:name="com.facebook.katana" />
<package android:name="com.instagram.android" />
<package android:name="com.facebook.lite" />
</queries>Kotlin
val providers = listOf(
"com.facebook.katana.provider.InstallReferrerProvider",
"com.instagram.contentprovider.InstallReferrerProvider",
"com.facebook.lite.provider.InstallReferrerProvider",
)
fun readMetaReferrer(context: Context, facebookAppId: String): String? {
for (authority in providers) {
val uri = Uri.parse("content://$authority/$facebookAppId")
runCatching { context.contentResolver.query(uri, null, null, null, null) }
.getOrNull()?.use { cursor ->
if (cursor.moveToFirst()) {
return cursor.getString(cursor.getColumnIndexOrThrow("install_referrer"))
}
}
}
return null
}2. Расшифруйте на сервере
Никогда не кладите ключ в приложение. Его прочитает любой, кто распакует APK.
Node.js
import crypto from 'node:crypto';
export function decryptMetaReferrer(installReferrer, keyHex) {
const {utm_content} = JSON.parse(installReferrer);
const {source} = typeof utm_content === 'string' ? JSON.parse(utm_content) : utm_content;
const sealed = Buffer.from(source.data, 'hex');
const decipher = crypto.createDecipheriv('aes-256-gcm', Buffer.from(keyHex, 'hex'), Buffer.from(source.nonce, 'hex'));
decipher.setAuthTag(sealed.subarray(-16));
return JSON.parse(Buffer.concat([decipher.update(sealed.subarray(0, -16)), decipher.final()]).toString());
}Названия полей съехали на уровень
campaign_groupcampaignadgroup
campaign_group
Кампания
То, что в Ads Manager называется кампанией.
campaign
Группа объявлений
Не кампания.
adgroup
Объявление
Креатив, который видели люди.
Когда ответ пустой
В Appy ключ вставляется один раз
На тарифе Enterprise вы добавляете ключ в дашборд, а App ID в SDK. Расшифровка идёт на серверах Appy.
Первый запуск
Android, SDK Appy
- Нажал на ссылку AppyЗасчитано ссылке
- Реклама Meta, клик или показКампания, группа, объявление
- Клик в Google AdsЗасчитано Google Ads
- Ничего из этогоОрганика
Читайте также
Вопросы
Где найти ключ расшифровки?
В Meta for Developers: App settings › Basic, раздел Android.
Какое шифрование использует Meta?
AES-256-GCM с ключом из 64 hex-символов.
Попадают ли сюда view-through установки?
Да. Колонка is_ct равна 0 для показа и 1 для клика.
campaign_name — это кампания?
Нет, это группа объявлений. Кампания лежит в campaign_group_name.
Продолжить изучение
Deferred deep linking без SDK: как это на самом деле устроено под капотом
Контекст ссылки можно пронести через установку приложения, не встраивая SDK атрибуции. Разбираем, что реально переживает границу стора на Android и iOS, что ломается и во что каждый обходной путь обходится приватности.
Узнайте, какая ссылка принесла каждую установку: SDK Appy для iOS и Android
Appy теперь видит, что происходит с вашими ссылками после стора. Новый SDK показывает установки, события в приложении и выручку по каждой ссылке, QR-коду и кампании и открывает новым пользователям нужный экран.
Chrome сообщает каждому серверу, что ваш телефон работает на Android 10
Chrome на Android выдаёт любой телефон за Android 10, модель K. Что это сломало в сопоставлении отложенных диплинков, почему Critical-CH посчитал бы каждый клик дважды и как Client Hints возвращают настоящие версию и модель.
Ищете другое? Посмотрите все темы в блоге.
Установки из Meta рядом со всеми ссылками и QR-кодами
Вставьте ключ один раз, и Appy засчитает установки из Facebook и Instagram кампании, группе объявлений и объявлению.