SDK Olmadan Deferred Deep Linking: Kaputun Altında Gerçekte Nasıl Çalışır?
Link bağlamını, uygulamanıza bir attribution SDK’sı gömmeden kurulum sınırından geçirebilirsiniz. Android ve iOS’ta mağaza sınırını gerçekte neyin aştığını, neyin kırıldığını ve her geçici çözümün gizlilik maliyetini anlatıyoruz.
Bağlam, mağaza sınırında ölür
Biri /product/42 linkine dokunur. Uygulama kurulu değildir; yönlendirmeniz onu mağazaya gönderir. Kurar, uygulamayı açar ve jenerik bir ana ekrana iner. Niyetini taşıyan HTTP isteği mağaza sayfasında son bulmuştur. Yeni kurulan uygulama URL’siz, çerezsiz, referrer başlıksız başlar. Tıklamadan geriye hiçbir şey kalmamıştır.
Bu bağlamı kurulumun öbür tarafına taşımak deferred deep linking’dir ve standart cevap "bir MMP SDK’sı gömün"dür. Birçok ekip bu cevabı istemiyor. Soru geliştiricilerin toplandığı her yerde karşımıza çıkıyor — Apple Developer Forums’taki 772811 numaralı başlık, bunu üçüncü taraf SDK olmadan nasıl yaparım diye soran örneklerden yalnızca biri — ve AppsFlyer’ın Ağustos 2026’da deferred deep linking’i ücretsiz planından çıkarmasıyla bu soruyu soran kitle daha da genişledi. Peki kendiniz yapabilir misiniz? Android’de evet; temiz ve resmî bir yolla. iOS’ta kısmen; gerçek maliyetleri olan geçici çözümlerle.
Mekaniğe girmeden bir kapsam notu: Deferred deep linking’in ne olduğunu ve ne zaman değer ürettiğini ayrı bir yazıda ele alıyoruz. Bu yazı yalnızca tesisatla ilgili: hangi taşıyıcı, bir token’ı kurulumun öbür tarafına kaçırabilir ve her birine ne kadar güvenebilirsiniz.
Kurulumdan ne sağ çıkar, ne çıkmaz?
Android: Install Referrer API dürüst iyi haber
Google Play bunu yerleşik olarak çözer. Play mağaza URL’si bir referrer sorgu parametresi kabul eder, Play bu dizgiyi kurulumla birlikte saklar ve uygulama ilk açılıştan sonra Install Referrer API üzerinden aynı değeri harfi harfine geri okur. Mekanizmanın tamamı bu. Parmak izi yok, pano yok, tahmin yok.
Tam olarak "sıfır kod" değil, dürüst olalım. Değeri okumak com.android.installreferrer kütüphanesini gerektirir — cihazdaki Play Store uygulamasıyla yerel olarak konuşan küçük bir artefakt. Kimseye ağ çağrısı yapmaz, eve telefon eden bir analitik SDK’sı değildir ve dizgiyle ne yapacağınız dışında gizlilik beyanlarınıza hiçbir şey eklemez.
Parametreye ne koyacağınız size kalmış: link kimliği, kampanya adı, kodlanmış bir deeplink hedefi. Kısa ve URL-encoded tutun — play.google.com/store/apps/details?id=com.example&referrer=tok_8f2 adresindeki referrer, gönderildiği gibi geri gelir.
Uçtan uca tam döngü
- 1Link dokunuşunda yönlendirmeniz Play URL’sine referrer=<token> ekler; token, sunucunuzda saklanan tıklama bağlamını işaret eder.
- 2İlk açılışta uygulama bir InstallReferrerClient bağlar ve installReferrer dizgisini okur.
- 3Uygulama token’ı API’nizde saklanan bağlamla — deeplink yolu, kampanya — takas eder ve kullanıcıyı yönlendirir.
- 4Sunucunuz token’ı tüketildi olarak işaretler. Referrer dizgisi cihazda kalıcıdır; tek kullanım kuralı bu yüzden sunucu tarafında yaşamak zorundadır.
Sınırlar dar ve öngörülebilir: API yalnızca gerçekten Google Play üzerinden yapılan kurulumları kapsar. Sideload, Huawei AppGallery ve diğer mağazalar Play referrer’ı taşımaz; değer kalıcı bir depo gibi değil, ilk açılıştan kısa süre sonra bir kez okunmalıdır.
Appy linkleri Android tarafını zaten yapıyor
Eylül 2026’dan beri, kullanıcıyı Google Play sayfasına gönderen her Appy linki referrer parametresini kendiliğinden ekliyor. Ayarlanacak bir şey ya da eklenecek bir SDK yok. Referrer her zaman appy_slug’ı, yani dokunulan linkin slug’ını taşıyor; uygulama kurulumu hangi linkin getirdiğini buradan biliyor. Bu kısım Free dahil her planda çalışıyor.
Linkte parametre iletimi açıksa, dokunuştaki query string de referrer’a giriyor. appy.to/summer?screen=product-42&utm_source=poster adresini gösteren bir QR kod, ilk açılışta aşağıdaki string olarak uygulamaya ulaşıyor. Bunun için bizim tarafta hiçbir şey saklanmıyor, tahmine dayalı bir eşleştirme de yapılmıyor.
- Taranan ya da dokunulan
- https://appy.to/summer?screen=product-42&utm_source=poster
- Google Play’e giden
- https://play.google.com/store/apps/details?id=com.example.app&referrer=appy_slug%3Dsummer%26screen%3Dproduct-42%26utm_source%3Dposter&screen=product-42&utm_source=poster
- Uygulamanın ilk açılışta okuduğu
- appy_slug=summer&screen=product-42&utm_source=poster
Dashboard’daki ayar
Parametre iletimi, Business planında link bazında açılıp kapanan bir ayar. Link oluştururken “Parametre yönlendirmeyi etkinleştir” anahtarı olarak görünüyor; var olan bir linkte aynı ayarın adı “Gelen parametreleri yönlendir”. Kapalıyken referrer yine appy_slug’ı taşıyor, başka bir şey taşımıyor.
Bilmekte fayda olan birkaç kural var. Play URL’sine kendiniz yazdığınız her şey önceliklidir: hedefte zaten referrer=utm_source%3Dposter varsa Appy bu değeri korur ve yanına appy_slug ekler. appy_slug’ın kendisi query string’ten ezilemez, yani bir link başka bir linkin kurulumlarını üstlenemez. İletilen parametreler referrer’ı 1 KB’ın üzerine çıkaracaksa Appy onları atar ve yalnızca slug’ı bırakır.
Parametreler açık metin olarak taşınır. Kampanya adı ya da ekran kimliği için bu sorun değil. Kişisel bir veri ya da birkaç değerden fazlası söz konusuysa kısa bir token iletin ve onu sunucunuzda çözün; aşağıdaki kalıpta anlatıldığı gibi.
Uygulamada okumak
Install Referrer kütüphanesini ekleyin, değeri ilk açılışta bir kez okuyun ve query string gibi ayrıştırın. İstemci tarafı bundan ibaret:
implementation("com.android.installreferrer:installreferrer:2.2")fun readAppyReferrer(context: Context, onResult: (Map<String, String>) -> Unit) {
val client = InstallReferrerClient.newBuilder(context).build()
client.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
val raw = if (responseCode == InstallReferrerClient.InstallReferrerResponse.OK) {
runCatching { client.installReferrer.installReferrer }.getOrNull()
} else null
client.endConnection()
val uri = Uri.parse("?" + raw.orEmpty())
onResult(uri.queryParameterNames.associateWith { uri.getQueryParameter(it).orEmpty() })
}
override fun onInstallReferrerServiceDisconnected() = Unit
})
}
readAppyReferrer(this) { params ->
val slug = params["appy_slug"] ?: return@readAppyReferrer
params["screen"]?.let { openScreen(it) }
analytics.logInstallSource(slug, params["utm_source"])
}Bunu yalnızca kurulumdan sonraki ilk açılışta çalıştırın ve çalıştırdığınızı kaydedin. Referrer cihazda kalır; her soğuk açılışta okursanız kullanıcıyı sürekli aynı ekrana götürürsünüz. AppGallery’den ya da APK ile yapılan kurulumlar referrer olmadan gelir; bu durumda normal ana ekranı açın.
iOS: resmî karşılık yok, üç geçici çözüm sıralı hâlde
Apple, Install Referrer benzeri hiçbir şey sunmaz. App Store ürün sayfası kurulumun içinden rastgele parametre geçirmez; aşağıdakilerin hepsi bu yokluğun üzerine kurulmuş geçici çözümlerdir. En az kötüden en niş olana doğru:
Pano (clipboard) aktarımı
01 · orta güvenilirlik, izin kapılıLink dokunuş sayfanız panoya kısa bir token yazar — Safari programatik kopyalama için kullanıcı hareketi istediğinden bir buton dokunuşunun arkasında — sonra App Store’a yönlendirir. İlk açılışta uygulama panoyu okur, token’ı bulur ve sunucunuzla takas eder.
Pürüz iOS 16 ile geldi: panoyu okumak sistemin yapıştırma iznini tetikler. Kullanıcı, otuz saniye önce kurduğu uygulamanın ilk ekranında "Safari’den yapıştırılmasına izin verilsin mi?" sorusunu görür ve çoğu reddeder. Ret sessiz kayıptır — "token zaten yoktu" durumundan ayırt edemezsiniz. UIPasteboard.detectPatterns, izin istemeden desen eşleşmesine bakabilir ama değeri okuyamaz. Pano ayrıca dokunma ile ilk açılış arasında üzerine yazılabilir. Ölçülebilir sıklıkta çalışır; ama ikinci yüzü görünür bir madeni paradır.
Dürüstçe yapılan olasılıksal eşleştirme
02 · skorlu bir tahmin, asla kesinlik değilTıklama anında sunucu kısa bir kayıt tutar: hangi link, hangi platform, user agent’taki OS sürümü, bir zaman damgası ve tıklamanın geldiği ağı tanımanın bir yolu. İlk açılışta uygulama, aynı ağdaki aynı telefona benzeyen yakın zamanlı bir tıklama ister. Taşınan bir token yoktur. Eşleşme bir tahmindir; asıl soru, sistemin bunun tahmin olduğunu kabul edip etmediğidir.
Özensiz kurulursa kötü şöhretini hak eder: günlerce saklanan ham IP adresleri, kesinmiş gibi döndürülen en iyi aday ve aynı ofis Wi-Fi’ındaki bir yabancının başkasının davet ödülünü kapabilmesi. Sinyaller de göründüğünden zayıftır. iCloud Private Relay adresleri gizler, operatör NAT’ı birçok telefonu tek adresin arkasına koyar, Android’deki Chrome her telefonu Android 10 olarak bildirir, iOS 26’daki Safari de sürümünü 18.6’da dondurur.
Özenle kurulduğunda yine bir tahmindir ama işe yarar bir tahmin. Her adayı puanlayın ve skoru dayandığı sinyallerle birlikte döndürün. Bir tahminin kesinliğe ulaşmasına asla izin vermeyin. Eşiği uygulama seçsin; eşiğin altında kalan tıklamayı harcamayın ki gerçekten tıklayan telefon onu hâlâ alabilsin. Pencereyi kısa tutun ve IP adresi saklamayın. Appy’nin Enterprise SDK’sı bu işi Appy tarafında tutar. Uygulamanız ya linki alır ya da hiçbir şey almaz; backend’iniz bir yüklemenin doğrulanıp doğrulanmadığını sorgulayabilir. Ağlar da adresin her gün değişen ve iki saat sonra geçerliliğini yitiren anahtarlı bir hash’i üzerinden tanınır. Sıkı attribution açıkken yalnızca doğrulanmış yüklemeler sayılır, geri kalan her şey organiktir.
App Clip ve diğer niş yollar
03 · güvenilir ama darLinkinizden çağrılan bir App Clip URL’nin tamamını alır ve kurulumdan sonra bağlamı paylaşımlı container üzerinden tam uygulamaya devredebilir. Kendi nişinde iOS’un en güvenilir yolu budur — ama bir App Clip inşa edip bakımını üstlenmeyi gerektirir ve yalnızca hafif bir anlık deneyimin mantıklı olduğu akışlara uyar. Shared web credentials ve associated domains, komşu problemi — oturum sürekliliğini — çözer, genel link bağlamını değil. Bilmeye değer, nadiren cevaptır.
Mekanizmadan bağımsız geçerli tasarım deseni
Token’ı hangi taşıyıcı taşırsa taşısın — referrer dizgisi, pano, hatta olasılıksal bir eşleşme kimliği — sunucu tarafı mimari aynıdır ve bunu doğru kurmak taşıyıcıdan daha önemlidir. Deeplink’in tamamını kanala tıkıştırmayın. Tıklama bağlamını sunucunuzda saklayın; yalnızca kısa ömürlü bir anahtar taşıyın.
Bağlamı rastgele token anahtarıyla saklayın
Tıklamada {deep_link, kampanya, zaman damgası} kaydını kısa rastgele bir token altında yazın; taşıyıcıya yalnızca token’ı koyun. Yükler küçük kalır, kampanya verisi panolara ve referrer loglarına sızmaz ve "bağlam"ın anlamını istemciye dokunmadan değiştirebilirsiniz.
Agresif süre aşımı uygulayın
30–60 dakikalık TTL gerçek dokunma-kurulum yolculuğunu kapsar. Tıklamadan bir hafta sonra çözülen deferred rota, doğru olduğundan daha sık yanlıştır — uygulamayı o gün açan kişi, dokunduğu andaki işinin peşinde değildir.
Tek kullanımı zorlayın
Token’ı ilk takasta tüketin. Referrer dizgileri cihazda kalır, pano iki kez okunabilir; tek kullanım olmadan bir yeniden kurulum ya da ikinci cihaz başkasının bağlamını tekrar oynatıp kurulumu yanlış eşleyebilir.
Tahmine değil, varsayılana düşün
Token yoksa, süresi geçmişse, yapıştırma izni reddedilmişse kullanıcıyı normal ana ekrana indirin. Jenerik bir ilk açılış hafif hayal kırıklığıdır; başka bir kullanıcının sepetine yönlendirilmek destek talebidir.
Güvenilirlik, dürüstçe
Bunları üretimde çalıştıran ekiplerden kaba rakamlar. Trafik kaynaklarınız, kurulum gecikmesi ve kitlenizin iOS sürümü her sayıyı oynatır.
| Mekanizma | Platform | Güvenilirlik | Notlar |
|---|---|---|---|
| Play Install Referrer | Android | Yüksek | Resmî API; gecikmeli kurulumlarda hayatta kalır; kullanıcıya soru sorulmaz. Yalnızca Play kurulumları. |
| Pano token’ı | iOS | Orta | iOS 16+ yapıştırma iznine takılır; retler sessizdir; pano uçucudur. |
| Skorlu olasılıksal eşleştirme | iOS; referrer yoksa Android | Orta, skorlu | Aynı ağ, OS sürümü ve zamanlama. Dokunuştan dakikalar sonra aynı Wi-Fi’da güçlü; ağ değişince, CGNAT ve Private Relay altında zayıf. Yalnızca görünür bir skor ve bir eşikle kullanmaya değer. |
| App Clip devri | iOS | Yüksek, dar | Deterministik; ama yalnızca App Clip inşasını haklı çıkaran akışlar için. |
Bunun sizin yığınınız için anlamı
Deferred yönlendirme ihtiyacınız yalnızca Android’se çok az şeye ihtiyacınız var: referrer parametresini ekleyen bir link, küçük referrer kütüphanesi ve token takası yapan tek bir endpoint. Bu bir öğleden sonralık iştir ve asıl önemli anlamda gerçekten SDK’sızdır — kullanıcılarınızı izleyen üçüncü taraf kod yoktur.
Yönetilen çözümlerin parasını hak ettiği yer iOS’tur; çünkü orada geçici çözümlerin kendisi başlı başına bir üründür: eşleştirme altyapısı, birinin dürüst tutması gereken bir puanlama modeli ve zemini kaydıran her OS sürümü (iOS 26’nın Safari sürüm bilgisini dondurması gibi). Appy’nin deferred deep linking yapan ve yüklemelerin attribution’ını üstlenen iOS ve Android SDK’sının Enterprise planında olmasının nedeni bu; Android referrer’ı ise her linkle birlikte geliyor.
Yine de hangi probleme sahip olduğunuz konusunda dürüst olun. Asıl ihtiyacınız "uygulamaya zaten sahip kullanıcılar doğru ekrana insin" ise bu standart deep linking’dir — aşılacak kurulum sınırı yoktur. Appy’nin deeplink shim’i bu durumu ayda 9,99 $’lık Pro planda karşılar; uygulaması olmayanı mağazaya gönderir ve yine SDK gerektirmez. Daha ağır makineyi satın almadan önce huninizin ne kadarının gerçekten bağlam taşıyan taze kurulum olduğunu ölçün.
Sonraki yazılar
Sık sorulan sorular
Install Referrer, QR taramasından çalışır mı?
Evet; QR, Play URL’sine referrer parametresini ekleyen bir link üzerinden çözülüyorsa. Mekanizma tıklamanın nasıl başladığıyla ilgilenmez — tarama, dokunma veya NFC — yalnızca Play açıldığında mağaza URL’sinin referrer taşımasıyla ilgilenir. Doğrudan çıplak Play URL’sine işaret eden bir QR hiçbir şey taşımaz.
Pano token yaklaşımım neden birden bozuldu?
Neredeyse kesin olarak iOS yapıştırma izni. iOS 16’dan beri uygulamanızın ilk pano okuması bir sistem izin diyaloğu tetikler ve kullanıcıların anlamlı bir bölümü reddeder. Kodunuz gerilemedi; okumanızın artık döngüde bir insanı var. Token bulma oranınızın sıfıra inmek yerine düşüp düşmediğine bakın — imzası budur.
Olasılıksal eşleştirmeye iOS’ta izin var mı?
Apple’ın geliştirici sözleşmesi, bir cihazı benzersiz biçimde tanımak amacıyla cihazdan veri türetmeyi yasaklar ve App Review, SDK’ları bunu yapan uygulamaları reddedebilir. Bir telefonu farklı uygulamalarda ve haftalar boyunca tanıyan bir fingerprint bu çizginin yanlış tarafında kalır. Kendi linkiniz için aynı ağdaki tek bir tıklamayı iki saat içindeki tek bir ilk açılışla, IP saklamadan ve bir skorla karşılaştırmak çok daha dar kapsamlı bir iştir; yine de bu veriyi gizlilik bilgilerinizde beyan edersiniz. Hangi aracı kullanırsanız kullanın, neyi ne kadar süre sakladığını ve tahmin yürüttüğünde bunu size söyleyip söylemediğini sorun.
Deferred deep linking’e gerçekten ihtiyacım var mı?
Yalnızca kurulum sonrası iniş ekranı huninizi kayda değer biçimde değiştiriyorsa. Kurulumların çoğu belirli hedefi olmayan jenerik kampanyalardan geliyorsa iyi bir onboarding, deferred rotadan daha çok kazandırır. Önce ölçün: gerçek bir deeplink hedefi olan ve uygulamanın kurulu olmadığı tıklamaları sayın. Sayı küçükse eforu başka yere harcayın.
Diğer yazılar
Her Yüklemenin Hangi Linkten Geldiğini Bilin: Appy’nin iOS ve Android SDK’sı
Appy artık linklerinizi uygulama mağazasının ötesine kadar takip ediyor. Yeni SDK her link, QR kod ve kampanya için yüklemeleri, uygulama içi event’leri ve geliri gösterir; yeni kullanıcıları doğru ekranda açar.
Chrome Her Sunucuya Telefonunuzun Android 10 Olduğunu Söylüyor
Android’deki Chrome her telefonu Android 10, model K olarak bildiriyor. Bunun deferred deep link eşleştirmesini nasıl etkilediği, Critical-CH’nin neden her tıklamayı iki kez saydıracağı ve Client Hints ile gerçek sürüm ve modelin nasıl geri alındığı.
Deferred deep linking: nasıl çalışır ve ne zaman kullanılır
Orijinal link niyetini kurulumun öbür tarafına taşıyın; yeni kullanıcılar genel ana ekran yerine doğru uygulama içi ekrana düşsün.
Başka konular için blogda gezin.
Zaten hak ettiğiniz kurulumları doğru yönlendirin
Her linkte Play Install Referrer, Pro’da ise uygulaması olmayanı mağazaya gönderen deep linkler; uygulamanıza SDK eklemeden. iOS ve Android’de deferred deep link ve yüklemelerin attribution’ı gerektiğinde Enterprise SDK’sı her yüklemeyi onu getiren linke bağlar.
Appy ile başlayın