Перейти к документации

Глубокие ссылки

Kixo Deep Links направляют пользователя в лучший доступный вариант. Если приложение установлено, та же брендированная ссылка HTTPS откроет нужный экран в приложении. Иначе откроется запасной вариант: ваш сайт, App Store или Google Play. Проверенное открытие приложения обрабатывает операционная система; если ссылка попадает в браузер, Kixo применяет fallback, сохранённый для этой ссылки.

Начните в Kixo

Откройте Настройки проекта → Глубокие ссылки, создайте адрес и скопируйте настройку, показанную для него. Host в дашборде — источник истины для всех фрагментов ниже.

Как открывается ссылка

Устройство пользователяРезультат
Приложение установлено, App Links настроены корректноПриложение сразу открывается по адресу назначения ссылки.
Приложение не установленоKixo использует для ссылки выбранный fallback: сайт или магазин приложений.
Браузер на компьютереОткрывается fallback для сайта.
Настройка приложения не завершенаВместо сломанного предложения открыть приложение срабатывает безопасный fallback.

Используйте точный брендированный host

Host ссылки Kixo относится к одному проекту и выглядит, например, так: yourbrand.kixo.cc. У проектов разработки может быть другой домен, которым управляет Kixo. Всегда копируйте host целиком из дашборда.

Подстановочные символы не работают

Настройте yourbrand.kixo.cc, а не *.kixo.cc и не kixo.cc. Android и iOS проверяют точный host, который открывает пользователь.

Сайт и QR handoff

Web SDK автоматически распознаёт переход на сайт по ссылке Kixo. Используйте getLinkData() только если вашему сайту нужен разрешённый контекст кампании или пользовательские параметры в собственном роутере.

js
const link = Kixo.getLinkData();

if (link?.params.product_id) {
  // URL values are user-controlled. Allowlist them before routing.
  router.openProduct(link.params.product_id);
}

Показывать «Open in app» в мобильной веб-версии

Передайте полный публичный URL ссылки, который вернул Kixo. Баннер показывается только в мобильной веб-версии и позволяет ссылке Kixo выбрать приложение, магазин или сайт.

js
Kixo.showSmartBanner({
  linkId: 'YOUR_KIXO_LINK_ID',
  linkUrl: 'https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG',
  title: 'Continue in the app',
});

Продолжить сессию на компьютере по QR-коду

Если QR-код показывается на вашем сайте, попросите Kixo создать handoff для существующей ссылки, а не собирайте URL вручную. Kixo возьмёт адреса приложения и сайта, сохранённые для этой ссылки.

js
const handoff = await Kixo.createQrHandoff({
  linkId: 'YOUR_KIXO_LINK_ID',
  params: {
    product_id: '42',
  },
});

qrCode.render(handoff.url);

Используйте значения, которые вернул Kixo

Передайте ID ссылки из Kixo и выводите возвращённый URL без изменений. Необязательные params добавляют контекст для маршрута приложения или сайта из allowlist, но не заменяют адрес назначения ссылки. Не передавайте ID пользователя или ID устройства.

Android App Links

Перед правкой кода сохраните в Приложения и настройка имя пакета Android и все отпечатки подписи приложения SHA-256. Если релиз подписывает Google Play, добавьте и отпечаток Play App Signing, и отпечатки, которые используются для прямых или внутренних сборок.

1. Добавьте хост в манифест

Добавьте этот intent filter в activity, которая управляет навигацией приложения. Замените только заполнитель host.

xml
<activity
    android:name=".MainActivity"
    android:exported="true">
    <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="YOUR_EXACT_KIXO_HOST"
            android:pathPrefix="/link/" />
    </intent-filter>
</activity>

2. Передавайте ссылки при тёплом запуске

Kixo SDK считывает App Link при холодном запуске. Когда Android повторно использует существующую activity, передайте в неё новый intent, чтобы тёплое открытие прошло по тому же пути атрибуции и маршрутизации.

kotlin
import android.content.Intent
import io.kixo.sdk.Kixo

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    setIntent(intent)
    intent.dataString?.let { url ->
        Kixo.handleDeepLink(url, source = "applink")
    }
}

3. Проверьте Android

После изменения manifest переустановите приложение, затем попросите Android проверить host и посмотрите результат.

bash
adb shell pm verify-app-links --re-verify YOUR_ANDROID_PACKAGE
adb shell pm get-app-links YOUR_ANDROID_PACKAGE

# The exact host should be "verified".
adb shell am start -W \
  -a android.intent.action.VIEW \
  -d "https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG"

Совет

Если система предлагает выбрать браузер, обычно не совпадает точный host, имя пакета или отпечаток подписи. Прежде чем менять код навигации в приложении, проверьте все три значения.

iOS Universal Links

Сохраните bundle ID приложения и Apple team ID в Приложения и настройка. В Xcode включите возможность Связанные домены для того же target приложения и той же конфигурации подписи, что используются в установленной сборке.

1. Добавьте связанный домен

applinks:YOUR_EXACT_KIXO_HOST

2. Передавайте ссылки и при холодном, и при тёплом запуске

Выберите жизненный цикл, который использует приложение. В обоих примерах разрешённый адрес назначения передаётся в ваш роутер; Kixo не подменяет навигацию приложения.

import Kixo

WindowGroup {
    ContentView()
        .onKixoDeepLink { link in
            guard link.phase == .resolved else { return }
            router.open(link.targetPath ?? link.path)
        }
}

3. Проверьте iOS

  1. Удалите приложение с устройства, затем установите подписанную сборку.
  2. Откройте настоящую ссылку Kixo из Notes, Messages или Safari. Не проверяйте только вставкой ссылки в адресную строку Safari.
  3. Проверьте, что при холодном открытии приложение запускается на нужном экране.
  4. Оставьте приложение открытым, ещё раз нажмите ссылку и проверьте тёплое открытие.
  5. Убедитесь, что открытие ссылки появилось в Kixo.

Оставьте маршрутизацию внутри приложения

Ссылка Kixo может содержать адрес назначения, например /products/42. Сопоставляйте известные пути с экранами вашего приложения и сохраняйте существующие проверки доступа. Не превращайте полученное значение в универсальный обработчик URL.

Kixo.setDeferredDeepLinkListener { link ->
    if (link?.phase != KixoDeepLinkPhase.RESOLVED) return@setDeferredDeepLinkListener
    when {
        link.targetUrl?.startsWith("/products/") == true ->
            router.openProduct(link.targetUrl.substringAfterLast("/"))
        link.targetUrl == "/account" ->
            router.openAccount()
    }
}

Передайте это помощнику по коду

Подставьте в пять заполнителей значения из Настройки проекта → Приложения и настройка и Глубокие ссылки, затем вставьте готовый текст в Codex, Claude Code, Cursor, Windsurf или другой помощник по коду.

text
Add Kixo Deep Links to this app.

Project values:
- Kixo branded host: YOUR_EXACT_KIXO_HOST
- Android package name: YOUR_ANDROID_PACKAGE
- Android SHA-256 signing fingerprints: YOUR_ANDROID_FINGERPRINTS
- iOS bundle ID: YOUR_IOS_BUNDLE_ID
- Apple team ID: YOUR_APPLE_TEAM_ID

Requirements:
1. Use the exact branded host above. Do not replace it with kixo.cc, dixo.dev, a wildcard, or the website domain.
2. Keep the app's existing navigation. Kixo resolves and measures the link; the app decides which screen to show.
3. Android:
   - add an android:autoVerify App Links intent filter for https://YOUR_EXACT_KIXO_HOST/link/
   - keep the package name and every release signing fingerprint in Kixo Apps & setup
   - forward warm Activity.onNewIntent URLs to Kixo.handleDeepLink(url, source = "applink")
4. iOS:
   - add applinks:YOUR_EXACT_KIXO_HOST to the app target's Associated Domains entitlement
   - keep the bundle ID and Apple team ID in Kixo Apps & setup
   - for SwiftUI, attach .onKixoDeepLink to the root view
   - for UIKit scenes, forward cold connectionOptions and warm NSUserActivity callbacks to Kixo
5. Route only known in-app paths. Do not blindly open an arbitrary URL returned by a link.
6. Test a cold open and a warm open on a physical device or emulator. Confirm the app opens directly and the link open appears in Kixo.

Return:
- the files changed
- the exact host configured in each platform
- cold-open and warm-open test results
- anything still requiring a dashboard or signing-account change

Что помощник не должен додумывать

Брендированный host, имя пакета, отпечатки подписи, bundle ID и Apple team ID берутся из вашего приложения и проекта Kixo. Помощник может подключить код, но при отсутствии значения должен остановиться и сообщить об этом, а не придумывать его.

Чек-лист перед релизом

  • Точный host Kixo указан и в настройках Android, и в настройках iOS.
  • Android показывает, что host подтверждён для релизного пакета.
  • Отпечатки подписи релизной сборки сохранены в Kixo.
  • Entitlement для iOS есть в подписанной сборке приложения.
  • И холодный, и тёплый запуск открывают нужный экран.
  • Без установленного приложения работает fallback на сайт или в магазин приложений.
  • Открытие ссылки появилось в аналитике Kixo.

См. также