Android uygulamasında bağlantı açmayı nasıl yapılandırırsınız (deep link ve custom scheme)
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 ve App Links nedir — hangisini ne zaman kullanmalı
- 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
- 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>
- 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>
- 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()
- 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.
- 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.