Deep Link (mély link) — egy olyan URL, amely a felhasználót egy mobilalkalmazás egy adott képernyőjére vagy tartalmára irányítja, megkerülve a főképernyőt. Ellentétben egy weboldalra mutató szokásos linkkel, a deep link aktiválja az alkalmazást és azonnal megnyitja a céltartalmat. A Android Developers szerint a helyesen konfigurált deep linkek 30–50%-kal növelik a konverziót a célműveletre a tartalomhoz vezető lépések számának csökkentésével.
Főbb pontok
Deep Link (mély link) — egy URI, amely kattintáskor nem egy weboldalt, hanem egy adott képernyőt nyit meg egy mobilalkalmazáson belül. A technológia megoldja a mobil platformok alapvető problémáját: a böngésző nem tudja közvetlenül megnyitni az alkalmazás képernyőjét, a deep link pedig hidat képez a web és a natív kód között. Deep link nélkül a felhasználó mindig a főképernyőre kerül, és kézzel kell navigálnia a kívánt tartalomhoz.
A deep link architektúrája két részből áll: a séma (scheme) meghatározza, hogy melyik alkalmazásnak kell feldolgoznia a linket, az útvonal (path) pedig egy adott erőforrásra mutat az alkalmazáson belül — termék, cikk, felhasználói profil vagy beállítások szakasz. A lekérdezési paraméterek (?source=push&campaign=summer) további kontextust adnak át analitikához, személyre szabáshoz és kampányattribúcióhoz.
Fontos megkülönböztetni a deep linket a szokásos linktől. Egy szokásos link (https://example.com/product/42) a böngészőben nyílik meg és az oldal webes verziójába vezet. A deep link (myapp://product/42) telepített alkalmazással a natív képernyőt nyitja meg ugyanazzal a tartalommal, ha pedig az alkalmazás hiányzik — hibát jelenít meg. Pontosan a zökkenőmentes fallback problémájának megoldására hozták létre a Universal Linket (iOS) és az App Linket (Android).
Különböző feladatok különböző típusú deep linket igényelnek. Néhány link csak telepített alkalmazással működik, mások képesek várni a telepítésre, megint mások analitikai kontextust adnak át. A típus kiválasztása a használati forgatókönyvtől függ: reklámkampány, push értesítés, tartalommegosztás vagy e-mail kampány.
Standard Deep Link — alap típus, amely csak akkor aktiválódik, ha az alkalmazás már telepítve van az eszközön. A felhasználó rákattint a myapp://product/42 linkre, a rendszer megtalálja a regisztrált sémát és megnyitja az alkalmazást a megfelelő képernyőn. Ha az alkalmazás nincs telepítve — a böngésző a „Oldal nem található” hibát jeleníti meg, vagy egyszerűen nem tesz semmit. Ez a típus alkalmas a már telepített alkalmazáson belüli navigációra.
A szabványos deep link beállítása egyszerű: csak regisztrálni kell az URI-sémát a manifestben (Android) vagy Info.plist-ben (iOS). Nem igényel szerveroldali érvényesítést vagy SSL tanúsítványokat. De éppen a fallback hiánya miatt ez a típus elavultnak számít a marketingkampányokhoz — az alkalmazással nem rendelkező felhasználóktól származó forgalomveszteség eléri a 60%-ot.
Deferred Deep Link megoldja a szokásos deep linkek fő problémáját: akkor is működik, ha az alkalmazás nincs telepítve. A felhasználó rákattint a linkre → lát egy oldalt (landing vagy App Store/Google Play) → telepíti az alkalmazást → az első indításkor az alkalmazás megkapja az eredeti link kontextusát és megnyitja a kívánt képernyőt. A technológia közvetítő SDK-t (AppsFlyer, Branch, Adjust) igényel, amely a kontextust a szerveren tárolja az első indításig.
Branch — az egyik legnépszerűbb platform a deferred deep linkhez. Egységes linket biztosít, amely minden platformon működik: érzékeli a felhasználó operációs rendszerét, átirányít az alkalmazásáruházba, és telepítés után átadja a kontextust (promóciós kód, termékazonosító, kampányforrás). A Branch (2024) adatai szerint a deferred deep linkek 40–70%-kal növelik a reklámkampányok konverzióját.
Contextual Deep Link — egy szokásos vagy deferred deep link, kiegészítve kontextus paraméterekkel: forgalmi forrás (source), kampány (campaign), promóciós kód, referrer, partnerazonosító. A paraméterek az URL-ben kerülnek átadásra, és az alkalmazás dolgozza fel őket személyre szabáshoz: üdvözlő bónusz megjelenítése, termék megnyitása kedvezménnyel, telepítési analitika rögzítése.
UTM-címkék (utm_source, utm_medium, utm_campaign) — a kontextus átadásának szabványos módja. Mobil eszközökön a kontextuális deep linkek kritikusak az attribúcióhoz: nélkülük az alkalmazás tulajdonosa nem tudja, melyik csatorna hozta a felhasználót — organikus forgalom, Facebook hirdetés, e-mail kampány vagy QR kód. A minőségi attribúció MMP-vel (Mobile Measurement Partner) történő integrációt igényel.
| Deep Link típusa | Telepítést igényel | Támogatja a várakozást | Kontextus |
|---|---|---|---|
| Standard | Igen | Nem | Csak URL-ben |
| Deferred | Nem | Igen | Szerver tárolás |
| Contextual | Bármelyik | Bármelyik | UTM + paraméterek |
iOS két mechanizmuson keresztül támogatja a deep linket: a régi Custom URL Scheme és a modern Universal Link (iOS 9+). A Custom URL Scheme az Info.plist-ben történő egyedi séma regisztráció elvén működik. Az alkalmazás regisztrálja a myapp://-t, és az iOS egy ilyen linkre kattintva megnyitja az alkalmazást. Probléma: ha a sémát egyetlen alkalmazás sem regisztrálta, a böngésző hibát jelenít meg.
A deep link feldolgozása iOS rendszeren az AppDelegate application(_:open:options:) vagy SceneDelegate scene(_:openURLContexts:) metóduson keresztül történik. A fejlesztő kinyeri az URL-t, értelmezi az útvonalat és a paramétereket, majd a megfelelő képernyőre navigál. SwiftUI használata esetén a feldolgozás OpenURLAction vagy onChange(of: openURL) segítségével történik. Fontos az állapot helyes kezelése: az alkalmazás lehet nem elindított, minimalizált vagy aktív.
A Security szigorú iOS-en: a Custom URL Scheme-t bármely alkalmazás elfoghatja, amely ugyanazt a sémát regisztrálta. Ez egy potenciális sérülékenység (URL Scheme hijacking). Ezért az Apple a Universal Linket ajánlja biztonságosabb alternatívaként: csak a megerősített doméntulajdonos kapcsolhat össze linkeket az alkalmazással. Bővebben a Universal Linkről — a Universal Link cikkben.
Android a deep linket Intent Filteren keresztül valósítja meg az AndroidManifest.xml-ben. Az alkalmazás meghatároz egy Activity-t, amely egy adott sémát (myapp://) vagy konkrét hosztokat és útvonalakat dolgoz fel. Amikor a felhasználó rákattint egy deep linkre, az Android megkeresi a megfelelő Intent Filterrel rendelkező Activity-t és megnyitja. Ha több megfelelő Activity létezik — a rendszer egy párbeszédablakot jelenít meg az alkalmazás kiválasztásához.
// AndroidManifest.xml — Intent Filter a Deep Linkhez
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<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="myapp"
android:host="product"
android:pathPrefix="/" />
</intent-filter>
</activity>
A deep link feldolgozása Android rendszeren az Activity.onCreate() vagy onNewIntent() metódusban történik. A fejlesztő megkapja az Intentet, kinyeri az URI-t és meghívja a navigációt. A Jetpack Navigation esetében a Navigation Deep Link komponens lehetővé teszi a deep link deklaratív leírását a navigációs gráfban. Az Android App Link (Android 6.0+) — a deep link továbbfejlesztése Digital Asset Links segítségével történő ellenőrzéssel, amely megszünteti a párbeszédablakot.
Fontos figyelembe venni az Android 12+ változásait: az API 31-től kezdve a rendszer explicit exported=true beállítást követel meg a deep linket feldolgozó Activity-k számára, és ellenőrzi az Intent Filter helyességét. A Google Play Store ellenőrzi az App Link hitelesítést a közzétételkor. Hitelesítés nélkül a Google elutasíthatja a frissítést, ha a deep linkek nem létező oldalakra vezetnek.
A deep link beállítása több, mindkét platform számára közös lépést foglal magában. Az első lépés — a séma és az URL-struktúra meghatározása. Javasolt a https séma használata (egyedi helyett) a Universal Link és App Link kompatibilitás érdekében. Az URL-struktúrának tükröznie kell a weboldal struktúráját: /product/42, /profile/john, /settings/notifications. Ez leegyszerűsíti a karbantartást és a tartalom indexelését a keresőmotorok által.
Második lépés — a deep link feldolgozása az alkalmazás kódjában. Android esetén a Jetpack Navigation ajánlott deklaratív deep linkekkel a nav_graph-ban. iOS esetén — SwiftUI NavigationStack OpenURLAction feldolgozással. Fontos az alkalmazás három állapotának kezelése: cold start (az alkalmazás nem futott), warm start (minimalizált) és active (képernyőn). Minden állapot eltérő navigációs logikát igényel.
A deep link tesztelése — külön feladat. Az Android Studio App Links Assistant eszközt kínál az Intent Filter ellenőrzéséhez. iOS-en a tesztelés Xcode-on keresztül történik az URL indítási séma argumentumokon keresztül történő átadásával. Javasolt CI-ellenőrzés beállítása: automatikus áthaladás a deep linken és annak ellenőrzése, hogy a várt képernyő nyílt-e meg. A deferred deep link esetében a tesztelés a teljes ciklust magában foglalja: „telepítés → első indítás → kontextus”. Tesztelés nélkül a deep linkek gyakran meghibásodnak a navigáció frissítésekor az alkalmazásban.
Gyakran ismételt kérdések
Szokásos link (https://site.com/page) a böngészőben nyílik meg. Deep link (myapp://page vagy https://site.com/page hitelesítéssel) egy képernyőt nyit meg a mobilalkalmazásban. A deep link kontextust is átadhat: promóciós kód, forgalmi forrás, referálási azonosító.
URI-séma — egy URL előtag, amely meghatározza, hogy melyik alkalmazásnak kell feldolgoznia a linket (például myapp://, vk://, tg://). A rendszer a sémát használja útválasztáshoz: megtalálja a sémát regisztráló alkalmazást és átadja neki az URL-t feldolgozásra.
Felhasználó rákattint a linkre → a szolgáltatás (Branch, AppsFlyer) eltárolja a kontextust → átirányít az App Store/Google Play oldalra → telepítés és első indítás után az SDK átadja a mentett kontextust az alkalmazásnak → az alkalmazás megnyitja a kívánt képernyőt, mintha a felhasználónak már lenne alkalmazása.
Szokásos deep link — nem. Deferred deep link — igen, egy közvetítő oldalon keresztül, amely átirányít az alkalmazásáruházba és tárolja a kontextust. A Universal Link és App Link a weboldalt nyitja meg fallbackként, ha az alkalmazás nincs telepítve.
Androidon használja az adb-t: adb shell am start -W -a android.intent.action.VIEW -d “myapp://product/42”. iOS-en — xcrun simctl openurl booted “myapp://product/42”. Mindkét platformhoz elérhetők a Firebase Dynamic Links és Branch tesztkonzolok.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is