Deep link, kullanıcıyı uygulamanın ana ekranına değil doğrudan belirli bir içeriğe, örneğin bir ürün sayfasına, siparişe ya da şifre sıfırlama ekranına götüren bağlantıdır. Bugün doğru yöntem, sitenizin normal HTTPS adreslerini uygulamaya bağlamaktır: iOS’ta Universal Links, Android’de App Links. Uygulama yüklüyse bağlantı uygulamada ilgili ekranı açar, yüklü değilse aynı adres web sitesinde açılır. Bunun çalışması için hem uygulamada hem de alan adınızda birer doğrulama ayarı gerekir; ikisinden biri eksikse bağlantı sessizce tarayıcıya düşer.
Deep link türleri: özel şema, doğrulanmış bağlantı, ertelenmiş bağlantı
- Özel URL şeması (uygulamam://urun/42): kurulumu en kolay yöntemdir ama doğrulanmaz; başka bir uygulama aynı şemayı tanımlayabilir ve uygulama yüklü değilse bağlantı hiçbir yere gitmez.
- Doğrulanmış bağlantı (https://alanadiniz.com/urun/42): iOS’ta Universal Links, Android’de App Links. Alan adının sahibi olduğunuzu işletim sistemine kanıtlarsınız, uygulama yoksa sayfa web’de açılır.
- Ertelenmiş deep link: kullanıcı uygulamayı henüz yüklememişse, mağazadan yükleyip ilk açtığında onu yine aynı içeriğe götürmeyi hedefler. İşletim sistemi bunu tek başına sağlamaz, ayrı bir altyapı gerekir.
Özel şema tamamen terk edilmez; uygulama içi yönlendirmelerde ya da bazı üçüncü taraf geri dönüşlerinde hâlâ işe yarar. Ama e-postada, SMS’te, sosyal medyada ve reklamda paylaşılan her bağlantı doğrulanmış HTTPS adresi olmalıdır. Bu aynı zamanda güvenlik meselesidir: şifre sıfırlama ya da giriş bağlantısı özel şemayla gönderilirse aynı şemayı kaydeden kötü niyetli bir uygulama bağlantıyı yakalayabilir. Mobil güvenlik tarafını mobil uygulama güvenliği yazımızda ayrıca anlattık.
iOS: Universal Links nasıl kurulur?
Universal Links iki taraflı bir eşleşmedir. Uygulama tarafında Associated Domains yeteneği açılır ve hangi alan adlarını sahiplendiği yazılır. Sunucu tarafında alan adınızın kökündeki .well-known klasörüne apple-app-site-association adlı bir JSON dosyası konur; bu dosya hangi uygulamanın hangi yolları açabileceğini söyler. Dosya HTTPS üzerinden, yönlendirme olmadan ve doğru içerik türüyle sunulmalıdır. Apple bu dosyayı her istekte değil, kendi önbelleği üzerinden okuduğu için dosyayı değiştirdiğinizde etkinin hemen görünmemesi normaldir; test ederken yeni bir kurulumla denemek gerekir.
{
"applinks": {
"details": [
{
"appIDs": ["TEAMID.com.firma.uygulama"],
"components": [
{ "/": "/urun/*" },
{ "/": "/siparis/*" },
{ "/": "/hesap/sifre-sifirla" }
]
}
]
}
}Android: App Links nasıl kurulur?
Android’de uygulama manifestinde ilgili ekran için bir intent-filter tanımlanır ve autoVerify özelliği açılır. Sunucu tarafında aynı .well-known klasörüne assetlinks.json dosyası konur; bu dosya paket adını ve uygulamayı imzalayan sertifikanın SHA-256 parmak izini içerir. En sık yapılan hata burada çıkar: uygulama Google Play App Signing ile yayınlanıyorsa mağazadaki derlemeyi Google’ın anahtarı imzalar. Dosyaya yalnızca geliştiricinin yükleme anahtarının parmak izi yazılırsa bağlantı test cihazında çalışır, mağazadan indirilen uygulamada çalışmaz. Doğru parmak izi Play Console’daki uygulama imzalama sayfasından alınır.
Deep link sorunlarının çoğu kodda değil doğrulama dosyasındadır: yönlendirilen bir adres, yanlış içerik türü ya da yükleme anahtarının parmak izi. Bağlantı hata vermez, yalnızca uygulama yerine tarayıcıda açılır.
Uygulama içinde yönlendirme: React Native örneği
İşletim sistemi bağlantıyı uygulamaya teslim ettikten sonra hangi ekranın açılacağına uygulama karar verir. React Native projelerinde bu genellikle React Navigation’ın linking yapılandırmasıyla yapılır: adres kalıpları ekranlara eşlenir, parametreler ekrana aktarılır. Önemli olan, bağlantıdan gelen her parametrenin kullanıcı girdisi gibi ele alınmasıdır; ürün numarası doğrulanmalı, oturum gerektiren ekranlar giriş yapılmamışsa önce giriş ekranına gitmeli ve giriş sonrası hedef ekrana dönülmelidir.
import type { LinkingOptions } from '@react-navigation/native';
import type { RootStackParamList } from './types';
export const linking: LinkingOptions<RootStackParamList> = {
prefixes: ['https://alanadiniz.com', 'uygulamam://'],
config: {
screens: {
Product: {
path: 'urun/:id',
parse: { id: (id: string) => (/^\d+$/.test(id) ? Number(id) : 0) },
},
Order: 'siparis/:orderId',
ResetPassword: 'hesap/sifre-sifirla',
NotFound: '*',
},
},
};Örnekteki NotFound satırı tanımadığınız her adresi bir hata ekranına toplar; bu olmazsa web’de yeni açılan bir sayfanın bağlantısı uygulamada boş bir ekrana düşebilir. Bu yüzden apple-app-site-association ve assetlinks.json dosyalarında yalnızca uygulamada karşılığı olan yolları sahiplenmek daha güvenlidir. Bağlantı, uygulamanın kapalı olduğu soğuk açılışta ve arka planda beklediği sıcak açılışta ayrı ayrı test edilmelidir; iki durum farklı kod yollarından geçer.
Ertelenmiş deep link ve kampanya bağlantıları
Uzun süre bu ihtiyaç için Firebase Dynamic Links kullanıldı; servis Google tarafından kapatıldığı için bu altyapıya bağlı uygulamaların bağlantılarını başka bir çözüme taşıması gerekti. Android’de Play Install Referrer, kullanıcının hangi bağlantıdan mağazaya geldiğini kurulum sonrasında uygulamaya aktarabilir. iOS’ta eşdeğer bir resmi mekanizma yoktur; üçüncü taraf hizmetler tahmine dayalı eşleştirme kullanır ve bu yöntem hem kesin değildir hem de gizlilik kurallarıyla sınırlıdır. Pratik öneri şudur: kritik akışları ertelenmiş bağlantıya bağlamayın. Davet kodu ya da kampanya kodu gibi değerler ilk açılışta kullanıcıya elle girme seçeneğiyle de sunulmalıdır. Kampanya bağlantılarının performansını ölçmek için adreslerde tutarlı UTM parametreleri kullanmak, ASO ve mağaza optimizasyonu çalışmalarınızla da aynı dili konuşur.
Deep link nerelerde fark yaratır?
- Push bildirimleri: bildirime dokunan kullanıcı ilgili siparişi ya da mesajı görmeli; ana ekrana düşen bildirim tıklamayı boşa harcar. Ayrıntılar push bildirim yazımızda.
- E-posta ve SMS: sipariş takibi, şifre sıfırlama ve e-posta doğrulama bağlantıları uygulamada doğru ekranı açmalı.
- Paylaşım: kullanıcının paylaştığı ürün bağlantısı, uygulaması olan arkadaşında uygulamada, olmayanda web’de açılmalı.
- Reklam ve kampanya: reklamdan gelen kullanıcı kampanya sayfasına değil genel ana ekrana düşerse dönüşüm kaybolur.
Sık yapılan hatalar ve kontrol listesi
Yayın öncesinde şu kontrolleri yapmak sorunların çoğunu yakalar: doğrulama dosyaları yönlendirmesiz ve HTTPS ile erişilebilir mi, Android parmak izi mağaza imzalama anahtarına ait mi, alan adının www ve www’suz sürümleri ayrı ayrı sahiplenildi mi, oturum gerektiren ekranlar giriş sonrası hedefe dönüyor mu, tanımsız yollar hata ekranına mı gidiyor. Web sitesi tarafında yapılan bir taşıma ya da yönlendirme değişikliği doğrulama dosyasını da etkileyebilir; site taşınırken bu dosyaların yeni sunucuda aynı adreste durduğu kontrol edilmelidir. Bağlantı yapısı değişen bir uygulamada ise eski adresler kırılmamalıdır; bu konu mobil uygulama güncellemesi yayınlarken de gözden geçirilmelidir.
Sonuç
Deep link, uygulamanızı web, e-posta, bildirim ve reklamla aynı adres diliyle konuşturan altyapıdır. Doğru kurulum, paylaşılan her bağlantı için doğrulanmış HTTPS adresi kullanmak, iki platformun doğrulama dosyasını eksiksiz yayınlamak ve uygulama içinde her parametreyi doğrulayarak yönlendirmektir. Uygulamanızda bağlantı altyapısını kurmak ya da mevcut kurulumu gözden geçirmek isterseniz mobil uygulama hizmetimize göz atabilir veya teklif alabilirsiniz.