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:
- Kullanıcının tercih ettiği ve URI'yi işleyebilecek uygulamasını (tanımlanmışsa) açın.
- URI'yı işleyebilen tek uygulamayı açın.
- Kullanıcının iletişim kutusundan uygulama seçmesine izin ver.
İçeriğinize yönelik bağlantılar oluşturmak ve test etmek için aşağıdaki adımları uygulayın. Android Uygulama Bağlantıları eklemek için Android Studio'da Uygulama Bağlantıları Asistanı'nı da kullanabilirsiniz.
Not: Android 12'den (API düzeyi 31) itibaren genel bir web amacı, yalnızca uygulamanız söz konusu web amacında yer alan belirli alan için onaylanırsa uygulamanızdaki bir etkinliğe çözümlenir. Uygulamanız alan için onaylanmazsa, web amacı bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.
Gelen bağlantılar için intent filtreleri ekleme
Uygulama içeriğinize bağlantı oluşturmak için manifest dosyanıza şu öğeleri ve özellik değerlerini içeren bir intent filtresi ekleyin:
<action>
- Niyet filtresine Google Arama'dan erişilebilmesi için
ACTION_VIEW
amaç işlemini belirtin. <data>
- Her biri, etkinliğe çözümlenen bir URI biçimini temsil eden bir veya daha fazla
<data>
etiketi ekleyin.<data>
etiketi en azındanandroid:scheme
özelliğini içermelidir.Etkinliğin kabul ettiği URI türünü daha da hassaslaştırmak için daha fazla özellik ekleyebilirsiniz. Örneğin, benzer URI'leri kabul eden ancak 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 ya dapathPattern
veyapathPrefix
varyantlarını kullanın. <category>
BROWSABLE
kategorisini ekleyin. Amaç filtresinin bir web tarayıcısından erişilebilir olması için gereklidir. Aksi halde, tarayıcıda bağlantıyı tıkladığınızda uygulamanıza gidilemez.DEFAULT
kategorisini de dahil edin. Bu, uygulamanızın dolaylı intentlere yanıt vermesine olanak tanır. Bu olmadan, etkinlik yalnızca amaç uygulama bileşeninizin adını belirtiyorsa başlatılabilir.
Aşağıdaki XML snippet'i, derin bağlantılar için manifest'inizde bir intent filtresini nasıl belirtebileceğinizi göstermektedir. “example://gizmos”
ve “http://www.example.com/gizmos”
URI'ları bu etkinliğe çözümlenir.
<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 intent filtresinin yalnızca <data>
öğesi açısından farklılık gösterdiğine dikkat edin.
Aynı filtreye birden çok <data>
öğesi eklemek mümkün olsa da, benzersiz URL'ler tanımlamak istediğinizde ayrı filtreler (scheme
ve host
öğelerinin belirli bir kombinasyonu gibi) belirtmek önemlidir. Çünkü aynı amaç filtresindeki birden çok <data>
öğesi, birleşik özelliklerinin tüm varyasyonlarını hesaba katmak için birleştirilir. Örneğin, aşağıdakileri ele alalım:
<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
özelliklerini destekliyor gibi görünebilir. Ancak, aslında bu ikisini ve ayrıca şu ikisini de destekler: app://www.example.com
ve https://open.my.app
.
Dikkat: Birden fazla etkinlik, aynı doğrulanmış Android Uygulama Bağlantısı'na çözümlenen intent filtreleri içeriyorsa hangi etkinliğin bağlantıyı işlediğine dair bir garanti yoktur.
Uygulama manifestinize etkinlik içeriği için URI'lar içeren intent filtreleri eklemenizin ardından Android, eşleşen URI'leri olan 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 bölümüne göz atın.
Gelen intentlerden veri okuma
Sistem bir intent filtresi aracılığıyla etkinliğinizi başlattıktan sonra, ne oluşturmanız 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 bunu yapmanız gerekir.
Intent
öğesinden nasıl veri alacağınızı gösteren snippet'i burada bulabilirsiniz:
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ı izleyin:
- Derin bağlantı; kullanıcıları herhangi bir istem, ara sayfa veya giriş işlemi olmadan 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ı üzerinden uygulamanıza girdikten sonra geriye dönük gezinme beklentilerini karşılaması için Geri ve Yukarı Doğru Gezinme bölümünde açıklanan tasarım yönergelerini uygulayın.
Derin bağlantılarınızı test edin
Derin bağlantı için belirttiğiniz intent filtresi URI'larının doğru uygulama etkinliğine çözümlenip çözümlenmediğini test etmek için Android Hata Ayıklama Köprüsü'nü etkinlik yöneticisi (am) aracıyla kullanabilirsiniz. Adb komutunu bir cihaza veya emülatöre karşı çalıştırabilirsiniz.
Amaç filtresi URI'sını adb ile test etmek için kullanılan genel söz dizimi şu şekildedir:
$ 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 beyanı ve intent işleyici, uygulamanız ile web sitesi arasındaki bağlantıyı ve gelen bağlantılarla ne yapılacağını tanımlar. Ancak, sistemin uygulamanızı bir dizi URI'nın varsayılan işleyicisi olarak işlemesini sağlamak amacıyla sistemin bu bağlantıyı doğrulamasını da istemeniz gerekir. Sonraki derste 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: