App Link, yüklü uygulamada web bağlantılarını otomatik olarak açan ve seçim iletişim kutusunu atlayan bir Android mekanizmasıdır (Android 6.0+). Terim, Google tarafından 2015 yılında Android 6.0 Marshmallow ile birlikte tanıtılmıştır. Android Developers'a göre App Link, sunucudaki bir dosya aracılığıyla kriptografik doğrulama olan Digital Asset Links'i kullanır ve alan adının uygulama geliştiriciye ait olduğunu onaylar.
Önemli Noktalar
App Link (Android App Link), bir Android cihazda tıklandığında, tarayıcı ve uygulama arasındaki standart seçim iletişim kutusunu göstermeden yüklü uygulamayı otomatik olarak açan standart bir HTTPS bağlantısıdır. Google, Android 6.0'da (API 23), ekstra tıklama ve kullanıcı kafa karışıklığı nedeniyle deep link dönüşümünü azaltan “seçici iletişim kutusu” sorununa çözüm olarak App Link'i tanıttı.
Ana yenilik: doğrulama. Android, Digital Asset Links API aracılığıyla alan adının gerçekten uygulama geliştiriciye ait olduğunu doğrular. Google Play Store, yayınlama sırasında App Link'i kontrol eder ve doğrulama başarısız olursa güncellemeyi reddedebilir. Bu, App Link'i Custom URL Scheme'den daha güvenli kılar: başka hiçbir uygulama alan adınıza giden bir bağlantıyı ele geçiremez.
Digital Asset Links, Google'ın yalnızca App Link için değil, aynı zamanda arama sonuçlarında, Google Assistant ve Smart Lock for Passwords'da web sitelerini uygulamalarla bağlamak için kullandığı açık bir protokoldür. Protokol, kriptografik doğrulamaya dayanır: assetlinks.json'da uygulamanın imza sertifikasının SHA256 parmak izi belirtilir ve bu da sahteciliği ortadan kaldırır.
App Link'in çalışma süreci üç aşamadan oluşur: Digital Asset Links doğrulaması, Intent Filter aracılığıyla işleme ve otomatik yönlendirme. Her aşama zorunludur. Doğrulama başarısız olursa, Android bir seçim iletişim kutusu gösterir — bu tür deep link normal şekilde çalışır ancak otomatik geçiş avantajı olmadan.
Asset Links, sunucuda https://domain/.well-known/assetlinks.json adresine yerleştirilen bir JSON dosyasıdır. Dosya, alanlara sahip nesnelerden oluşan bir dizi içerir: relation (ilişki türünü tanımlayan dizeler dizisi), target (namespace ve uygulamanın package_name'ı ile birlikte sha256_cert_fingerprints — imza sertifikasının SHA256 parmak izleri dizisi içeren nesne).
// assetlinks.json — App Link minimum yapılandırması
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
]
}
}]
SHA256 parmak izi, uygulamayı imzalamak için kullanılan sertifikadan elde edilir. Hata ayıklama derlemeleri için standart Android hata ayıklama sertifikası kullanılır, sürüm derlemeleri için Google Play Console'dan veya kendi sertifikanız kullanılır. Önemli: imza sertifikasını değiştirirken (örneğin, App Signing by Google Play'e geçerken), sunucudaki assetlinks.json'u güncellemek gerekir, aksi takdirde App Link çalışmayı durdurur.
Android, bir bağlantıya ilk tıklandığında App Link'i doğrular. Sistem, sunucudan assetlinks.json'u indirir, package_name ve SHA256 parmak izini yüklü uygulamanın sertifikasıyla karşılaştırır. Veriler eşleşirse, Android Intent Filter'ı doğrulanmış olarak işaretler ve bu alan adına yapılan sonraki tüm bağlantılar otomatik olarak, iletişim kutusu olmadan açılır.
// AndroidManifest.xml — App Link için Intent Filter
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="example.com"
android:pathPrefix="/product" />
</intent-filter>
</activity>
autoVerify="true", Android'e assetlinks.json'u doğrulamasını söyleyen zorunlu bir özniteliktir. Bu öznitelik olmadan, Intent Filter doğrulanmaz ve App Link etkinleştirilmez. Android, tek bir Activity'de birden çok Intent Filter'ı (farklı ana makineler için) destekler. Sistem her ana makineyi ayrı ayrı kontrol eder. Doğrulama eşzamansız olarak gerçekleştirilir ve ilk tıklamada 20 saniyeye kadar sürebilir.
Başarılı doğrulamadan sonra, Android doğrulanmış Intent Filter ile eşleşen herhangi bir bağlantıya tıklandığında uygulamayı otomatik olarak açar. Kullanıcı bir seçim iletişim kutusu görmez — uygulama anında açılır. Uygulama yüklü değilse, bağlantı tarayıcıda açılır (normal bir web sayfası gibi). Bu ideal kullanıcı deneyimidir: gereksiz eylemler olmadan sorunsuz geçiş.
Önemli: otomatik yönlendirme yalnızca https şeması için çalışır. App Link, http'yi (güvenli olmayan protokol) desteklemez. Bir kullanıcı manuel olarak http bağlantısını açarsa (örneğin, SMS'den), Android doğrulama yapmaz ve bir seçim iletişim kutusu gösterir. Uygulamaya giden tüm bağlantılar için https kullanılması ve sunucuda HTTP'den HTTPS'ye yönlendirme yapılandırılması önerilir.
App Link, Android'de Deep Link'in evrimidir, bir değiştirme değil. Aralarındaki fark temeldir. Normal Deep Link (Custom URL Scheme), özel bir şema (myapp://) ile ve autoVerify olmadan Intent Filter aracılığıyla çalışır. Android, uygulamanın gerçekten bu şemayla ilişkili olup olmadığını kontrol etmez — herhangi bir uygulama myapp://'yi kaydedebilir ve bağlantıları ele geçirebilir.
App Link, Deep Link'in üç sorununu çözer. Birincisi: güvenlik — Digital Asset Links aracılığıyla doğrulama, bağlantıların ele geçirilmesini önler. İkincisi: kullanıcı deneyimi — seçim iletişim kutusunun olmaması, hedef eyleme dönüşümü %20–40 artırır. Üçüncüsü: dizine ekleme — Google, https App Link URL'lerini dizine ekler ve arama sonuçlarında uygulama içindeki içeriğe bağlantılar olarak gösterebilir.
Uyumluluk: App Link, Android 6.0+ (%99 cihaz) üzerinde çalışır. Android 5.x (Lollipop) için, seçim iletişim kutusuyla normal Deep Link kullanılır. Bu nedenle, her iki mekanizmanın da desteklenmesi önerilir: modern cihazlar için App Link ve eski sürümler için geri dönüş olarak Custom URL Scheme. autoVerify="true" ile Intent Filter, geriye dönük uyumluluğu bozmaz — Android < 6'da öznitelik yok sayılır.
| Özellik | Deep Link | App Link |
|---|---|---|
| Şema | Özel (myapp://) | HTTPS (https://domain) |
| Doğrulama | Yok | assetlinks.json |
| Seçim iletişim kutusu | Gösterilir | Otomatik yönlendirme |
| Android sürümü | API 1+ | API 23+ (6.0+) |
| Google dizine ekleme | Hayır | Evet (https URL) |
App Link kurulumu üç adım gerektirir: manifestte Intent Filter yapılandırması, sunucuda assetlinks.json yerleştirme ve doğrulamanın kontrolü. İlk adım, AndroidManifest.xml'de android:autoVerify="true" ile Intent Filter eklemektir. https şemasını, ana makineyi ve uygulamanın işlemesi gereken yolları belirtmek önemlidir. Yollar, alt klasörler için joker karakter (*) içerebilir.
İkinci adım assetlinks.json oluşturmaktır. Dosya, Android Studio (Tools → App Links Assistant) aracılığıyla oluşturulabilir. Asistan ayrıca hata ayıklama ve test etmeye de yardımcı olur. Dosya, sunucuda /.well-known/assetlinks.json yoluna yerleştirilir. Sunucu, Content-Type: application/json döndürmeli ve yönlendirmeler olmadan HTTPS üzerinden erişilebilir olmalıdır. Google Play Console ayrıca Publishing bölümünde App Link doğrulama durumunu gösterir.
Test — üçüncü adım. Kontrol etmek için adb kullanın: adb shell am start -W -a android.intent.action.VIEW -d “https://example.com/product/42” komutu uygulamayı açar. Uygulama yerine tarayıcı açılırsa, assetlinks.json ve autoVerify'i kontrol edin. Android Studio App Links Assistant, yerleşik bir test aracı içerir: her alan adı ve yol için doğrulama durumunu gösterir. Otomatik test için, Intent Matcher ile Android Testing Library kullanın.
Android 12 (API 31), App Link işlemede değişiklikler getirdi. Yeni bir alan adına özgü doğrulama eklendi: sistem, Intent Filter'ın tamamını değil, her bağlantıyı ayrı ayrı kontrol eder. Bu, güvenliği artırır ancak yeni yollar eklerken assetlinks.json dosyasının güncellenmesini gerektirir. Android 12 ayrıca ADB ile birlikte Android App Links Assistant'ı da tanıttı — kabuk aracılığıyla doğrulamayı yönetmek için komutlar.
Birden çok alan adı, üretim için tipik bir senaryodur. Uygulama, example.com, m.example.com ve example.org'den gelen bağlantıları işleyebilir. Her alan adı için ilgili sunucuda ayrı bir assetlinks.json gerekir. Manifeste birden çok Intent Filter eklenir — alan adı başına bir tane. Tüm alan adları HTTPS üzerinden erişilebilir olmalı ve doğrulamayı bağımsız olarak geçmelidir.
App Link ve Jetpack Navigation, modern Android uygulamalarında App Link'i işlemenin önerilen yoludur. Jetpack Navigation, nav_graph.xml'de veya NavDeepLinkRequest aracılığıyla bildirimsel deep linkleri destekler. Bu, gezinmeyi basitleştirir: geliştirici, belirli bir URL için hangi ekranın açılacağını tanımlar ve Navigation bileşeni, Intent'i kendisi işler ve gezinme yığınını geri yükler. Google, App Link için Jetpack Navigation kullanılmasını önerir.
// App Link'in Jetpack Navigation ile İşlenmesi
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent) {
intent.data?.let { uri ->
navController.handleDeepLink(NavDeepLinkRequest
.Builder
.fromUri(uri)
.build()
)
}
}
}
Google Play Store, yayınlama sırasında App Link'i kontrol eder. Manifestte autoVerify ile Intent Filter varsa ancak assetlinks.json kullanılamıyor veya hatalıysa, Google Play bir uyarıyla güncellemeyi reddedebilir. Geliştirici konsolunda (Policy and Programs → App Links), her alan adının doğrulama durumu görüntülenir. Yayınlamadan önce her zaman durumu kontrol edin — güncelleme reddinden sonra düzeltmek sürümü geciktirir.
Sıkça Sorulan Sorular
App Link, Digital Asset Links aracılığıyla doğrulamalı Deep Link'tir. Temel farklar: App Link, özel şema yerine https şeması kullanır, seçim iletişim kutusu göstermez ve Google tarafından dizine eklenir. Normal Deep Link, tüm Android sürümlerinde çalışır ancak manuel uygulama seçimi gerektirir.
Dosya, HTTPS sunucusunun kökünde /.well-known/assetlinks.json yoluna yerleştirilir. Sunucu, Content-Type: application/json döndürmelidir. İmza sertifikasını değiştirirken veya yeni alan adları eklerken dosya güncellenmelidir.
Ana nedenler: Intent Filter'da android:autoVerify="true" eksik, assetlinks.json HTTPS üzerinden kullanılamıyor, yanlış SHA256 parmak izi, farklı imza sertifikası (debug vs release). adb shell dumpsync domain_verification ile doğrulama durumunu kontrol edin.
Hayır — App Link, erişilebilir assetlinks.json ile HTTPS sunucusu gerektirir. Alan adınız yoksa, dosyayı barındırmak için Firebase Hosting veya GitHub Pages kullanın. Alternatif: Custom URL Scheme (doğrulama olmadan) veya Firebase Dynamic Links.
Hayır — App Link, Android 6.0 (API 23) ve üzerinde desteklenir. Android 5'te, android:autoVerify="true" ile Intent Filter özniteliği yok sayar ve seçim iletişim kutusuyla normal Deep Link olarak çalışır. Geriye dönük uyumluluk için her iki mekanizmanın da desteklenmesi önerilir.
Ö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