Derin bağlantı, kullanıcıları web tarayıcılarından, bildirimlerden, sosyal medyadan, reklamlardan ve diğer kaynaklardan doğrudan uygulamanıza yönlendirmenizi sağlar. Derin bağlantılar, bağlamsal ve hedeflenmiş içeriklerle etkileşimi artırmanıza yardımcı olabilecek doğrudan uygulama-uygulama ve web-uygulama geçişleri sağlar.
Bu kılavuzda, derin bağlantıların işleyiş şekli ve içeriğinize yönelik derin bağlantıların nasıl oluşturulup test edileceği açıklanmaktadır.
Kendi web sitenize veya alanlarınıza referans veren derin bağlantılar için kullanıcılarınıza sorunsuz ve güvenilir bir deneyim sunan uygulama bağlantılarını kullanmanızı öneririz.
Derin bağlantı nasıl çalışır?
Derin bağlantı, Android'in genel bir sistem özelliğidir ve tüm sürümlerde, tüm cihazlarda desteklenir. Derin bağlantıları ilgili uygulamalara yönlendirmek için Android'in Amaçlar sisteminden yararlanır. Belirli bir derin bağlantı URI'sini işlemek isteyen uygulamalar, uygulama manifest dosyalarında eşleşen bir amaç filtresi bildirir.
Çalışma zamanında, kullanıcı bir bağlantıya dokunduğunda Android bir amaç başlatır ve bunu bir uygulamaya yönlendirmeye çalışır. Birden fazla uygulama, belirli bir URI ile eşleşen amaç filtreleri bildirebileceğinden Android, amacı yönlendirmek için bu işlemleri şu sırayla gerçekleştirir:
- Belirlenmişse kullanıcının URI'yi işleyebilen varsayılan uygulamasını açar.
- URI'yi işleyebilen tek uygulamayı açın.
- Kullanıcının netleştirme iletişim kutusundan bir uygulama seçmesine izin verin.
Bu nedenle, intent filtreleriniz belirli bir URI ile eşleşse bile sistemin derin bağlantı intent'ini uygulamanıza yönlendireceği garanti edilmez. Kullanıcı, intent'i hangi uygulamanın işleyeceğini yönetmede önemli bir role sahiptir. Bu sayede kontrol sahibi olur ve seçenek sunulur. Kendi web sitenize ve alanlarınıza yönelik derin bağlantılar üzerinde daha fazla kontrol sahibi olmak için uygulama bağlantılarını kullanmayı deneyin.
Android'in netleştirme iletişim kutusu, kullanıcının derin bağlantı amacını işlemek için kaydedilmiş tüm yüklü uygulamaları görmesine olanak tanır. Kullanıcı, bu tür bağlantılar için varsayılan uygulama da seçebilir. Kullanıcı bir varsayılan ayarladığında sistem artık bu amaca yönelik iletişim kutusunu göstermez ve seçilen uygulama otomatik olarak açılır.
1. şekil. Belirsizliği giderme iletişim kutusu
Belirsizliği giderme iletişim kutusunun davranışı, Android sürümlerine göre değişir. Örneğin, Android 12 ve sonraki sürümlerde doğrulanmamış Uygulama Bağlantıları olan web bağlantıları genellikle varsayılan olarak bir web tarayıcısında açılırken önceki sürümlerde, bir uygulama web bağlantısını işleyebiliyorsa açıklama amaçlı bir iletişim kutusu görünebilir.
Not: Android 12'den (API düzeyi 31) itibaren, genel bir web amaçlı isteği yalnızca uygulamanız söz konusu web amaçlı isteğinde yer alan alan adı için onaylanmışsa uygulamanızdaki bir etkinliğe yönlendirilir. Uygulamanız alan için onaylanmamışsa web intent'i bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
Derin bağlantı türleri
Android'de destekleyebileceğiniz üç tür derin bağlantı vardır:
- Özel derin bağlantılar: Bunlar, kullanıcıyı doğrudan bir uygulamadaki belirli bir içerik parçasına götürmek için özel bir URI şeması (ör.
example://products/123
) kullanan derin bağlantılardır. Dahili gezinme veya kontrol ettiğiniz kaynaklardan gelen bağlantılar için güçlüdürler ancak standart web bağlantıları değildirler ve başka bir uygulama aynı özel şemayı kaydederse belirsizliği giderme iletişim kutusunu tetikleyebilirler. - Web bağlantıları: Bunlar, standart
http
vehttps
şemalarını kullanan derin bağlantılardır. Standart URL'ler oldukları için daha çok yönlüdürler ancak Android 12 ve sonraki sürümlerde neredeyse her zaman netleştirme iletişim kutusunu tetiklerler. Bu da uygulamanıza yönlendirilmek yerine varsayılan olarak kullanıcının web tarayıcısı tarafından işlenecekleri anlamına gelir. - Uygulama Bağlantıları: Android 6.0'dan (API düzeyi 23) beri kullanılabilen bu bağlantılar, doğrulanmış web bağlantılarıdır. Web sitesi ilişkilendirme işlemiyle Android sistemine alan adının sahibi olduğunuzu kanıtlayabilirsiniz. Doğrulama yapıldıktan sonra sistem, söz konusu alanla ilgili bağlantıları doğrudan uygulamanıza yönlendirir ve seçim iletişim kutusunu tamamen atlar. Bu sayede kullanıcılarınız için güvenilir ve sorunsuz bir deneyim oluşturabilirsiniz.
Gelen bağlantılar için intent filtreleri ekleme
Uygulama içeriğinize bağlantı oluşturmak için manifestinize aşağıdaki öğeleri ve özellik değerlerini içeren bir intent filtresi ekleyin:
Google Arama'dan erişilebilmesi için amaç filtresinin ACTION_VIEW
amaç işlemini belirtin.
Her biri etkinliğe çözümlenen bir URI biçimini temsil eden bir veya daha fazla <data>
etiketi ekleyin. <data>
etiketi en azından android:scheme
özelliğini içermelidir.
Etkinliğin kabul ettiği URI türünü daha da daraltmak için başka özellikler ekleyebilirsiniz. Örneğin, benzer URI'leri kabul eden ancak yalnızca yol adına göre farklılık gösteren birden fazla etkinliğiniz olabilir. Bu durumda, sistemin farklı URI yolları için hangi etkinliği açması gerektiğini ayırt etmek üzere android:path
özelliğini veya pathPattern
ya da pathPrefix
varyantlarını kullanın.
BROWSABLE
kategorisini ekleyin. Niyet filtresine web tarayıcısından erişilebilmesi için gereklidir. Bu olmadan, tarayıcıdaki bir bağlantıyı tıkladığınızda uygulamanız çözümlenemez.
DEFAULT
kategorisini de ekleyin. Bu, uygulamanızın örtülü intent'lere yanıt vermesini sağlar. Bu olmadan etkinlik yalnızca amaç, uygulama bileşeni adınızı belirtiyorsa başlatılabilir.
Aşağıdaki XML snippet'inde, derin bağlantı için manifestinizde bir amaç filtresini nasıl belirtebileceğiniz gösterilmektedir. "example://gizmos"
ve "http://www.example.com/gizmos"
URI'lerinin her ikisi de bu etkinliğe yönlendiriyor.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
İki amaç filtresinin yalnızca <data>
öğesi bakımından farklı olduğuna dikkat edin. Aynı filtreye birden fazla <data>
öğesi eklemek mümkün olsa da benzersiz URL'ler (ör. scheme
ve host
öğelerinin belirli bir kombinasyonu) bildirmek istediğinizde ayrı filtreler oluşturmanız önemlidir. Bunun nedeni, aynı amaç filtresindeki birden fazla <data>
öğesinin, birleştirilmiş özelliklerinin tüm varyasyonlarını hesaba katmak için aslında birlikte birleştirilmesidir. Örneğin, aşağıdakileri göz önünde bulundurun:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
Bu yalnızca https://www.example.com
ve app://open.my.app
'ı destekliyormuş gibi görünebilir. Ancak bu iki karakterin yanı sıra app://www.example.com
ve https://open.my.app
karakterlerini de destekler.
Dikkat: Birden fazla etkinlik, aynı doğrulanmış Android App Link'e çözümlenen amaç filtreleri içeriyorsa bağlantıyı hangi etkinliğin işleyeceği garanti edilmez.
Uygulama manifestinize etkinlik içeriği için URI'ler içeren intent filtreleri ekledikten sonra Android, eşleşen URI'lere sahip tüm Intent
öğelerini çalışma zamanında uygulamanıza yönlendirebilir.
Amaç filtrelerini tanımlama hakkında daha fazla bilgi edinmek için Diğer Uygulamaların Etkinliğinizi Başlatmasına İzin Verme başlıklı makaleyi inceleyin.
Gelen amaçlardaki verileri okuma
Sistem, etkinliğinizi bir amaç filtresi aracılığıyla başlattıktan sonra, neyin oluşturulması gerektiğini belirlemek için Intent
tarafından sağlanan verileri kullanabilirsiniz. Gelen Intent
ile ilişkili verileri ve işlemi almak için getData()
ve getAction()
yöntemlerini çağırın. Bu yöntemleri etkinliğin yaşam döngüsü boyunca istediğiniz zaman çağırabilirsiniz ancak genellikle onCreate()
veya onStart
gibi erken geri çağırmalar sırasında yapmanız gerekir.
Aşağıda, Intent
kaynağından verilerin nasıl alınacağını gösteren bir snippet verilmiştir:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
Java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
Kullanıcı deneyimini iyileştirmek için aşağıdaki en iyi uygulamaları kullanın:
- Derin bağlantılar herhangi bir istem, ara sayfa veya giriş işlemi olmadan kullanıcıları doğrudan içeriğe yönlendirmelidir. Daha önce uygulamayı hiç açmamış olsalar bile kullanıcıların uygulama içeriğini görebildiğinden emin olun. Sonrasında gerçekleştirilecek etkileşimlerde veya uygulamayı Launcher'dan açtıklarında kullanıcılara istem göndermekte bir sakınca yoktur.
- Uygulamanızın, kullanıcılar derin bağlantı aracılığıyla uygulamanıza girdikten sonra geriye doğru gezinme açısından kullanıcıların beklentilerini karşılaması için Geri ve Yukarı Gezinme bölümünde açıklanan tasarım yönergelerini uygulayın.
Derin bağlantılarınızı test etme
Derin bağlantı için belirttiğiniz intent filtresi URI'lerinin doğru uygulama etkinliğine çözümlendiğini test etmek için Android Debug Bridge'i etkinlik yöneticisi (am) aracıyla birlikte kullanabilirsiniz. adb komutunu bir cihaza veya emülatöre karşı çalıştırabilirsiniz.
Bir intent filtresi URI'sini adb ile test etmenin genel söz dizimi şöyledir:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
Örneğin, aşağıdaki komut, belirtilen URI ile ilişkili bir hedef uygulama etkinliğini görüntülemeye çalışır.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
Not: Bir rotada **@Serializable data class Product(val colors: List)**
gibi bir temel türler koleksiyonu tanımlarken otomatik olarak oluşturulan derin bağlantı URL'si biçimi **basePath?colors={value**}
olur. Birden fazla sorgu parametresi içeren bir URI belirtmeye çalışırsanız (örneğin, **basepath?colors=red&colors=blue**
) ve işaretinden çıkış yapmanız gerekir (örneğin, **basepath?colors=red\&colors=blue**
).
Ayarladığınız manifest beyanı ve amaç işleyici, uygulamanız ile bir web sitesi arasındaki bağlantıyı ve gelen bağlantılarla ne yapılacağını tanımlar. Ancak sistemin uygulamanızı bir URI grubu için varsayılan işleyici olarak kabul etmesi için sistemin bu bağlantıyı doğrulamasını da istemeniz gerekir. Uygulama Bağlantılarını Doğrulama başlıklı makalede, bu doğrulamanın nasıl uygulanacağı açıklanmaktadır.
Niyetler ve uygulama bağlantıları hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
- Niyetler ve Niyet Filtreleri
- Diğer uygulamaların etkinliğinizi başlatmasına izin verme
- Android Studio ile Android App Links ekleme