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

Глибокі посилання

Kixo Deep Links ведуть кожну людину до найкращої доступної цілі. Якщо застосунок установлено, те саме брендоване посилання HTTPS відкриває потрібний екран у застосунку. Інакше може відкритися ваш сайт, App Store або резервний варіант у Google Play. Підтверджене відкриття застосунку обробляє операційна система; якщо посилання потрапляє в браузер, Kixo застосовує резервний варіант, збережений для цього посилання.

Почніть у Kixo

Відкрийте Налаштування проєкту → Deep links, створіть адресу й скопіюйте показані для неї налаштування. Host у дашборді — джерело істини для всіх фрагментів нижче.

Як відкривається посилання

Пристрій користувачаРезультат
Застосунок установлено, App Links налаштовано коректноЗастосунок одразу відкривається в цільовій точці посилання.
Застосунок не встановленоKixo використовує для посилання вибраний резервний варіант: сайт або магазин застосунків.
Браузер на комп’ютеріВідкривається резервний варіант для сайту.
Налаштування застосунку не завершеноЗамість зламаного запрошення відкрити застосунок відкривається безпечний резервний варіант.

Використовуйте точний брендований 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, але не замінюють ціль посилання. Не передавайте user ID або device ID.

Android App Links

Перш ніж редагувати код, збережіть у Застосунки й налаштування package name для 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

Після зміни маніфесту перевстановіть застосунок, попросіть 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, package name або signing fingerprint. Перш ніж міняти код навігації в застосунку, перевірте всі три значення.

iOS Universal Links

Збережіть bundle ID застосунку та Apple team ID у Застосунки й налаштування. У Xcode увімкніть можливість Пов’язані домени для того самого app 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()
    }
}

Передайте це асистенту з програмування

Замініть п’ять заповнювачів значеннями з Налаштування проєкту → Apps & setup і Глибокі посилання, а потім вставте готовий бриф у 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, package name, signing fingerprints, bundle ID і Apple team ID беруться з вашого застосунку та проєкту Kixo. Асистент може підготувати код, але якщо якогось значення бракує, має зупинитися й повідомити про це, а не вигадувати його.

Чекліст релізу

  • Точний host Kixo вказано в налаштуваннях Android та iOS.
  • Android показує, що host підтверджено для релізного пакета.
  • У Kixo збережено відбитки підпису релізу.
  • У підписаній збірці застосунку є entitlement для iOS.
  • Холодний і теплий запуск відкривають потрібний екран.
  • Без установленого застосунку працює резервний перехід на сайт або в магазин.
  • Відкриття посилання з’являється в аналітиці Kixo.

Пов’язані матеріали