Salt la documentație

Linkuri directe

Kixo Deep Links trimite fiecare persoană către cea mai bună destinație disponibilă. Dacă aplicația este instalată, același link HTTPS personalizat deschide ecranul corect în aplicație. În caz contrar, poate deschide site-ul tău, App Store sau fallbackul din Google Play. Sistemul de operare gestionează deschiderea într-o aplicație verificată; când linkul ajunge în browser, Kixo aplică fallbackul salvat pentru acel link.

Începe din Kixo

Deschide Setări proiect → Linkuri directe, creează o adresă și copiază configurarea afișată pentru acea adresă. Hostul din dashboard este sursa de referință pentru toate fragmentele de mai jos.

Cum se deschide linkul

Dispozitivul persoaneiRezultat
Aplicația este instalată, iar configurarea App Link este validăAplicația se deschide direct în destinația linkului.
Aplicația nu este instalatăKixo folosește fallbackul de site sau de store selectat pentru link.
Browser pe desktopSe deschide fallbackul de site.
Configurarea aplicației este incompletăSe deschide fallbackul sigur, în loc să apară un prompt de aplicație nefuncțional.

Folosește hostul personalizat exact

Hostul unui link Kixo aparține unui singur proiect și arată ca yourbrand.kixo.cc. Proiectele de dezvoltare pot folosi un alt sufix administrat de Kixo. Copiază întotdeauna hostul complet din dashboard.

Wildcard-urile nu funcționează

Configurează yourbrand.kixo.cc, nu *.kixo.cc și nici kixo.cc. Android și iOS verifică exact hostul pe care îl deschide persoana.

Handoff pentru site și cod QR

Web SDK recunoaște automat sosirea dintr-un link Kixo. Folosește getLinkData() doar dacă site-ul tău are nevoie, în propriul router, de contextul rezolvat al campaniei sau de parametri personalizați.

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);
}

Afișează „Open in app” pe web mobil

Trimite URL-ul public complet al linkului returnat de Kixo. Bannerul apare doar pe web mobil și lasă linkul Kixo să aleagă între aplicația instalată, store și destinația de pe site.

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

Continuă o sesiune de pe desktop cu un cod QR

Pentru un cod QR afișat pe site-ul tău, cere-i lui Kixo să creeze un handoff pentru un link existent, în loc să construiești singur un URL. Kixo folosește destinațiile din aplicație și de pe site salvate pentru acel link.

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

qrCode.render(handoff.url);

Folosește valorile returnate de Kixo

Trimite ID-ul linkului din Kixo și redă URL-ul returnat fără modificări. Parametrii opționali params adaugă context pentru ruta permisă din aplicația sau site-ul tău; nu înlocuiesc destinația linkului. Nu trimite un user ID sau un device ID.

Android App Links

Înainte să modifici codul, salvează în Aplicații și configurare numele pachetului Android și toate amprentele SHA-256 de semnare ale aplicației. Dacă release-ul este semnat de Google Play, adaugă și amprenta Play App Signing, pe lângă orice amprentă folosită pentru builduri directe sau interne.

1. Adaugă gazda în manifest

Pune acest filtru de intent pe activity-ul care deține navigația aplicației. Înlocuiește doar placeholderul pentru 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. Redirecționează deschiderile la cald

Kixo SDK citește un App Link la pornire la rece. Când Android reutilizează un activity existent, transmite mai departe noul intent, astfel încât deschiderea la cald să urmeze același flux de atribuire și rutare.

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. Verifică Android

Reinstalează aplicația după ce modifici manifestul, apoi cere-i lui Android să verifice hostul și inspectează rezultatul.

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"

Sfat

Dacă se deschide selectorul de browser, de obicei una dintre aceste valori nu se potrivește exact: hostul, numele pachetului sau amprenta de semnare. Verifică-le pe toate trei înainte să schimbi codul de navigație al aplicației.

iOS Universal Links

Salvează bundle ID-ul aplicației și Apple team ID în Aplicații și configurare. În Xcode, activează capabilitatea Domenii asociate pe același target al aplicației și cu aceeași configurare de semnare folosită de buildul instalat.

1. Adaugă domeniul asociat

applinks:YOUR_EXACT_KIXO_HOST

2. Redirecționează deschiderile la rece și la cald

Alege ciclul de viață folosit de aplicație. În ambele exemple, destinația rezolvată este trimisă către propriul router; Kixo nu înlocuiește navigația aplicației.

import Kixo

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

3. Verifică iOS

  1. Șterge aplicația de pe dispozitiv, apoi instalează buildul semnat.
  2. Deschide un link Kixo real din Notes, Messages sau Safari. Nu te baza doar pe testul în care îl lipești în bara de adrese din Safari.
  3. Confirmă că o deschidere la rece lansează aplicația în ecranul așteptat.
  4. Lasă aplicația deschisă, atinge din nou linkul și confirmă deschiderea la cald.
  5. Confirmă că deschiderea linkului apare în Kixo.

Păstrează rutarea în aplicație

Un link Kixo poate include o destinație precum /products/42. Mapează căile cunoscute la ecranele proprii și păstrează verificările de acces deja existente în aplicație. Nu transforma valoarea rezolvată într-un deschizător generic de 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()
    }
}

Dă asta unui asistent de programare

Înlocuiește cele cinci placeholdere cu valorile din Setări proiect → Aplicații și configurare și Linkuri profunde, apoi lipește brief-ul complet în Codex, Claude Code, Cursor, Windsurf sau într-un alt asistent de programare.

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

Ce nu trebuie să ghicească asistentul

Hostul personalizat, numele pachetului, amprentele de semnare, bundle ID-ul și Apple team ID vin din aplicația ta și din proiectul Kixo. Un asistent poate face integrarea în cod, dar trebuie să se oprească și să raporteze orice valoare lipsă, nu să inventeze una.

Checklist de release

  • Hostul exact Kixo este prezent în configurările Android și iOS.
  • Android raportează hostul ca verificat pentru pachetul de release.
  • Amprentele de semnare pentru release sunt salvate în Kixo.
  • Entitlementul iOS este prezent în buildul semnat al aplicației.
  • Deschiderile la rece și la cald ajung în ecranul așteptat.
  • Fallbackul de site sau de store funcționează fără aplicația instalată.
  • Deschiderea linkului apare în analytics-ul Kixo.

Ghiduri conexe