Tıklanan bir bağlantı veya programatik istek bir web URI amacını çağırdığında Android sistemi, istek başarılı olana kadar aşağıdaki işlemlerin her birini sırayla dener:
- URI'yi işleyebilen ve kullanıcının tercih ettiği uygulamayı (belirlenmişse) açar.
- URI'yi işleyebilen tek uygulamayı açın.
- Kullanıcının bir iletişim kutusundan uygulama seçmesine izin verin.
İçeriğinize bağlantılar oluşturmak ve bunları test etmek için aşağıdaki adımları uygulayın. Android uygulama bağlantıları eklemek için Android Studio'daki Uygulama Bağlantıları Asistanı'nı da kullanabilirsiniz.
Not: Android 12'den (API düzeyi 31) itibaren, genel bir web amaçlı işlemi yalnızca uygulamanız söz konusu web amaçlı işlemde yer alan alan için onaylanmışsa uygulamanızdaki bir etkinlikte çözümlenir. Uygulamanız alan için onaylanmadıysa web amaçlı intent bunun yerine kullanıcının varsayılan tarayıcı uygulamasına yönlendirilir.
Gelen bağlantılar için intent filtreleri ekleme
Uygulama içeriğinize bağlantı oluşturmak için manifest dosyanıza aşağıdaki öğeleri ve özellik değerlerini içeren bir intent filtresi ekleyin:
<action>
- Intent filtresine Google Arama'dan erişilebilmesi için
ACTION_VIEW
intent işlemini belirtin. <data>
- Her biri etkinliğe çözümlenen bir URI biçimini temsil eden bir veya daha fazla
<data>
etiketi ekleyin. En azından<data>
etiketiandroid: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 veyapathPattern
ya dapathPrefix
varyantlarını kullanın. <category>
BROWSABLE
Kategoriyi ekleyin. Amaç filtresine bir 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 sayede uygulamanız, örtülü intent'lere yanıt verebilir. Bu olmadan etkinlik yalnızca amaç, uygulama bileşeninizin adını belirtirse 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
özelliklerinin 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 bulundurabilirsiniz:
<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 amaç filtreleri eklediğinizde Android, çalışma zamanında eşleşen URI'lere sahip tüm Intent
'leri 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, bir Intent
'dan 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ı, 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ı ile 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 amaç filtresi URI'lerinin doğru uygulama etkinliğine çözümlendiğini test etmek üzere etkinlik yöneticisi (am) aracıyla birlikte Android Debug Bridge'i kullanabilirsiniz. adb komutunu bir cihaza veya emülatöre karşı çalıştırabilirsiniz.
Bir amaç 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şkilendirilmiş 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
Yukarıda ayarladığınız manifest bildirimi 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 sistemden bu bağlantıyı doğrulamasını da istemeniz gerekir. Bu doğrulamanın nasıl uygulanacağı sonraki derste açıklanmaktadır.
Amaçlar 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 uygulama bağlantıları ekleme