Android uygulamasında bağlantı açmayı nasıl yapılandırırsınız (deep link ve custom scheme)

Kerem Aydın·8 Temmuz 2026·⏱3 dk

Deep link, uygulamada belirli bir ekranı veya durumu açan bir URL'dir. Bağlantıların uygulamada açılması için: AndroidManifest'e doğru intent-filter ekleyin (custom scheme veya https App Links), tek bir giriş noktasında intent.data ayrıştırmasını uygulayın ve fallback yapılandırın (tarayıcıya veya mağazaya yönlendirme).

  • Custom scheme (myapp://...) — uygulamalar arası iletişim ve dahili geçişler için basit bir protokol. Avantajlar: basitlik, iOS ile çapraz platform uyumluluğu. Dezavantajlar: uygulama yüklü değilse bağlantı açılmaz; scheme diğer uygulamalarla çakışabilir.
  • App Links / http(s) intent-filter (https://your.domain/...) — tek bir URL hem tarayıcıda hem de deep link olarak çalışır. Avantajlar: SEO, reklam, tarayıcıya fallback. Dezavantaj: doğrulama olmadan chooser görünebilir; otomatik başlatma için Digital Asset Links yapılandırması gerekir.

Ne zaman kullanılır:

  • Yalnızca dahili mantık/SDK: custom scheme.
  • Genel bağlantılar, reklamlar, e-posta, SEO: https + App Links (android:autoVerify="true").

Pratik yapılandırma: manifest, ayrıştırma, test etme

  1. Custom scheme için intent-filter örneği:
<activity android:name=".DeepLinkActivity" 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"/>
  </intent-filter>
</activity>
  1. https (App Links) için örnek:
<activity android:name=".DeepLinkActivity" 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="shop.example.com" android:pathPrefix="/p"/>
  </intent-filter>
</activity>
  1. Activity'de URI ayrıştırma (Kotlin):
val uri = intent?.data
if (uri != null) {
  val segments = uri.pathSegments // ["p", "123"]
  if (segments.size >= 2 && segments[0] == "p") {
    val productId = segments[1]
    Navigator.open(ProductScreen(productId))
  }
}
finish()
  1. ADB üzerinden test etme: adb shell am start -W -a android.intent.action.VIEW -d "myapp://product/123" your.package.name adb shell am start -W -a android.intent.action.VIEW -d "https://shop.example.com/p/123" your.package.name

Intent-filter içeren Activity'nin android:exported="true" özelliğine sahip olduğundan emin olun, aksi takdirde dış çağrılar çalışmaz.

  1. App Links doğrulama: assetlinks.json dosyasını https:///.well-known/ konumuna yerleştirin; relation delegate_permission/common.handle_all_urls belirtin, package_name ve sha256_cert_fingerprints (release) değerlerini girin. Kurulumdan sonra sistem güveni tesis eder ve seçim diyaloğunu kaldırır.

Önerilen desen — şeffaf bir DeepLinkActivity: URI'yi hızlıca ayrıştırır, sealed-class'a (DeepLinkDestination) dönüştürür ve navigatöre iletir, ardından finish() çağrılır. Bu, testleri ve yeniden kullanımı kolaylaştırır.

En iyi uygulamalar ve durum yönetimi

  • Her zaman fallback düşünün: custom scheme için Play Store'a veya web sayfasına yönlendirme; https için tarayıcı otomatik olarak sayfayı açar.
  • Yetkilendirme durumunu yönetin: önce giriş ekranını gösterin, ardından hedef ekrana yönlendirin.
  • Başarısız deep link'leri (hatalı yollar, boş id'ler) analiz için günlüğe kaydedin.
  • Gerçek cihazlarda ve farklı Android sürümlerinde test edin; aynı host'lara abone olan birden fazla uygulama durumunda davranışı kontrol edin.

Sık yapılan hatalar

  • Manifest ile gerçek bağlantı arasında host/path eşleşmemesi.
  • android:exported="true" unutulması.
  • assetlinks.json içindeki SHA-256 parmak izi ile gerçek release anahtarının uyuşmaması.
  • Aynı intent-filter'a sahip birden fazla Activity — sistemin yanlış Activity'yi seçmesi.
  • Uygulama yüklü olmadığında fallback eksikliği.

SSS

  • Uygulama yüklü değilse ne yapılmalı? Custom scheme için: sunucu yönlendirmesiyle Play Store veya web sayfası bağlantısı gösterin. https için tarayıcı otomatik olarak siteyi açar.
  • Chooser ile doğrulanmış App Link arasındaki fark nedir? Chooser, bağlantı doğrulama ile bağlanmamışsa görünür; doğrulanmış link (assetlinks.json ve android:autoVerify="true" aracılığıyla) doğrudan uygulamada açılır.
  • SHA-256 parmak izini nasıl alırım? APK/AAB imzasından (release anahtarı) alınır — keytool veya CI derleme araçlarını kullanın.
  • Aynı URL hem web sitesi hem de custom scheme için kullanılabilir mi? Hayır: custom scheme ve https farklı mekanizmalardır; tek tip davranış için https App Links kullanın ve gerekirse dahili çağrılar için ayrı bir custom scheme oluşturun.