Uygulama bağlantısı özelliğini uygularken sistemin uygulamanızı web sitelerinizle ilişkilendirebildiğinden ve URL isteklerini beklediğiniz gibi işleyebildiğinden emin olmak için bağlantı işlevini test etmeniz gerekir.
Mevcut bir ekstre dosyasını test etmek için İfade Listesi Oluşturucu ve Test Aracı'nı kullanabilirsiniz.
Aşağıdaki bölümlerde, Uygulama Bağlantıları doğrulamanızı manuel olarak nasıl test edeceğiniz açıklanmaktadır. İsterseniz doğrulamayı Google Play Derin Bağlantılar aracından veya Android Studio App Links Assistant'tan test edebilirsiniz.
Doğrulanacak ana makinelerin listesini onaylama
Test sırasında, sistemin uygulamanız için doğrulayacağı ilişkili ana makine listesini onaylamanız gerekir. Aşağıdaki özellikler ve öğeleri içeren karşılık gelen intent filtrelerinin bulunduğu tüm URL'lerin bir listesini oluşturun:
httpveyahttpsdeğerine sahipandroid:schemeözelliği- Alan URL'si kalıbı içeren
android:hostözelliği android.intent.action.VIEWişlem öğesiandroid.intent.category.BROWSABLEkategori öğesi
Her bir adlandırılmış ana makine ve alt alan adında bir Digital Asset Links JSON dosyası sağlandığını kontrol etmek için bu listeyi kullanın.
Digital Asset Links dosyalarını onaylama
Her web sitesi için Digital Asset Links API'yi kullanarak Digital Asset Links JSON dosyasının düzgün şekilde barındırıldığını ve tanımlandığını onaylayın:
https://digitalassetlinks.googleapis.com/v1/statements:list?
source.web.site=https://<var>domain.name</var>:<var>optional_port</var>&
relation=delegate_permission/common.handle_all_urls
Dinamik Uygulama Bağlantıları için ilişki uzantılarını da kontrol edebilirsiniz.
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://www.example.com&relation=delegate_permission/common.handle_all_urls&return_relation_extensions=true
Bağlantı politikalarını kontrol etme
Test sürecinizin bir parçası olarak, bağlantı işleme için mevcut sistem ayarlarını kontrol edebilirsiniz. Bağlı cihazınızdaki tüm uygulamalar için mevcut bağlantı işleme politikalarının listesini almak üzere aşağıdaki komutu kullanın:
adb shell dumpsys package domain-preferred-apps
Aşağıdaki komut da aynı işlemi yapar:
adb shell dumpsys package d
Komut, cihazda tanımlanan her kullanıcı veya profilin listesini döndürür. Bu listenin başında aşağıdaki biçimde bir başlık bulunur:
App linkages for user 0:
Bu başlıktan sonra, çıkışta söz konusu kullanıcının bağlantı işleme ayarlarını listelemek için aşağıdaki biçim kullanılır:
Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002
Bu liste, söz konusu kullanıcı için hangi uygulamaların hangi alanlarla ilişkili olduğunu gösterir:
Package: Bir uygulamayı, manifestinde belirtildiği şekilde paket adına göre tanımlar.Domains: Bu uygulamanın web bağlantılarını işlediği ana makinelerin tam listesini, sınırlayıcı olarak boşlukları kullanarak gösterir.Status: Bu uygulamanın mevcut bağlantı işleme ayarını gösterir. Doğrulamayı geçen ve manifestindeandroid:autoVerify="true"bulunan bir uygulamanın durumualwaysolarak gösterilir. Bu durumdan sonraki onaltılık sayı, Android sisteminin kullanıcının uygulama bağlantısı tercihleriyle ilgili kaydıyla ilgilidir. Bu değer, doğrulamanın başarılı olup olmadığını göstermez.
Test örneği
Uygulama bağlantısı doğrulamasının başarılı olması için sistemin, uygulama bağlantıları ölçütlerini karşılayan belirli bir intent filtresinde belirttiğiniz web sitelerinin her biriyle uygulamanızı doğrulayabilmesi gerekir. Aşağıdaki örnekte, birkaç uygulama bağlantısının tanımlandığı bir manifest yapılandırması gösterilmektedir:
<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" />
<data android:scheme="https" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<data android:host="mobile.example.com" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="www.example2.com" />
</intent-filter>
</activity>
<activity android:name="SecondActivity">
<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="https" />
<data android:host="account.example.com" />
</intent-filter>
</activity>
<activity android:name="ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="https" />
<data android:host="map.example.com" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="market" />
<data android:host="example.com" />
</intent-filter>
</activity>
</application>
Platformun önceki manifestten doğrulamaya çalışacağı ana makinelerin listesi şöyledir:
www.example.com
mobile.example.com
www.example2.com
account.example.com
Platformun önceki manifestten doğrulamaya çalışmayacağı ana makinelerin listesi:
map.example.com (it does not have android.intent.category.BROWSABLE)
market://example.com (it does not have either an "http" or "https" scheme)
İfade listeleri hakkında daha fazla bilgi edinmek için İfade Listesi Oluşturma başlıklı makaleyi inceleyin.
debug-link işaretini kullanarak bağlantı çözümlemeyi teşhis etme
Android 17'den itibaren, sistemin belirli bir URL'yi nasıl çözdüğünü teşhis etmek için etkinlik yöneticisi (am start) komutuyla --debug-link işaretini kullanabilirsiniz. Bu araç, niyetle eşleşen aday uygulamaların ayrıntılı dökümünü, uygulama manifestindeki belirli kuralları ve çözümleme sırasında değerlendirilen assetlinks.json dosyasını (Dinamik Uygulama Bağlantıları için) sağlar.
Belirli bir URL'nin bağlantı çözümlemesini test etmek için terminal penceresinde aşağıdaki komutu çalıştırın:
adb shell am start --debug-link -a android.intent.action.VIEW -d "https://xyz.com/foo"
Teşhis çıkışı, App Link Resolution Debug başlığı altında yazdırılır ve çözüm sürecini anlamanıza yardımcı olacak aşağıdaki bölümleri içerir:
- Hedef ayrıntıları: Eşleşen her aday uygulamayı paket adına ve hedef etkinliğine göre tanımlar.
- Intent filtresi eşleşmesi (
AndroidManifest.xml): Manifest intent filtresindeki hangi statik özelliklerin (ör.scheme,host,path,pathPrefixveyapathPattern) URI ile eşleştiğini gösterir. - Uygulama Bağlantısı Doğrulaması: Mevcut alan adı doğrulama durumunu (ör.
STATE_SUCCESS) gösterir. - Dinamik Uygulama Bağlantıları: Uygulama,
assetlinks.jsondosyasında Dinamik Uygulama Bağlantıları eşleme kurallarını kullanıyorsa bu bölümde, URI'ye göre değerlendirilen her kural listelenir. Her kural, eşleşen URI filtrelerini (ör. yol ön ekleri veya kalıpları) ve birallowalanını gösterir:allow = 0: İzin verme/dahil etme kuralı (allow: true). Bu kural eşleşirse uygulamanın URI'yi açmasına izin verilir.allow = 1: Engelleme/hariç tutma kuralı (allow: false/exclude: true). Bu kural eşleşirse uygulamanın URI'yi açması engellenir.- Not: Boş bir filtre dizesi (
filter =), alan altındaki tüm yollarla eşleşen boş bir yol ön ekini gösterir (joker karakter veya her şeyi kapsayan bir karakter olarak işlev görür).
Örnek hata ayıklama çıkışı
https://xyz.com alanıyla ilişkili bir uygulamayı (com.example.xyzapp) ele alalım. Bu uygulama, diğer tüm yollara izin verirken /foo* yolunu hariç tutmak için assetlinks.json dosyasında dinamik kurallar tanımlıyor:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.xyzapp",
"sha256_cert_fingerprints": ["..."]
},
"relation_extensions": {
"delegate_permission/common.handle_all_urls": {
"dynamic_app_link_components": [
{"/": "/foo*", "exclude": true},
{"/": "*"}
]
}
}
}
]
--debug-link kullanarak https://xyz.com/foo URL'sini teşhis ederken:
adb shell am start --debug-link -a android.intent.action.VIEW -d "https://xyz.com/foo"
Komut çıkışı aşağıdaki teşhis dökümünü verir:
--- App Link Resolution Debug ---
URI: https://xyz.com/foo
Resolution: Ambiguous (Multiple apps or Browser fallback)
This usually happens when multiple apps can handle the link and no default is set.
All Matching Candidates:
Target:
Package: com.example.xyzapp
Activity: com.example.xyzapp.MainActivity
Intent Filter Match (AndroidManifest.xml)
Scheme: 'https' matched android:scheme="https"
Host: 'xyz.com' matched android:host="xyz.com"
App Link Verification:
Verification status: STATE_SUCCESS
Dynamic App Links:
-> Matched Rule 0: UriRelativeFilterGroup { allow = 1, uri_filters = {UriRelativeFilter { uriPart = PATH, patternType = PREFIX, filter = /foo }}, }
-> Matched Rule 1: UriRelativeFilterGroup { allow = 0, uri_filters = {UriRelativeFilter { uriPart = PATH, patternType = PREFIX, filter = }}, }
Target:
Package: org.chromium.webview_shell
Activity: org.chromium.webview_shell.WebViewBrowserActivity
Intent Filter Match (AndroidManifest.xml)
Scheme: 'https' matched android:scheme="https"
---------------------------------
Starting: Intent { act=android.intent.action.VIEW dat=https://xyz.com/foo }
Bu örnekte sistem, assetlinks.json adresindeki iki Dinamik Uygulama Bağlantısı kuralını değerlendirmiştir:
- Kural 0 (
allow = 1,filter = /foo):{"/": "/foo*", "exclude": true}tarafından oluşturulan bu kural,/fooyol önekiyle başlayan URL'leri engelleyen bir hariç tutma kuralıdır (allow: false). - 1. kural (
allow = 0,filter =):{"/": "*"}tarafından oluşturulan bu kural, boş bir yol öneki (filter =) içeren bir dahil etme kuralıdır (allow: true) vexyz.comaltındaki tüm yollarla eşleşir (tümünü kapsar).
Bu senaryoda çözümün işleyiş şekli:
- Hem Kural 0 hem de Kural 1,
https://xyz.com/fooURL'siyle eşleşiyor. - Dinamik Uygulama Bağlantısı kuralları, yukarıdan aşağıya doğru sırayla değerlendirilir (ilk eşleşen kural geçerli olur).
- 0. kural, ifade listesinde ilk sırada yer aldığından ve bir hariç tutma kuralı (
allow = 1) olduğundan genel izin kuralına (1. kural) göre önceliklidir. - Bu nedenle uygulama,
https://xyz.com/foobağlantılarını işleme kapsamı dışında tutulur. Bu da sistemin tarayıcıya geri dönmesine veya anlam belirsizliğini giderme iletişim kutusu göstermesine neden olur.