Задача: вести пользователя на определенный контент в приложении. Для этого используем Dynamic links от Firebase. Они позволяют
- Направить человека в Google play или AppStore если используется Android или iOS и приложение не установлено.
- Открыть определенный раздел в приложении если программа есть у пользователя на устройстве.
- Перейти на целевую страницу, если человек зашел не с мобильного девайса.
Что такое Deeplink
Глубинная ссылка (deeplink) — по сути тоже самое что и обычная ссылка. Разница лишь в том, как обрабатывается ее открытие.
К примеру у нас есть URL: https://website.domain/catalog?search=Android&page=3
. Из параметров мы видим, что данная ссылка ведет на каталог на страницу 3. Если у нас кроме сайта есть мобильное приложение, то мы хотим, чтобы наш пользователь открыл его а не браузер, верно? Если просто открыть программу на главном экране, то теряется пользовательский контекст, а именно то, что он был в каталоге на третьей странице.
Deeplink в мобильное приложение подразумевает то, что мы откроем приложение, перехватим параметры и покажем экран релевантный контексту пользователя.
Dynamic Link от Firebase
Мы не знаем откуда пользователь может перейти по ссылке — с мобильного телефона, планшета, ноутбука. Наша обязанность — корректно провести пользователя по URL не зависимо от устройства. Dynamic links позволяет задать целевую страницу, а всю работу по обработке берет на себя.
Создание глубинной ссылки в Firebase
Перейдя в Firebase Console -> Dynamic links вы можете приступить к созданию новой ссылки. Вы указываете желаемую целевую страницу, поведение на Android и iOS устройствах.
Более того, вы можете указать, что если установленная версия вашего приложения на устройстве меньше заданной, то нужно перейти в Google play.
При желании можно разметить ссылку UTM метками. Все, остается передать готовую ссылку потенциальным пользователям.
Программное создание Deeplink в Firebase
Для конкретных записей и маркетинговых кампаний все ссылки могут быть созданы руками. Но часто может понадобиться динамически создавать такие ссылки. Например, взять те же социальные сети. Если пользователь поделился ссылкой вне сети, то мы хотим также обеспечить корректную навигацию независимо от устройства.
Для решения такой задачи у Firebase есть API для программного создания ссылок.
Обработка Dynamic link в приложении
Чтобы перехватить нужный вам домен, необходимо в AndroidManiest.xml
установить intent-filter
на Acitivty
, которую нужно открыть при переходе по ссылке.
<activity android:name="com.dimlix.samplesapp.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <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:host="dimlix.page.link" android:scheme="https"/> </intent-filter> </activity>
Далее в заданной Activity
в onCreate
обрабатываем Deeplink.
private void handleDeepLink() { FirebaseDynamicLinks.getInstance() .getDynamicLink(getIntent()) .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() { @Override public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { // Get deep link from result (may be null if no link is found) Uri deepLink; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); if (deepLink != null) { String path = deepLink.getLastPathSegment(); handleDynamicLinkPath(path); } } } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "getDynamicLink:onFailure", e); } }); }
В примерах я использую Deeplink, для того, чтобы с определенной статьи вести на нужный экран где реализован разобранный материал.
private void handleDynamicLinkPath(String path) { for (Sample sample : mSamples) { if (sample.dynamicLinkPath.equals(path)) { Intent sampleActivity = new Intent(this, sample.classtoStart); sampleActivity.putExtra(BaseSampleActivity.HEADER_KEY, sample.header); sampleActivity.putExtra(BaseSampleActivity.PATH_KEY, sample.dynamicLinkPath); startActivity(sampleActivity); return; } } showDynamicLinkResolveError(); }
Реализованный пример deeplink с помощью Firebase Dynamic Links
Deeplink на пример встроенных покупок
Deeplink на интерактивную анимацию с Lottie
Пример можно скачать и посмотреть в Google play