Deep Link (дубоки линк) — је URL који усмерава корисника на одређени екран или садржај унутар мобилне апликације, заобилазећи главни екран. За разлику од обичног линка ка веб сајту, deep link активира апликацију и одмах отвара циљни садржај. Према Android Developers, правилно постављени deep link-ови повећавају конверзију ка циљној акцији за 30–50% захваљујући смањењу броја корака до садржаја.
Главно
Deep Link (дубоки линк) — је URI који након клика отвара не веб страницу, већ одређени екран унутар мобилне апликације. Технологија решава фундаментални проблем мобилних платформи: прегледач не може директно да отвори екран апликације, а deep link ствара мост између веба и нативног кода. Без deep link-а, корисник увек доспева на почетни екран и мора ручно да навигира до жељеног садржаја.
Архитектура deep link-а се састоји из два дела: схема (scheme) одређује која апликација треба да обради линк, а путања (path) указује на одређени ресурс унутар апликације — производ, чланак, кориснички профил или секцију поставки. Параметри упита (?source=push&campaign=summer) преносе додатни контекст за аналитику, персонализацију и атрибуцију кампања.
Важно је разликовати deep link од обичног линка. Обичан линк (https://example.com/product/42) отвара се у прегледачу и води ка веб верзији странице. Deep link (myapp://product/42) код инсталиране апликације отвара нативни екран са истим садржајем, а ако апликација не постоји — приказује грешку. Управо за решавање проблема беспрекорног fallback-а створени су Universal Link (iOS) и App Link (Android).
Различити задаци захтевају различите врсте deep link-а. Неки линкови раде само са инсталираном апликацијом, други могу да сачекају инсталацију, трећи преносе аналитички контекст. Избор типа зависи од сценарија коришћења: рекламна кампања, push обавештење, дељење садржаја или имејл кампања.
Standard Deep Link — основни тип који се активира само ако је апликација већ инсталирана на уређају. Корисник кликне на линк myapp://product/42, систем пронађе регистровану схему и отвара апликацију на одговарајућем екрану. Ако апликација није инсталирана — прегледач приказује грешку «Страница није пронађена» или једноставно ништа не ради. Овај тип је погодан за унутрашњу навигацију унутар већ инсталиране апликације.
Постављање стандардног deep link-а је једноставно: довољно је регистровати URI-схему у манифесту (Android) или Info.plist (iOS). Није потребна серверска валидација нити SSL цертификати. Али управо због недостатка fallback-а, овај тип се сматра застарелим за маркетиншке кампање — губитак саобраћаја од корисника без апликације достиже до 60%.
Deferred Deep Link решава главни проблем обичних deep link-ова: ради чак и ако апликација није инсталирана. Корисник кликне на линк → види страницу (landing или App Store/Google Play) → инсталира апликацију → при првом покретању апликација добија контекст оригиналног линка и отвара жељени екран. Технологија захтева SDK посредника (AppsFlyer, Branch, Adjust) који чува контекст на серверу до тренутка првог покретања.
Branch — једна од најпопуларнијих платформи за deferred deep link. Пружа јединствени линк који ради на свим платформама: одређује оперативни систем корисника, преусмерава ка продавници апликација, а након инсталације преноси контекст (промо код, идентификатор производа, извор кампање). Према подацима Branch (2024), deferred deep link-ови повећавају конверзију рекламних кампања за 40–70%.
Contextual Deep Link — је обичан или deferred deep link допуњен параметрима контекста: извор саобраћаја (source), кампања (campaign), промо код, referrer, идентификатор партнера. Параметри се преносе у URL-у и обрађују апликација за персонализацију: приказ добродошлице, отварање производа са попустом, биљежење аналитике инсталације.
UTM ознаке (utm_source, utm_medium, utm_campaign) — стандардни начин преношења контекста. У мобилним апликацијама, контекстни deep link-ови су критични за атрибуцију: без њих власник апликације не зна који канал је довео корисника — органски саобраћај, Facebook реклама, имејл кампања или QR код. Квалитетна атрибуција захтева интеграцију са MMP (Mobile Measurement Partner).
| Тип Deep Link-а | Захтева инсталацију | Подржава чекање | Контекст |
|---|---|---|---|
| Standard | Да | Не | Само у URL-у |
| Deferred | Не | Да | Серверско чување |
| Contextual | Било који | Било који | UTM + параметри |
iOS подржава deep link кроз два механизма: стари Custom URL Scheme и савремени Universal Link (iOS 9+). Custom URL Scheme ради на принципу регистрације прилагођене схеме у Info.plist. Апликација региструје myapp://, и iOS при клику на такав линк отвара апликацију. Проблем: ако схема није регистрована ни једном апликацијом, прегледач приказује грешку.
Обрада deep link-а на iOS-у се одвија кроз методу AppDelegate application(_:open:options:) или SceneDelegate scene(_:openURLContexts:). Програмер извлачи URL, парсира путању и параметре, затим навигира ка одговарајућем екрану. Ако се користи SwiftUI, обрада се врши кроз OpenURLAction или onChange(of: openURL). Важно је правилно обрадити стање: апликација може бити непокренута, умањена или активна.
Security на iOS-у је строга: Custom URL Scheme може да пресретне било која апликација која је регистровала исту схему. Ово је потенцијална рањивост (URL Scheme hijacking). Зато Apple препоручује Universal Link као безбеднију алтернативу: само потврђени власник домена може да повеже линкове са апликацијом. Више о Universal Link-у — у чланку Universal Link.
Android имплементира deep link кроз Intent Filter у AndroidManifest.xml. Апликација дефинише Activity која обрађује одређену схему (myapp://) или одређене хостове и путање. Кад корисник кликне на deep link, Android тражи Activity са одговарајућим Intent Filter-ом и отвара је. Ако постоји више одговарајућих Activity-ја — систем приказује дијалог за избор апликације.
// AndroidManifest.xml — Intent Filter за Deep Link
<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>
Обрада deep link-а у Android-у се врши у методи Activity.onCreate() или onNewIntent(). Програмер добија Intent, извлачи URI и позива навигацију. За Jetpack Navigation, компонента Navigation Deep Link омогућава декларативно описивање deep link-а у графу навигације. Android App Link (Android 6.0+) — еволуција deep link-а са верификацијом кроз Digital Asset Links, која елиминише дијалог за избор апликације.
Важно је узети у обзир промјене Android 12+: од API 31, систем захтева јасно наводѕење exported=true за Activity које обрађују deep link и проверава исправност Intent Filter-а. Google Play Store проверава App Link верификацију при објављивању. Без верификације, Google може да одбије ажурирање ако deep link-ови воде ка непостојећим страницама сајта.
Постављање deep link-а укључује неколико корака заједничких за обе платформе. Први корак — одређити схему и структуру URL. Препоручује се коришћење https схеме (уместо прилагођене) за компатибилност са Universal Link и App Link. Структура URL треба да понавља структуру веб сајта: /product/42, /profile/john, /settings/notifications. Ово поједностављује одржавање и индексирање садржаја од стране претраживача.
Други корак — обрада deep link-а у коду апликације. За Android се препоручује Jetpack Navigation са декларативним deep link-овима у nav_graph. За iOS — SwiftUI NavigationStack са обрадом OpenURLAction. Важно је обрадити три стања апликације: cold start (апликација није покренута), warm start (умањена) и active (на екрану). Свако стање захтева другачију логику навигације.
Тестирање deep link-а — засебни задатак. Android Studio пружа алат App Links Assistant за проверу Intent Filter-а. На iOS-у, тестирање се обавља кроз Xcode преношењем URL-а кроз аргументе схеме покретања. Препоручује се постављање CI провере: аутоматски пролаз кроз deep link и провера да ли се отворио очекивани екран. За deferred deep link, тестирање укључује пуни циклус «инсталација → прво покретање → контекст». Без тестирања, deep link-ови се често кваре при ажурирању навигације у апликацији.
Често постављана питања
Обичан линк (https://site.com/page) отвара се у прегледачу. Deep link (myapp://page или https://site.com/page са верификацијом) отвара екран унутар мобилне апликације. Deep link такође може да преноси контекст: промо код, извор саобраћаја, идентификатор реферала.
URI-схема — је префикс URL који одређује која апликација треба да обради линк (нпр. myapp://, vk://, tg://). Систем користи схему за рутирање: проналази апликацију која је регистровала ову схему и преноси јој URL за обраду.
Корисник кликне на линк → сервис (Branch, AppsFlyer) памти контекст → преусмерава ка App Store/Google Play → након инсталације и првог покретања SDK преноси сачувани контекст апликацији → апликација отвара жељени екран, као да је корисник већ имао апликацију.
Обичан deep link — не. Deferred deep link — да, захваљујући посредној страници која преусмерава ка продавници апликација и чува контекст. Universal Link и App Link отварају сајт као fallback ако апликација није инсталирана.
На Android-у користите adb: adb shell am start -W -a android.intent.action.VIEW -d “myapp://product/42”. На iOS-у — xcrun simctl openurl booted “myapp://product/42”. За обе платформе доступне су тест конзоле Firebase Dynamic Links и Branch.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође