Firebase Dynamic Links — это сервис Google для создания умных ссылок, которые направляют пользователя в нужное место приложения независимо от того, установлено приложение или нет. По данным Firebase Documentation, Dynamic Links автоматически перенаправляют пользователя в App Store или Google Play при отсутствии приложения и восстанавливают контекст перехода после установки. Smart-ссылки Firebase решают проблему URL Scheme, которая не работает с неприложенными приложениями.
Главное
Firebase Dynamic Links — это облачный сервис от Google, который создаёт единые универсальные ссылки для мобильных приложений на iOS и Android. Динамическая ссылка содержит глубокий линк на контент внутри приложения, но ведёт себя как обычная HTTPS-ссылка: если приложение установлено, она открывает его напрямую, если нет — перенаправляет в магазин приложений.
В отличие от обычных URL Scheme, Dynamic Links могут работать с неприложенными приложениями благодаря технологии deferred deep link. Когда пользователь устанавливает приложение после перехода по ссылке, Firebase сохраняет параметры перехода и передаёт их при первом запуске. Это открывает возможности для реферальных программ, маркетинговых кампаний и приглашений.
URL Scheme требуют установленного приложения и не имеют стандартного механизма fallback. Firebase Dynamic Links решают эту проблему через промежуточный веб-сервис Firebase, который определяет статус установки приложения на устройстве и маршрутизирует пользователя корректно. При этом одна ссылка работает одинаково на обеих платформах.
Firebase Dynamic Link использует домен вида yourcode.page.link, который регистрируется в Firebase Console. Когда пользователь переходит по такой ссылке, Firebase определяет тип устройства и статус установки приложения. Для iOS используется механизм Universal Links, для Android — App Links с автоматической верификацией через Digital Asset Links.
Процесс обработки включает несколько последовательных этапов: при переходе по ссылке браузер отправляет GET-запрос к серверу Firebase, сервер определяет платформу и проверяет наличие приложения на устройстве. Если приложение установлено — генерируется редирект на Universal Link или Intent с параметрами для открытия целевого экрана. Если приложение не установлено — редирект в App Store или Google Play для загрузки.
Приложение получает ссылку на этапе инициализации Firebase SDK. Метод getDynamicLink() возвращает PendingResult с данными о переходе. После успешного получения из ссылки извлекаются параметры deep link, UTM-метки для аналитики и произвольные данные, переданные при создании ссылки.
Firebase Console предоставляет визуальный интерфейс для создания Dynamic Links. Разработчик указывает глубокую ссылку (deep link URL), название кампании, настройки для iOS и Android отдельно, а также параметры аналитики. После создания Firebase генерирует короткую ссылку вида https://yourcode.page.link/abc123, которую можно использовать в рекламных материалах, email-рассылках и социальных сетях.
Для программного создания Dynamic Links используется Firebase REST API или клиентский SDK. REST API позволяет массово генерировать ссылки для маркетинговых кампаний с кастомными параметрами, включая ссылку для социальных сетей и асинхронную аналитику переходов. При создании ссылок через API важно правильно указывать параметры socialMetaTagInfo — они определяют, как ссылка отображается при передаче в мессенджеры и соцсети с превью-карточкой.
| Параметр | Назначение | Обязательность |
|---|---|---|
| Deep Link URL | Внутренняя ссылка на контент приложения | Да |
| iOS Bundle ID | Идентификатор приложения в App Store | Для iOS |
| Android Package Name | Имя пакета в Google Play | Для Android |
| Fallback URL | Веб-страница при отсутствии приложения | Нет |
| UTM-метки | Параметры для Google Analytics | Нет |
Для работы с Firebase Dynamic Links на iOS требуется подключить Firebase SDK через CocoaPods или Swift Package Manager, настроить Info.plist с GOOGLE_APP_ID и зарегистрировать домен Dynamic Links в Associated Domains проекта. После этого приложение автоматически обрабатывает Universal Links, сгенерированные Firebase.
В Xcode необходимо добавить capability Associated Domains с записью вида applinks:yourcode.page.link. Firebase SDK использует метод application(_:continue:restorationHandler:) для обработки Universal Links, поэтому дополнительная интеграция с AppDelegate не требуется — Firebase автоматически извлекает параметры Dynamic Link из User Activity.
Пример настройки Info.plist для корректной инициализации Firebase и регистрации обработчика Dynamic Links. Ключ FIROptions должен содержать идентификатор проекта GoogleService-Info.plist.
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
<string>https://yourcode.page.link</string>
</array>
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
Если прокси AppDelegate отключён, необходимо вручную вызывать метод handleUniversalLink(_:) и передавать User Activity из continue NSUserActivity. Firebase SDK автоматически извлекает параметры ссылки и возвращает DynamicLink через completion handler.
На Android интеграция Firebase Dynamic Links начинается с добавления зависимостей в build.gradle и файла google-services.json от Firebase Console. Домен Dynamic Links регистрируется в Firebase Console, после чего все ссылки с этим доменом автоматически распознаются Android-приложением через Intent Filter с action VIEW. Для корректной работы необходимо также добавить плагин Google Services в корневой и модульный build.gradle и выполнить синхронизацию Gradle.
Для корректной обработки ссылок на Android необходимо добавить Intent Filter для домена Dynamic Links в Activity, которая должна принимать входящие ссылки. Фильтр должен содержать схему https, хост вашего домена Dynamic Links и путь по умолчанию.
Пример Intent Filter в AndroidManifest.xml для приёма Dynamic Links на домене yourcode.page.link.
<activity android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter
android:autoVerify="true">
<action
android:name="android.intent.action.VIEW" />
<category
android:name="android.intent.category.DEFAULT" />
<category
android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="yourcode.page.link" />
</intent-filter>
</activity>
Важно установить launchMode singleTask для Activity, принимающей Dynamic Links. Это предотвращает создание нового экземпляра Activity при повторном переходе по ссылке и позволяет корректно обрабатывать все входящие deep link в одном экземпляре.
Firebase SDK для Android предоставляет метод FirebaseDynamicLinks.getInstance().getDynamicLink(intent), который возвращает объект PendingTask с данными о ссылке. Из объекта DynamicLink извлекается глубокий URI, UTM-параметры и метка времени перехода. Обработку рекомендуется выполнять в методе onCreate() и onNewIntent() Activity.
При обработке важно учитывать, что Dynamic Link может быть получен как при запуске приложения из холодного состояния (cold start), так и при переходе из другого приложения в уже запущенное приложение. Для второго случая необходимо переопределить onNewIntent() и повторно вызвать проверку Dynamic Link.
Пример получения и обработки Firebase Dynamic Link в MainActivity. Код обрабатывает как cold start, так и переход из другого приложения.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
checkDynamicLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
checkDynamicLink(intent)
}
private fun checkDynamicLink(intent: Intent) {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener link ->
val deepLink = link?.link.toString()
handleDeepLink(deepLink)
}
}
}
Метод addOnSuccessListener возвращает DynamicLink, из которого извлекается целевая ссылка через link?.link. Если listener возвращает null, значит Intent не содержит Dynamic Link — это нормальный запуск приложения без входящей ссылки. Также доступны UTM-метки для аналитики переходов, включая campaign, medium, source и content, которые можно передать в Google Analytics для детальной оценки эффективности каждого маркетингового канала.
Часто задаваемые вопросы
Firebase Dynamic Links поддерживает deferred deep link — ссылка сохраняет контекст, даже если приложение не установлено. После установки приложение получает все параметры перехода, что невозможно с обычными URL Scheme или Universal Links.
Firebase Dynamic Links входят в бесплатный тарифный план Firebase Spark. Ограничений на количество создаваемых ссылок нет. Однако с 2024 года Google анонсировал переход на новую инфраструктуру, поэтому условия могут измениться.
Dynamic Links предназначены для мобильных приложений. При переходе из веб-браузера на десктопе ссылка откроет fallback URL. Для веб-приложений используйте обычные ссылки или собственную логику редиректов.
Firebase Console предоставляет кнопку Test Dynamic Link для предпросмотра поведения. Также можно использовать эмулятор Android или симулятор iOS с установленным Firebase SDK для локального тестирования всех сценариев перехода.
Короткая ссылка Firebase Dynamic Link состоит из домена page.link и случайного суффикса длиной около 7 символов. Общая длина — примерно 30 символов. Deep link внутри может быть любой длины, но рекомендуется ограничивать его до 2 КБ для совместимости.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также