Руководство по настройке и работе Firebase Dynamic links + Firebase dynamic links generator на базе google sheets
На данный момент для атрибуции установок мобильных приложений существуют два подхода:

  • Получение идентификатора устройства от рекламной сети (например idfa для ios) на котором пользователь кликнул на объявление

  • Fingerprinting, т.е. связывание клика по рекламному объявлению и факта установки на основе параметров устройства
В существующих системах мобильной атрибуции используются либо оба из этих подходов, либо только связывание по идентификатору, но с появлением ios 14, для устройств apple возможность атрибутирования по idfa пропадет, и так или иначе, задача атрибуции установок будет решаться через fingerprint.

В этой статье, я рассмотрю возможность атрибуции и решению других задач на базе dynamic links от firebase. Так как firebase или app+web, позволяет также решить любые задачи по мобильной/веб аналитике и автоматизации маркетинга, dynamic links позволяет построить полноценную систему аналитики, без использования других сервисов.
Как работают dynamic links
Тут важно понимать, что dynamic link, это не просто ссылка, которая ведет пользователя в конкретное приложение, а конструктор, в который мы можем задавать свою логику работы. Ниже приведена схема возможной работы для ссылки ios.
Т.е. мы можем использовать одну ссылку и для ios и для android, и, при необходимости, задать условия открытия для различных версий операционных систем.
Установка в приложении
В этой части, все довольно просто, google составил прекрасную документацию, от себя, хочу добавить, что реализации есть и для Cordova, на которой в последнее время все больше приложений.

Базово, dynamic links позволяют просто открыть ваше приложение по ссылке с сохранением параметров utm_source, utm_medium и utm_campaign, но также, есть возможность, используя Universal links для ios или App links для android, открывать конкретный экран приложения. Особенно полезно, это будет для ремаркетинговых кампаний, включая пуш уведомления.

В консоли firebase добавляем домен, на котором будут отображаться наши ссылки:
Также, есть возможность привязать свой поддомен или домен, на котором будут отображаться эти ссылки, ничего, кроме красоты это не дает, но выглядит посерьезней.
Также, важный момент, чтобы вашими ссылками не воспользовались злоумышленники, нужно добавить в white list ваш домен (или домены) и ссылки на google play/ app store ваших приложений.
Создание dynamic links
Существует четыре способа создать ссылку:

— из firebase console. Этот способ подойдет, для создания тестовых или статичных ссылок. Из плюсов этого метода, при использовании этих ссылок у вас будет статистика по использованию прямо в консоли.

собрать ссылку в ручную. В реальной работе это самый удобный способ, который позволяет быстро собрать нужную ссылку по шаблону и автоматизировать их создание:

https://example.page.link/?link=https://www.example.com/someresource&apn=com.example.android&amv=3&ibi=com.example.ios&isi=1234567&ius=exampleapp

А также, используя rest api, вы можете сделать из этой длинной ссылки короткую.

— создать ссылку в приложении. Этот способ классно подойдёт для создания реферальной программы, где в utm_campaign, можно передать user_pseudo_id или user_id пользователя, который создает такую ссылку

Отладка ссылок

Если вы добавите к вашей ссылке параметр ?d=1 или &d=1, то увидите весь сценарий ее открытия, а также, возможные ошибки, если они есть.
Firebase dynamic links generator
Чтобы упросить создание ссылок через REST API, я написал небольшое расширение на google scripts, которое генерирует их автоматически.

Для установки, создайте новый google sheets, зайдите в раздел Tools -> Script Editor и вставьте код из этого репозитория: https://github.com/snegireff/firebase_dynamic_links_gegerator

В коде, необходимо поменять:

sheet.getRange('A2').setValue — просто тестовый url (указать ваш домен вебсайта)
Firebase_url — ваш домен для коротких ссылок
Apn — The package name of the Android app
Afl — The link to open when the app isn't installed (обычно урл на store android)
Ibi — The bundle ID of the iOS app to use to open the link.
Ifl — The link to open when the app isn't installed. (обычно урл на store ios)
Api_key — можно взять в fibase console в разделе settings

После чего, вызывать функцию onOpen:
Которая создаст контекстное меню в вашем документе:
Где первый пункт очищает лист от созданных ссылок, а второй генерирует их.
Работа с dynamic links в firebase/ app+web
При переходе пользователем по динамической ссылке, возникают следующие события:

dynamic_link_first_open — в момент, когда пользователь первый раз открывает приложение
dynamic_link_app_open — в момент, когда пользователь не первый раз открывает приложение
dynamic_link_app_update — в момент, когда приложение обновляется, после перехода по ссылке, но только для Android

Также, в event_params у этих событий сохраняются параметры source, medium, campaign, которые можно использовать, например, так:
SELECT 
user_pseudo_id,
event_name,
concat((select value.string_value from t0.event_params where key = 'source'),' / ',  (select value.string_value from t0.event_params where key = 'medium')) as  sourceMedium

FROM 
XXX.events_intraday_20200903 t0 
where
event_name like '%dynamic%'
Еще важное дополнение, модель атрибуции, на данный момент, first click, т.е. в параметрах traffic_source, всегда будут стоять данные по начальному источнику трафик. В таком случае, dynamic links можно использовать, как маркер изменения источника и считать любую модель атрибуции на свой вкус.

В случае, если ссылка была создана не в ручную, а через конcоль/ API/ SDK, то данные по click, install, re-open, redirect и first open можно получить через соответствующий API.
Сценарий с веб-сайтом
Важный кейс, это возможность понимать количество установок через ваш вебсайт. Например, если у вас есть кампании и на сайт и на установку.

В таком случае, вы можете сохранять любой источник, кампанию и другие параметры при переходе в куки и динамически формировать уникальную ссылку для каждого клиента, вставляя его параметры в ссылку.

Приведу пример на базе скрипта Sbjs (не смотря, на то, что он тяжеловат, хорошо справляется со своей работой), как это можно сделать через GTM:

— Вставляем или весь код, или ссылку на скрипт в новый тэг GTM типа custom html и активируем его командой sbjs.init(); (триггер будет Page Load)
— Создаем переменные типа js, которые будут соответствовать source, medium и тп. Все возможные переменные, можно посмотреть в этом документе.
— Делаем еще один тэг, типа custom html, в котором будет содержаться алгоритм подмены (Триггер будет window load):
<script>

var link = "https://page.page.link/?link=https://play.google.com/store/apps/details?id=ua.page.app&utm_source=web_"+{{current.src}}+"&utm_medium="+{{current.mdm}}+"&utm_campaign="+{{current.cmp}}+"&gclid="+{{gclid}}+"&utm_term="+{{current.trm}}
    
$('[href="https://play.google.com/store/apps/details?id=ua.page.app"]').attr('href', link)  

var link2 = "https://page.page.link/?link=https://itunes.apple.com/us/app/id111111&utm_source=web_"+{{current.src}}+"&utm_medium="+{{current.mdm}}+"&utm_campaign="+{{current.cmp}}+"&gclid="+{{gclid}}+"&utm_term="+{{current.trm}}
      
$('[href="https://itunes.apple.com/us/app/id111111"]').attr('href', link2)  
  
</script>
Теперь, для пользователя, ссылки будет формироваться динамически, с учетом его last non direct источника трафика. В firebase analytics такие переходы будут содержать приставку web_.
Особенности facebook ads
Если Google ads нативно интегрирован с faibase analytics, и, нужно просто связать аккаунты, то в facebook и остальные рекламные системы нужно вставлять dynamic links.

В целом, особых проблем, вставить dynamic links в рекламные системы нет, но в facebook есть своя особенность.
Так как при формировании dynamic links, первым идет наш веб-сайт, то при вставке dynamic links, валидатор facebook идет на сайт и смотрит наличие метатегов, с описанием приложения и в случае их отсутствия, не дает опубликовать объявление, поэтому на вебсайт, необходимо опубликовать теги (вставив актуальные значения в cotent):
<meta property="al:ios:url" content="example://applinks" />
<meta property="al:ios:app_store_id" content="12345" />
<meta property="al:ios:app_name" content="Example App" />
<meta property="al:android:url" content="example://applinks" />
<meta property="al:android:package" content="com.example" />
<meta property="al:android:app_name" content="Example App" />
После этого, объявление успешно пройдет модерацию.

Join our channel in telegrams: https://t.me/firebase_app_web_bigquery
Made on
Tilda