Домой Android разработкаJava, Kotlin и Android SDK Deeplink в Android приложении

Deeplink в Android приложении

by dilix
Deeplink в Android

Задача: вести пользователя на определенный контент в приложении. Для этого используем 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 устройствах.

Создание Dynamic link в Firebase

Создание Dynamic Link

Более того, вы можете указать, что если установленная версия вашего приложения на устройстве меньше заданной, то нужно перейти в Google play.

Настройка Deeplink в Firebase для Android

Настройка Deeplink для Android

При желании можно разметить ссылку 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

Исходники примера на GitHub

Deeplink на пример встроенных покупок

Deeplink на интерактивную анимацию с Lottie

Пример можно скачать и посмотреть в Google play

Примеры, обучения и практика в приложении на Google play

Хочешь обсудить Android разработку?
Заходи к нам Вконтакте, на Facebook и в Телеграм!

Добавить комментарий

Может быть интересно

Этот сайт использует Cookie файлы для улучшения вашего пользовательского взаимодействия. Используя данный сайт вы соглашается с этим. Принять Читать

Политика конфиденциальности и Cookies