Deep Link (derin bağlantı), kullanıcıyı ana ekranı atlayarak bir mobil uygulama içindeki belirli bir ekrana veya içeriğe yönlendiren bir URL'dir. Bir web sitesine yönelik normal bir bağlantının aksine, deep link uygulamayı etkinleştirir ve hedef içeriği hemen açar. Android Developers'a göre, doğru yapılandırılmış deep link'ler, içeriğe ulaşmak için gereken adım sayısını azaltarak hedef eyleme dönüşümü %30–50 oranında artırır.
Kilit noktalar
Deep Link (derin bağlantı), tıklandığında bir web sayfasını değil, bir mobil uygulama içindeki belirli bir ekranı açan URI'dir. Teknoloji, mobil platformların temel bir sorununu çözer: tarayıcı doğrudan bir uygulama ekranını açamaz ve deep link, web ile yerel kod arasında bir köprü oluşturur. Deep link olmadan, kullanıcı her zaman ana ekrana gelir ve istenen içeriğe manuel olarak gitmek zorunda kalır.
Bir deep link'in mimarisi iki bölümden oluşur: şema (scheme) hangi uygulamanın bağlantıyı işleyeceğini belirler ve yol (path) uygulama içindeki belirli bir kaynağı (ürün, makale, kullanıcı profili veya ayarlar bölümü) işaret eder. Sorgu parametreleri (?source=push&campaign=summer), analiz, kişiselleştirme ve kampanya atıfı için ek bağlam iletir.
Deep link ile normal bağlantı arasında ayrım yapmak önemlidir. Normal bir bağlantı (https://example.com/product/42) tarayıcıda açılır ve bir sayfanın web sürümüne gider. Bir deep link (myapp://product/42), uygulama yüklüyse aynı içeriğe sahip yerel ekranı açar, ancak uygulama yüklü değilse bir hata gösterir. Universal Link (iOS) ve App Link (Android), kesintisiz geri dönüş (fallback) sorununu çözmek için özel olarak oluşturulmuştur.
Farklı görevler farklı türde deep link'ler gerektirir. Bazı bağlantılar yalnızca yüklü uygulamayla çalışır, bazıları kurulumu bekleyebilir ve bazıları analitik bağlam iletir. Tür seçimi, kullanım senaryosuna bağlıdır: reklam kampanyası, push bildirimi, içerik paylaşımı veya e-posta bülteni.
Standart Deep Link, yalnızca uygulama cihazda zaten yüklüyse tetiklenen temel türdür. Kullanıcı myapp://product/42 bağlantısına tıklar, sistem kayıtlı şemayı algılar ve uygulamayı istenen ekranda açar. Uygulama yüklü değilse, tarayıcı “Sayfa bulunamadı” hatası gösterir veya hiçbir şey yapmaz. Bu tür, zaten yüklü bir uygulama içindeki dahili gezinme için uygundur.
Standart bir deep link kurulumu basittir: manifest'te (Android) veya Info.plist'te (iOS) URI şemasını kaydetmek yeterlidir. Sunucu doğrulaması veya SSL sertifikaları gerekmez. Ancak geri dönüşün olmaması nedeniyle, bu tür pazarlama kampanyaları için güncelliğini yitirmiş olarak kabul edilir — uygulaması olmayan kullanıcılardan trafik kaybı %60'a kadar çıkabilir.
Deferred Deep Link, normal deep link'lerin ana sorununu çözer: uygulama yüklü olmasa bile çalışır. Kullanıcı bir bağlantıya tıklar → bir sayfa görür (açılış sayfası veya App Store/Google Play) → uygulamayı yükler → ilk başlatmada, uygulama orijinal bağlantının bağlamını alır ve istenen ekranı açar. Teknoloji, bağlamı ilk başlatmaya kadar sunucuda depolayan bir aracı SDK (AppsFlyer, Branch, Adjust) gerektirir.
Branch, ertelenmiş deep link'ler için en popüler platformlardan biridir. Tüm platformlarda çalışan tek bir bağlantı sağlar: kullanıcının işletim sistemini algılar, uygulama mağazasına yönlendirir ve kurulumdan sonra bağlamı (promosyon kodu, ürün kimliği, kampanya kaynağı) iletir. Branch'e (2024) göre, ertelenmiş deep link'ler reklam kampanyası dönüşümünü %40–70 oranında artırır.
Contextual Deep Link, bağlam parametreleriyle (trafik kaynağı, kampanya, promosyon kodu, yönlendiren, iş ortağı kimliği) tamamlanmış normal veya ertelenmiş bir deep link'tir. Parametreler URL'de iletilir ve kişiselleştirme için uygulama tarafından işlenir: hoş geldin bonusu gösterme, indirimli ürün açma, kurulum analizlerini kaydetme.
UTM etiketleri (utm_source, utm_medium, utm_campaign), bağlam iletmenin standart bir yoludur. Mobilde, bağlamsal deep link'ler atıf için kritik öneme sahiptir: bunlar olmadan, uygulama sahibi kullanıcıyı hangi kanalın getirdiğini (organik trafik, Facebook reklamları, e-posta bülteni veya QR kodu) bilemez. Kaliteli atıf, bir MMP (Mobile Measurement Partner) ile entegrasyon gerektirir.
| Deep Link Türü | Kurulum gerektirir | Kurulumu bekler | Bağlam |
|---|---|---|---|
| Standart | Evet | Hayır | Sadece URL'de |
| Ertelenmiş | Hayır | Evet | Sunucu depolama |
| Bağlamsal | Herhangi | Herhangi | UTM + parametreler |
iOS, deep link'leri iki mekanizma aracılığıyla destekler: eski Custom URL Scheme ve modern Universal Link (iOS 9+). Custom URL Scheme, Info.plist'te özel bir şema kaydederek çalışır. Uygulama myapp:// kaydeder ve iOS böyle bir bağlantıya tıklandığında uygulamayı açar. Sorun: şema hiçbir uygulama tarafından kaydedilmemişse, tarayıcı bir hata gösterir.
iOS'ta deep link işleme, AppDelegate yöntemi application(_:open:options:) veya SceneDelegate scene(_:openURLContexts:) aracılığıyla gerçekleşir. Geliştirici URL'yi çıkarır, yolu ve parametreleri ayrıştırır ve ardından uygun ekrana gider. SwiftUI kullanılıyorsa, işleme OpenURLAction veya onChange(of: openURL) aracılığıyla yapılır. Uygulama durumunu (başlatılmamış, arka planda veya aktif) doğru şekilde işlemek önemlidir.
iOS'ta güvenlik katıdır: herhangi bir uygulama, aynı şemayı kaydederek Custom URL Scheme'yi ele geçirebilir. Bu potansiyel bir güvenlik açığıdır (URL şeması ele geçirme). Bu nedenle Apple, Universal Link'i daha güvenli bir alternatif olarak önerir: yalnızca doğrulanmış alan sahibi, bağlantıları uygulamayla ilişkilendirebilir. Universal Link hakkında daha fazla bilgi için Universal Link makalesine bakın.
Android, deep link'leri AndroidManifest.xml'deki Intent Filter'lar aracılığıyla uygular. Uygulama, belirli bir şemayı (myapp://) veya belirli ana bilgisayarları ve yolları işleyen bir Activity tanımlar. Kullanıcı bir deep link'e tıkladığında, Android eşleşen Intent Filter'a sahip bir Activity arar ve açar. Birden fazla eşleşen Activity varsa, sistem bir uygulama seçimi iletişim kutusu gösterir.
// AndroidManifest.xml - Deep Link için Intent Filter
<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>
Android'de deep link işleme, Activity.onCreate() veya onNewIntent() yönteminde yapılır. Geliştirici Intent'i alır, URI'yi çıkarır ve gezinmeyi başlatır. Jetpack Navigation için Navigation Deep Link bileşeni, gezinme grafiğinde deep link'leri bildirimsel olarak tanımlamaya olanak tanır. Android App Link (Android 6.0+), Digital Asset Links aracılığıyla doğrulama içeren ve uygulama seçimi iletişim kutusunu ortadan kaldıran deep link'lerin evrimidir.
Android 12+ değişikliklerini dikkate almak önemlidir: API 31'den itibaren sistem, deep link'leri işleyen Activity'ler için exported=true'un açıkça bildirilmesini gerektirir ve Intent Filter'ın doğruluğunu kontrol eder. Google Play Store, yayınlama sırasında App Link doğrulamasını kontrol eder. Doğrulama olmadan, deep link'ler web sitesinde olmayan sayfalara yönlendiriyorsa Google güncellemeyi reddedebilir.
Deep link kurulumu, her iki platform için ortak olan birkaç aşamayı içerir. İlk adım, şemayı ve URL yapısını tanımlamaktır. Universal Link ve App Link ile uyumluluk için özel şema yerine https şemasının kullanılması önerilir. URL yapısı, web sitesi yapısını yansıtmalıdır: /product/42, /profile/john, /settings/notifications. Bu, bakımı ve arama motorları tarafından içerik indekslemeyi basitleştirir.
İkinci aşama, uygulama kodunda deep link'leri işlemektir. Android için nav_graph'da bildirimsel deep link'lerle Jetpack Navigation önerilir. iOS için — OpenURLAction işleme ile SwiftUI NavigationStack önerilir. Üç uygulama durumunu işlemek önemlidir: soğuk başlatma (uygulama başlatılmamış), sıcak başlatma (arka planda) ve aktif (ekranda). Her durum farklı gezinme mantığı gerektirir.
Deep link testi ayrı bir görevdir. Android Studio, Intent Filter'ları kontrol etmek için App Links Assistant aracını sağlar. iOS'ta test, başlatma şeması argümanları aracılığıyla bir URL ileterek Xcode üzerinden yapılır. CI kontrolü (otomatik deep link gezinmesi ve beklenen ekranın açıldığının doğrulanması) ayarlanması önerilir. Ertelenmiş deep link'ler için test, “kurulum → ilk başlatma → bağlam”ın tam döngüsünü içerir. Test olmadan, uygulama gezinmesi güncellendiğinde deep link'ler sıklıkla bozulur.
Sıkça Sorulan Sorular
Normal bağlantı (https://site.com/page) tarayıcıda açılır. Deep link (myapp://page veya doğrulamalı https://site.com/page) bir mobil uygulama içindeki ekranı açar. Deep link ayrıca bağlam da iletebilir: promosyon kodu, trafik kaynağı, yönlendiren kimliği.
URI şeması, hangi uygulamanın bağlantıyı işleyeceğini belirleyen bir URL ön ekidir (örnek: myapp://, vk://, tg://). Sistem, yönlendirme için şemayı kullanır: bu şemayı kaydeden uygulamayı bulur ve işleme için URL'yi ona iletir.
Kullanıcı bağlantıya tıklar → hizmet (Branch, AppsFlyer) bağlamı hatırlar → App Store/Google Play'e yönlendirir → kurulum ve ilk başlatmadan sonra SDK, kaydedilmiş bağlamı uygulamaya iletir → uygulama, kullanıcı zaten uygulamayı yüklemiş gibi istenen ekranı açar.
Normal deep link — hayır. Ertelenmiş deep link — evet, uygulama mağazasına yönlendiren ve bağlamı kaydeden bir ara sayfa aracılığıyla. Universal Link ve App Link, uygulama yüklü değilse geri dönüş olarak web sitesini açar.
Android'de adb kullanın: adb shell am start -W -a android.intent.action.VIEW -d “myapp://product/42”. iOS'ta — xcrun simctl openurl booted “myapp://product/42”. Her iki platform için Firebase Dynamic Links ve Branch test konsolları mevcuttur.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun