fbpx

Blog

Создаём отложенные deeplinks через Firebase

Как открыть пользователю нужную страницу сразу после установки из Google Play? Если для вас это звучит как магия, то давайте разбираться.

Проблема

Итак, вы или ваш product manager показываете пользователю рекламу приложения со специальным оффером или скидкой и хотите, чтобы сразу после скачивания приложения пользователю открылась нужная страница уже внутри приложения с этой скидкой? Ну или у вас приложение, позволяющее пользователю найти отель в Италии, пользователь кликнул на предложение забронировать отель в Риме, и нужно чтобы приложение после установки открыло страницу с нужным отелем в Риме? Надеюсь суть кейса вы поняли. Такой механизм называется отложенный диплинк (deferred deep links). То есть диплинк можно отправить пользователю даже если у него не установлено ваше мобильно приложение – а после установки вы сможете его обработать. Звучит очень круто и полезно, так что давайте разберемся как это сделать. На самом деле способов много, но самый простой использовать для этого Firebase SDK.

Установка Firebase

  1. Если вы этого еще не сделали, то вам необходимо добавить свой проект в Firebase Console. Тут написано как.
  2. Убедитесь что в top-level builde.gradle добавили Google’s Maven репозиторий, как buildscript так и в allprojects секциях.
  3. Добавьте зависимость ‘com.google.firebase:firebase-dynamic-links:19.0.0″ в app/build.gradle
  4. После этого зайдите в консоль Firebase, выберите секцию Dynamic Links и включите данную опцию

После этого необходимо добавить в AndroidManifest.xml

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

Где example.com – ваш host для deeplinks. Кроме этого вы должны добавить в AndroidManifest.xml

<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="example.com/link" android:scheme="http"/>
    <data android:host="example.com/link" android:scheme="https"/>
</intent-filter>

В этом случае example.com/link – это ваш диплинк обернутый в так называемый Dynamic Links domain.

Обработка deeplinks

Для обработки диплинков необходимо в вашей главной activity в onCreate добавить обработку

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(intent)
        .addOnSuccessListener(this) { pendingDynamicLinkData ->
            // Get deep link from result (may be null if no link is found)
            var deepLink: Uri? = null
            if (pendingDynamicLinkData != null) {
                deepLink = pendingDynamicLinkData.link
            }

            // Handle the deep link. For example, open the linked
            // content, or apply promotional credit to the user's
            // account.
            // ...

            // ...
        }
        .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }

После этого в pendingDynamicLinkData.link будет находиться ссылка по которой пользователь перешел в приложение. В качестве параметра у этого диплинка будет уже ваш диплинк приложения – по которому вы можете открыть ту или иную страницу для пользователя.

Таким образом схема обработки отложенных диплинков выглядит так:

  1. Пользователь получает ссылку вида https://example.com/link
  2. При переходе открывается Google Play
  3. Пользователь устанавливает приложение
  4. Пользователь открывает приложение и в onCreate получает Intent c переданным deeplink
  5. Вытаскиваете deeplink из pendingDynamicLinkData.link
  6. Парсите deeplink и переводите пользователя на нужный экран согласно логике deeplink

Вот и всё, добавив Firebase SDK и прописав логику обработки теперь мы можем показывать пользователю нужную страницу приложения даже когда приложение еще не установлено. Тем самым мотивируя пользователя установить приложение показать ему нужную информацию. Ссылки на документацию и примеры от Google