Перейти к основному содержимому

Deeplink-ссылки

В этой статье мы рассмотрим, что такое deeplink-ссылки, для чего они нужны, а также рассмотрим их применение на примере.

Ссылки deeplink, или глубокие ссылки, в контексте разработки под Android представляют собой URL-адреса, которые ведут не к основному экрану приложения, а к конкретному месту внутри приложения. Они позволяют пользователям напрямую переходить к определённым функциям или экранам внутри вашего приложения, минуя главный экран.

  1. Улучшенный пользовательский опыт
    Пользователи могут мгновенно получить доступ к нужным им функциям без необходимости проходить через главный экран приложения.
  2. Маркетинговые кампании
    Deeplink-ссылки могут быть использованы в маркетинговых кампаниях для направления пользователей к определенным экранам или функциям, что может повысить их вовлеченность.
  3. Интеграция с другими сервисами
    Deeplink-ссылки полезны при интеграции с другими сервисами, например: для совершения покупок через сторонние приложения.
  1. Определение структуры
    Ссылки deeplink обычно содержат структурированный URL-адрес, который указывает на конкретный экран или действие внутри приложения. Например, myapp://profile/123.
  2. Обработка в приложении
    Приложение должно уметь распознавать и обрабатывать такие URL-адресы. Это обычно осуществляется через обработчики намерений (Intents) или через собственные механизмы обработки URL.
  3. Навигация
    Когда пользователь нажимает на deeplink-ссылку, система Android перенаправляет приложение на указанный экран или выполняет указанное действие.
Пример

Предположим, у нас есть приложение социальной сети и deeplink-ссылка для перехода к профилю пользователя:

myapp://profile/123.

Когда пользователь нажимает на этот URL-адрес, приложение перенаправляет его на экран профиля пользователя с ID 123.

Ссылки deeplink в SDK платежей необходимо обрабатывать для корректного завершения оплаты через СБП. Сама схема deeplink необходима для возврата в ваше приложение после оплаты через стороннее приложение (например, SberPay или СБП).

  1. Укажите deeplinkScheme внутри вашего файла AndroidManifest.xml для Activity, в которую необходимо вернуться после оплаты через сторонее приложение. SDK генерирует свой хост к данной схеме, его с вашей стороны указывать не нужно.
    AndroidManifest.xml
    <activity
    android:name=".YourBillingActivity">

    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <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:scheme="your_deeplink_scheme" />
    </intent-filter>

    </activity>
    Вместо your_deeplink_scheme из примера выше укажите название своей схемы. Например, ru.package.name.rustore.scheme.
  2. При создании RuStoreBillingClientFactory укажите deeplinkScheme, которую указывали в файле AndroidManifest.xml ранее.
    val billingClient: RuStoreBillingClient = RuStoreBillingClientFactory.create(
    context = app,
    consoleApplicationId = "111111",
    deeplinkScheme = "your_deeplink_scheme",
    // Опциональные параметры
    themeProvider = null,
    debugLogs = false,
    externalPaymentLoggerFactory = null,
    )
    к сведению

    Схема, указанная в AndroidManifest-файле должна совпадать со схемой, которую вы указываете в методе create при создании RuStoreBillingClient SDK платежей.

  3. Для восстановления состояния вашего приложения при возврате с deeplink-ссылки для Activity, в которую необходимо вернуться после оплаты через сторонее приложение, добавьте в файлAndroidManifest.xml android:launchMode="singleTask" (см. пример ниже).
    AndroidManifest.xml
    <activity
    android:name=".YourBillingActivity"
    android:launchMode="singleTask"
    android:exported="true"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustResize">
  4. Далее в Activity, в которую необходимо вернуться после совершения оплаты (ваша страница магазина), для который вы прописывали deeplinkScheme, добавьте следующий код.
    class YourBillingActivity: AppCompatActivity() {

    // Previously created with RuStoreBillingClientFactory.create()
    private val billingClient: RuStoreBillingClient = YourDependencyInjection.getBillingClient()

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (savedInstanceState == null) {
    billingClient.onNewIntent(intent)
    }
    }

    override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    billingClient.onNewIntent(intent)
    }
    }

    к сведению

    Метод billingClient.onNewIntent(intent) должен вызываться в onCreate и onNewIntent при возврате в приложение после оплаты через СБП — чтобы вызвать шторку для завершения оплаты.

Дополнительные сведения

По ссылке ниже приведены сведения, касающиеся структуры deeplink-ссылок, а также информация о допустимых символах:
https://datatracker.ietf.org/doc/html/rfc3986#section-3.1.

примечание

Ссылка ведёт на сторонний ресурс, сведения представлены на английском языке.