Firebase Dynamic Links е услуга на Google за създаване на умни връзки, които насочват потребителя към правното място в приложението, независимо дали приложението е инсталирано или не. Според Firebase Documentation, Dynamic Links автоматично пренасочват потребителя към App Store или Google Play, когато приложението лилсва, и възстановяват контекста на прехода след инсталация. Умните връзки на 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, която може да се използва в рекламни материали, имейл кампании и социални мрежи.
За програмно създаване на 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 и регистрация на handler-а за 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 с действие 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 KB за съвместимост.
Заключение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също