Tarayıcıdan Android uygulamasına geçişler nasıl yapılandırılır (Deep Links ve App Links)

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

Kısa cevap: Activity'ye https host'u ve android:autoVerify="true" ile bir intent filtresi ekleyin, assetlinks.json dosyasını web sitenizde /.well-known/ konumuna yerleştirin, kodda intent'i işleyin ve adb ile tarayıcı aracılığıyla test edin.

Yapılandırma adımları (hızlı)

  1. AndroidManifest.xml dosyasında activity için https-data ve android:autoVerify="true" içeren bir intent filtresi ekleyin.
  2. Web sitenizde packageName ve SHA256 sertifikasını belirten /.well-known/assetlinks.json dosyasını yerleştirin.
  3. Activity'de intent.getData() işleyin ve parametreleri çıkarın (id, path vb.).
  4. APK/AAB derleyip yükleyin — autoVerify doğrulaması kurulum sırasında (ve Play Store'da) gerçekleştirilir.
  5. Gerçek cihazlarda ve emülatörde test edin; yeniden üretmek için adb kullanın.

Manifest'teki intent filtresi örneği

<activity android:name=".MainActivity">
  <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" />
    <!-- HTTPS-app link: kesin yol için pathPrefix daha iyidir -->
    <data android:scheme="https" android:host="example.com" android:pathPrefix="/product" />
  </intent-filter>
</activity>

Chrome ve diğer tarayıcılarda geçişlerin çalışması için custom şemalar yerine https kullanın — custom şemalar giderek daha fazla engelleniyor.

Kodda bağlantıyı işleme (Kotlin)

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  val data: Uri? = intent?.data
  data?.let {
    if (it.path?.startsWith("/product") == true) {
      val productId = it.lastPathSegment
      openProduct(productId)
    }
  }
}

JSON oluşturun ve şu adrese yerleştirin: https://example.com/.well-known/assetlinks.json

Örnek:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.yourpackage",
    "sha256_cert_fingerprints": [
      "14:6D:E9:..."
    ]
  }
}]

SHA256 parmak izini şu komutla alın:

keytool -list -v -keystore your-keystore.jks | grep SHA256

Test etme

  • adb (emülatör/cihaz):
    adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/123" com.yourpackage
  • Tarayıcıda: Uygulamada aç bağlantısını yerleştirin ve cihazda açın.
  • Hata ayıklama sırasında tarayıcı önbelleğini temizleyin: adb shell pm clear com.android.chrome

Yaklaşımların karşılaştırılması

ParametreCustom URI (myapp://)Android App Links (https)
Chrome'dan çalışırSıkça engellenirEvet (autoVerify ve assetlinks.json ile)
Kurulum kolaylığıGeliştirme için basitassetlinks ve sertifika gerektirir
Uygulama yokken davranışHata gösterir/hiçbir şey yapmazWeb sayfası açılır

Deep linking sorunlarının %40'ı şema yazım hatalarından veya intent filtresi çakışmalarından kaynaklanır. Kesin pathPrefix/pathPattern belirtin ve assetlinks.json ile eşleşmeyi kontrol edin.

Yaygın hatalar

  • Intent filtresinde yanlış yol (pathPrefix="/product" kullanın).
  • assetlinks.json içinde packageName veya SHA256 uyuşmazlığı.
  • android:autoVerify eksikliği veya sunucuda unutulmuş .well-known yolu.
  • Birden fazla intent filtresi çakışması: pathPattern'i netleştirin veya priority ekleyin.

SSS

  • autoVerify her zaman kullanılmalı mı?
    Önerilir: autoVerify, bağlantıların uygulama içinde sorulmadan açılma olasılığını artırır.
  • Sadece custom şema (myapp://) bırakılabilir mi?
    Dahili testler için mümkündür, ancak üretimde tarayıcı uyumluluğu için https kullanın.
  • assetlinks.json'un Google tarafından görülebildiğini nasıl kontrol ederim?
    Erişilebilirliği URL üzerinden kontrol edin ve JSON'un doğru olduğundan emin olun; Play Store'dan kurulum sırasında sistem uygunluğu doğrular.

Bu adımları izleyerek, tarayıcıdan uygulamaya güvenilir geçişler elde edersiniz ve hedef içeriğe geçişlerdeki reddedilmeleri azaltırsınız.