Android Uygulama Bağlantısı, web sitenizin URL'lerinin, kullanıcının uygulamayı seçmesini gerektirmeden Android uygulamanızdaki ilgili içeriği anında açmasını sağlayan özel bir derin bağlantı türüdür. Android Uygulama Bağlantıları, uygulamanızın bu alan için bağlantıları otomatik olarak açmak üzere web sitesi tarafından onaylandığına dair güven oluşturmak için Digital Asset Links API'yi kullanır. Sistem, URL'lerin sahibi olduğunuzu başarıyla doğrularsa bu URL amaçlarını otomatik olarak uygulamanıza yönlendirir.
Hem uygulamanızın hem de web sitesi URL'lerinin sahibi olduğunuzu doğrulamak için aşağıdaki adımları tamamlayın:
autoVerify
özelliğini içeren intent filtreleri ekleyin. Bu özellik, sisteme uygulamanızın, amaç filtrelerinizde kullanılan URL alanlarına ait olup olmadığını doğrulamasını bildirir.Aşağıdaki konumda bir Digital Asset Links JSON dosyası barındırarak web siteniz ile amaç filtreleriniz arasındaki ilişkiyi bildirin:
https://domain.name/.well-known/assetlinks.json
İlgili bilgileri aşağıdaki kaynaklarda bulabilirsiniz:
Uygulama bağlantısı doğrulama için intent filtreleri ekleme
Uygulamanızda bağlantı işleme doğrulamayı etkinleştirmek için aşağıdaki biçime uygun amaç filtreleri ekleyin:
<!-- Make sure you explicitly set android:autoVerify to "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" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<!-- Do not include other schemes. -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
autoVerify
öğesini her ana makine için yalnızca bir <intent-filter>
bildirimine eklemek yeterli olsa da bu ana makine diğer işaretlenmemiş bildirimlerde kullanılsa bile tutarlılık için autoVerify
öğesini her <intent-filter>
öğesine eklemeniz önerilir. Bu sayede, manifest dosyanızdaki öğeleri kaldırdıktan veya yeniden düzenledikten sonra da uygulamanızın tanımladığınız tüm alanlarla ilişkilendirilmeye devam etmesi sağlanır.
Alan doğrulama işlemi için internet bağlantısı gerekir ve tamamlanması biraz zaman alabilir. Sürecin verimliliğini artırmak için sistem, Android 12 veya sonraki sürümleri hedefleyen bir uygulamada yalnızca alan, önceki kod snippet'inde belirtilen biçimi içeren bir <intent-filter>
öğesinin içindeyse doğrular.
Örneğin, "http" ve "https" dışındaki şemalar (ör. <data android:scheme="custom" />
), <intent-filter>
öğesinin alan adı doğrulamasını tetiklemesini engeller.
Birden fazla ana makine için uygulama bağlantısını destekleme
Sistem, uygulamanın URL intent filtrelerinin veri öğelerinde belirtilen ana makineyi, bu intent filtresindeki ilgili web alanlarında barındırılan Digital Asset Links dosyalarına göre doğrulayabilmelidir. Doğrulama başarısız olursa sistem, Uygulama İçeriğine Derin Bağlantılar Oluşturma bölümünde açıklandığı gibi amacı çözmek için standart davranışına geri döner. Ancak uygulama, diğer intent filtrelerinde tanımlanan URL kalıplarının herhangi biri için varsayılan işleyici olarak doğrulanmaya devam edebilir.
Not: Android 11 (API düzeyi 30) ve önceki sürümlerde sistem, manifestte tanımladığınız tüm ana makineler için eşleşen bir Digital Asset Links dosyası bulmadığı sürece uygulamanızı varsayılan işleyici olarak doğrulamaz.
Örneğin, aşağıdaki amaç filtrelerine sahip bir uygulama, yalnızca https://www.example.com
için doğrulamayı geçer. Bu durum, https://www.example.com/.well-known/assetlinks.json
konumunda bir assetlinks.json
dosyası bulunursa ancak https://www.example.net/.well-known/assetlinks.json
konumunda bulunmazsa geçerlidir:
<application> <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="http" /> <data android:scheme="https" /> <data android:host="www.example.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="www.example.net" /> </intent-filter> </activity> </application>
Not: Aynı amaç filtresindeki tüm <data>
öğeleri, birleştirilmiş özelliklerinin tüm varyasyonlarını hesaba katmak için birleştirilir. Örneğin, yukarıdaki ilk amaç filtresi yalnızca HTTPS şemasını bildiren bir <data>
öğesi içerir. Ancak bu öğe, diğer <data>
öğesiyle birleştirilir. Böylece amaç filtresi hem http://www.example.com
hem de https://www.example.com
öğelerini destekler.
Bu nedenle, belirli URI şemaları ve alan kombinasyonlarını tanımlamak istediğinizde ayrı amaç filtreleri oluşturmanız gerekir.
Birden fazla alt alan adı için uygulama bağlantısını destekleme
Digital Asset Links protokolü, amaç filtrelerinizdeki alt alan adlarını benzersiz ve ayrı ana makineler olarak değerlendirir. Bu nedenle, niyet filtreniz farklı alt alan adlarına sahip birden fazla ana makineyi listeliyorsa her alan adında geçerli bir assetlinks.json
yayınlamanız gerekir. Örneğin, aşağıdaki amaç filtresi, kabul edilen amaç URL'si ana makineleri olarak www.example.com
ve mobile.example.com
'yi içerir. Bu nedenle, geçerli bir assetlinks.json
hem https://www.example.com/.well-known/assetlinks.json
hem de https://mobile.example.com/.well-known/assetlinks.json
adresinde yayınlanmalıdır.
<application> <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> </activity> </application>
Alternatif olarak, ana makine adınızı joker karakterle (ör. *.example.com
) bildirirseniz assetlinks.json
dosyanızı kök ana makine adında (example.com
) yayınlamanız gerekir. Örneğin, aşağıdaki amaç filtresine sahip bir uygulama, assetlinks.json
dosyası https://example.com/.well-known/assetlinks.json
konumunda yayınlandığı sürece example.com
'nin herhangi bir alt adı (ör. foo.example.com
) için doğrulama adımını geçer:
<application> <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:host="*.example.com" /> </intent-filter> </activity> </application>
Aynı alanla ilişkili birden fazla uygulama olup olmadığını kontrol etme
Her biri aynı alanla ilişkili birden fazla uygulama yayınlarsanız her biri başarıyla doğrulanabilir. Ancak uygulamalar, bir uygulamanın lite ve tam sürümlerinde olduğu gibi tam olarak aynı alan ana makinesini ve yolu çözebiliyorsa yalnızca en son yüklenen uygulama, bu alan için web amaçlarını çözebilir.
Bu gibi durumlarda, gerekli paket görünürlüğüne sahip olmanız koşuluyla kullanıcının cihazında olası çakışan uygulamaları kontrol edin. Ardından, uygulamanızda queryIntentActivities()
çağrısından elde edilen sonuçları içeren özel bir seçici iletişim kutusu gösterin.
Kullanıcı, iletişim kutusunda görünen eşleşen uygulamalar listesinden tercih ettiği uygulamayı seçebilir.
Web sitesi ilişkilendirmelerini bildirme
Web sitesiyle ilişkili Android uygulamalarını belirtmek ve uygulamanın URL amaçlarını doğrulamak için web sitenizde bir Digital Asset Links JSON dosyası yayınlanmalıdır. JSON dosyası, ilişkili uygulamaları tanımlamak için aşağıdaki alanları kullanır:
package_name
: Uygulamanın uygulama kimliğibuild.gradle
dosyasında beyan edilir.sha256_cert_fingerprints
: Uygulamanızın imzalama sertifikasının SHA256 parmak izleri. Java keytool aracılığıyla parmak izi oluşturmak için aşağıdaki komutu kullanabilirsiniz: Bu alan, uygulamanızın farklı sürümlerini (ör. hata ayıklama ve üretim derlemeleri) desteklemek için kullanılabilecek birden fazla parmak izini destekler.keytool -list -v -keystore my-release-key.keystore
Uygulamanız için Play Uygulama İmzalama'yı kullanıyorsanız
keytool
yerel olarak çalıştırılarak oluşturulan sertifika parmak izi genellikle kullanıcıların cihazlarındakiyle eşleşmez. Play Console geliştirici hesabınızdakiRelease > Setup > App signing
bölümünde uygulamanız için Play Uygulama İmzalama'yı kullanıp kullanmadığınızı doğrulayabilirsiniz. Bu özelliği kullanıyorsanız aynı sayfada uygulamanız için doğru Digital Asset Links JSON snippet'ini de bulabilirsiniz.
Aşağıdaki örnek assetlinks.json
dosyası, bir com.example
Android uygulamasına bağlantı açma hakları verir:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Bir web sitesini birden fazla uygulamayla ilişkilendirme
Bir web sitesi, aynı assetlinks.json
dosyasında birden fazla uygulamayla ilişkilendirme bildirebilir. Aşağıdaki dosya listesinde, iki uygulamayla ayrı ayrı ilişkilendirme beyan eden ve https://www.example.com/.well-known/assetlinks.json
adresinde bulunan bir beyan dosyası örneği gösterilmektedir:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.puppies.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }, { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.monkeys.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Farklı uygulamalar, aynı web barındırıcısındaki farklı kaynakların bağlantılarını işleyebilir. Örneğin, uygulama1 https://example.com/articles
için bir amaç filtresi bildirebilir ve uygulama2 https://example.com/videos
için bir amaç filtresi bildirebilir.
Not: Bir alanla ilişkili birden fazla uygulama aynı veya farklı sertifikalarla imzalanabilir.
Tek bir uygulamayla birden fazla web sitesini ilişkilendirme
Birden fazla web sitesi, kendi assetlinks.json
dosyalarında aynı uygulamayla ilişkilendirme beyan edebilir. Aşağıdaki dosya listelemelerinde, example.com ve example.net'in app1 ile ilişkilendirilmesinin nasıl beyan edileceğine dair bir örnek gösterilmektedir. İlk listede, example.com'un app1 ile ilişkilendirilmesi gösterilmektedir:
https://www.example.com/.well-known/assetlinks.json
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Sonraki listede, example.net'in app1 ile ilişkilendirilmesi gösterilmektedir. Yalnızca bu dosyaların barındırıldığı konum farklıdır (.com
ve .net
):
https://www.example.net/.well-known/assetlinks.json
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
JSON doğrulama dosyasını yayınlama
JSON doğrulama dosyanızı aşağıdaki konumda yayınlamanız gerekir:
https://domain.name/.well-known/assetlinks.json
Aşağıdakilerden emin olun:
assetlinks.json
dosyası, içerik türüapplication/json
ile sunuluyor.assetlinks.json
dosyasına, uygulamanızın intent filtreleri HTTPS'yi veri şeması olarak tanımlasa da tanımlamasa da HTTPS bağlantısı üzerinden erişilebilmelidir.assetlinks.json
dosyasına herhangi bir yönlendirme olmadan (301 veya 302 yönlendirmesi olmadan) erişilebilmelidir.- Uygulama bağlantılarınız birden fazla ana makine alanını destekliyorsa
assetlinks.json
dosyasını her alanda yayınlamanız gerekir. Birden fazla ana makine için uygulama bağlantısını destekleme başlıklı makaleyi inceleyin. - Uygulamanızı, manifest dosyasında herkese açık olarak erişilemeyebilecek (ör. yalnızca VPN ile erişilebilen) geliştirme/test URL'leriyle yayınlamayın. Bu gibi durumlarda, geliştirme derlemeleri için farklı bir manifest dosyası oluşturmak üzere derleme çeşitlerini yapılandırmak geçici bir çözüm olabilir.
Android App Links doğrulama
android:autoVerify="true"
, uygulamanızın intent filtrelerinden en az birinde bulunduğunda uygulamanızı Android 6.0 (API düzeyi 23) veya sonraki sürümlerin yüklü olduğu bir cihaza yüklemek, sistemin uygulamanızın intent filtrelerindeki URL'lerle ilişkili ana makineleri otomatik olarak doğrulamasını sağlar. Android 12 ve sonraki sürümlerde, doğrulama mantığını test etmek için doğrulama sürecini manuel olarak da çağırabilirsiniz.
Otomatik doğrulama
Sistemin otomatik doğrulaması aşağıdakileri içerir:
- Sistem, aşağıdakilerden herhangi birini içeren tüm amaç filtrelerini inceler:
- İşlem:
android.intent.action.VIEW
- Kategoriler:
android.intent.category.BROWSABLE
veandroid.intent.category.DEFAULT
- Veri şeması:
http
veyahttps
- İşlem:
- Android, yukarıdaki amaç filtrelerinde bulunan her benzersiz ana makine adı için
https://hostname/.well-known/assetlinks.json
adresindeki Dijital Varlık Bağlantıları dosyasıyla ilgili olarak ilgili web sitelerine sorgu gönderir.
Uygulamanızla ilişkilendirilecek web sitelerinin listesini onayladıktan ve barındırılan JSON dosyasının geçerli olduğunu doğruladıktan sonra uygulamayı cihazınıza yükleyin. Asenkron doğrulama işleminin tamamlanması için en az 20 saniye bekleyin. Sistemin uygulamanızı doğrulayıp doğru bağlantı işleme politikalarını ayarladığını kontrol etmek için aşağıdaki komutu kullanın:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
Manuel doğrulama
Android 12'den itibaren, bir cihaza yüklenen uygulama için alan doğrulamasını manuel olarak çağırabilirsiniz. Uygulamanızın Android 12'yi hedefleyip hedeflemediğinden bağımsız olarak bu işlemi gerçekleştirebilirsiniz.
İnternet bağlantısı kurun
Alan doğrulaması yapmak için test cihazınızın internete bağlı olması gerekir.
Güncellenen alan doğrulama sürecini destekleme
Uygulamanız Android 12 veya sonraki sürümleri hedefliyorsa sistem, güncellenmiş alan doğrulama sürecini otomatik olarak kullanır.
Aksi takdirde, güncellenen doğrulama sürecini manuel olarak etkinleştirebilirsiniz. Bunu yapmak için bir terminal penceresinde aşağıdaki komutu çalıştırın:
adb shell am compat enable 175408749 PACKAGE_NAME
Bir cihazda Android uygulama bağlantılarının durumunu sıfırlama
Bir cihazda alan doğrulama işlemini manuel olarak başlatmadan önce test cihazındaki Android uygulama bağlantılarının durumunu sıfırlamanız gerekir. Bunu yapmak için bir terminal penceresinde aşağıdaki komutu çalıştırın:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
Bu komut, cihazı kullanıcının herhangi bir alan için varsayılan uygulamaları seçmeden önceki durumuna getirir.
Alan doğrulama sürecini başlatma
Bir cihazda Android uygulama bağlantılarının durumunu sıfırladıktan sonra doğrulama işlemini gerçekleştirebilirsiniz. Bunu yapmak için bir terminal penceresinde aşağıdaki komutu çalıştırın:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
Doğrulama sonuçlarını inceleme
Doğrulama aracısının isteklerini tamamlaması için biraz zaman tanıdıktan sonra doğrulama sonuçlarını inceleyin. Bunu yapmak için aşağıdaki komutu çalıştırın:
adb shell pm get-app-links PACKAGE_NAME
Bu komutun çıktısı aşağıdakine benzer:
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
Doğrulamayı başarıyla geçen alanların alan doğrulama durumu verified
olur. Diğer tüm durumlar, alan doğrulamasının yapılamadığını gösterir. Özellikle none
durumu, doğrulama aracısının doğrulama sürecini henüz tamamlamamış olabileceğini gösterir.
Aşağıdaki listede, alan doğrulamanın belirli bir alan için döndürebileceği olası dönüş değerleri gösterilmektedir:
none
- Bu alan için hiçbir şey kaydedilmedi. Doğrulama aracısının alan doğrulamayla ilgili istekleri tamamlaması için birkaç dakika daha bekleyin, ardından alan doğrulama sürecini tekrar başlatın.
verified
- Alan, bildiren uygulama için başarıyla doğrulandı.
approved
- Alan, genellikle bir kabuk komutu yürütülerek zorunlu olarak onaylanmıştır.
denied
- Alan, genellikle bir kabuk komutu yürütülerek zorunlu olarak reddedildi.
migrated
- Sistem, eski alan doğrulama yönteminin kullanıldığı önceki bir işlemin sonucunu korudu.
restored
- Alan, kullanıcı veri geri yükleme işlemi gerçekleştirdikten sonra onaylandı. Alan adının daha önce doğrulandığı varsayılır.
legacy_failure
- Alan, eski bir doğrulayıcı tarafından reddedildi. Hatanın kesin nedeni bilinmiyor.
system_configured
- Alan, cihaz yapılandırması tarafından otomatik olarak onaylandı.
1024
veya daha büyük bir hata koduCihazın doğrulayıcısına özgü özel hata kodu.
Ağ bağlantısı oluşturduğunuzdan emin olun ve alan doğrulama sürecini tekrar başlatın.
Kullanıcıdan uygulamanızı bir alanla ilişkilendirmesini isteme
Uygulamanızın bir alan için onaylanmasının bir diğer yolu da kullanıcıdan uygulamanızı bu alanla ilişkilendirmesini istemektir.
Uygulamanızın alan için onaylanıp onaylanmadığını kontrol edin
Kullanıcıya istem göstermeden önce uygulamanızın, <intent-filter>
öğelerinizde tanımladığınız alanlar için varsayılan işleyici olup olmadığını kontrol edin. Aşağıdaki yöntemlerden birini kullanarak onay durumunu sorgulayabilirsiniz:
DomainVerificationManager
API (çalışma zamanında).- Komut satırı programı (test sırasında).
DomainVerificationManager
Aşağıdaki kod snippet'inde DomainVerificationManager
API'nin nasıl kullanılacağı gösterilmektedir:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
Java
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
Komut satırı programı
Geliştirme sırasında uygulamanızı test ederken kuruluşunuzun sahip olduğu alanların doğrulama durumunu sorgulamak için aşağıdaki komutu çalıştırabilirsiniz:
adb shell pm get-app-links --user cur PACKAGE_NAME
Aşağıdaki örnek çıktıda, uygulama "example.org" alanı için doğrulanamamış olsa da kullanıcı 0, sistem ayarlarında uygulamayı manuel olarak onaylamış ve bu alan için başka bir paket doğrulanmamıştır.
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
Kullanıcının belirli bir alanla hangi uygulamanın ilişkilendirileceğini seçtiği süreci simüle etmek için kabuk komutlarını da kullanabilirsiniz. Bu komutlarla ilgili kapsamlı açıklamayı adb shell pm
komutunun çıktısında bulabilirsiniz.
İstekle ilgili bağlam bilgisi verin
Alan onayı isteğinde bulunmadan önce kullanıcıya biraz bağlam bilgisi verin. Örneğin, kullanıcılara bir açılış ekranı, iletişim kutusu veya benzer bir kullanıcı arayüzü öğesi göstererek uygulamanızın neden belirli bir alan için varsayılan işleyici olması gerektiğini açıklayabilirsiniz.
İsteği gönderme
Kullanıcı, uygulamanızın kendisinden ne yapmasını istediğini anladıktan sonra isteğinizi gönderin.
Bunu yapmak için aşağıdaki kod snippet'inde gösterildiği gibi, hedef uygulama için ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
amaç işlemini ve package:com.example.pkg
ile eşleşen bir veri dizesini içeren bir amaç çağırın:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
Java
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
Amaç çağrıldığında kullanıcılar Varsayılan olarak aç adlı bir ayarlar ekranı görür. Bu ekranda, Şekil 1'de gösterildiği gibi Desteklenen bağlantıları aç adlı bir radyo düğmesi bulunur.
Kullanıcı Desteklenen bağlantıları aç'ı etkinleştirdiğinde Bu uygulamada açılacak bağlantılar adlı bölümün altında bir dizi onay kutusu gösterilir. Kullanıcılar buradan uygulamanızla ilişkilendirmek istedikleri alanları seçebilir. Ayrıca, Şekil 2'de gösterildiği gibi alan eklemek için Bağlantı ekle'yi de seçebilirler. Kullanıcılar daha sonra ekledikleri alanlardaki herhangi bir bağlantıyı seçtiğinde bağlantı, uygulamanızda otomatik olarak açılır.
Uygulamanızın doğrulayamadığı alan adlarını uygulamanızda açma
Uygulamanızın temel işlevi, işlediği alanları doğrulama özelliği olmadan bağlantıları üçüncü taraf olarak açmak olabilir. Bu durumda, kullanıcılara bir web bağlantısı seçtiklerinde birinci taraf uygulaması ile sizin (üçüncü taraf) uygulamanız arasında seçim yapamayacaklarını açıklayın. Kullanıcıların alanları üçüncü taraf uygulamanızla manuel olarak ilişkilendirmesi gerekir.
Ayrıca, kullanıcı isterse bağlantıyı birinci taraf uygulamasında açmasına olanak tanıyan bir iletişim kutusu veya trambolin etkinliği sunmayı da düşünebilirsiniz. Bu durumda, birinci taraf uygulaması proxy görevi görür. Böyle bir iletişim kutusu veya trambolin etkinliği oluşturmadan önce uygulamanızı, uygulamanızın web amaç filtresiyle eşleşen birinci taraf uygulamalara paket görünürlüğü olacak şekilde ayarlayın.
Uygulama bağlantılarını test etme
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 Ekstre Listesi Oluşturucu ve Test Aracı'nı kullanabilirsiniz.
Doğrulanacak ana makinelerin listesini onaylayın.
Test sırasında, sistemin uygulamanız için doğrulayacağı ilişkili ana makine listesini onaylamanız gerekir. Aşağıdaki özellikleri ve öğeleri içeren karşılık gelen amaç filtrelerinin bulunduğu tüm URL'lerin bir listesini oluşturun:
android:scheme
özelliğihttp
veyahttps
değeriyle- Alan URL'si kalıbı içeren
android:host
özelliği android.intent.action.VIEW
işlem öğesiandroid.intent.category.BROWSABLE
kategori öğesi
Bu listeyi kullanarak, adlandırılmış her ana makinede ve alt alanda bir Digital Asset Links JSON dosyası sağlandığını kontrol edin.
Digital Asset Links dosyalarını onaylayın
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://domain.name:optional_port& relation=delegate_permission/common.handle_all_urls
Bağlantı politikalarını kontrol etme
Test sürecinizin bir parçası olarak, bağlantı işleme için geçerli 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 kod da aynı işi yapar:
adb shell dumpsys package d
Not: Sistemlerin doğrulama sürecini tamamlaması için uygulamanızı yükledikten sonra en az 20 saniye beklediğinizden emin olun.
Komut, cihazda tanımlanan her kullanıcının veya profilin listesini döndürür. Bu liste, aşağıdaki biçimde bir başlıkla başlar:
App linkages for user 0:
Bu başlığın ardından, çıkışta 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 giriş, 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çmiş ve manifestiandroid:autoVerify="true"
içeren bir uygulamanın durumualways
olarak gösterilir. Bu durumdan sonraki onaltılık sayı, Android sisteminin kullanıcının uygulama bağlantısı tercihlerine ilişkin kaydıyla ilgilidir. Bu değer, doğrulamanın başarılı olup olmadığını belirtmez.
Not: Bir kullanıcı, doğrulama tamamlanmadan önce bir uygulamanın uygulama bağlantısı ayarlarını değiştirirse doğrulama başarısız olmasına rağmen başarılı bir doğrulama için yanlış pozitif görebilirsiniz. Ancak, kullanıcı desteklenen bağlantıları sormadan açmak için uygulamayı açıkça etkinleştirdiyse bu doğrulama hatası önemli değildir. Bunun nedeni, kullanıcı tercihlerinin programatik doğrulamaya (veya bunun olmamasına) göre öncelikli olmasıdır. Bu nedenle, doğrulama başarılı olmuş gibi bağlantı doğrudan uygulamanıza gider ve iletişim kutusu gösterilmez.
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:
<application> <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 yukarıdaki manifestten doğrulamaya çalışacağı ana makinelerin listesi:
www.example.com mobile.example.com www.example2.com account.example.com
Platformun yukarıdaki manifestten doğrulamaya çalışmayacağı ana bilgisayarların 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)
Bildirim listeleri hakkında daha fazla bilgi edinmek için Bildirim Listesi Oluşturma başlıklı makaleyi inceleyin.
Sık karşılaşılan uygulama hatalarını düzeltme
Android App Link'lerinizi doğrulayamıyorsanız aşağıdaki yaygın hataları kontrol edin. Bu bölümde yer tutucu alan adı olarak example.com
kullanılır. Bu kontrolleri yaparken example.com
yerine sunucunuzun gerçek alan adını girin.
- Yanlış amaç filtresi ayarı
- Uygulamanızın sahibi olmadığı bir URL'yi
<intent-filter>
öğesine ekleyip eklemediğinizi kontrol edin. - Yanlış sunucu yapılandırması
Sunucunuzun JSON yapılandırmasını kontrol edin ve SHA değerinin doğru olduğundan emin olun.
Ayrıca,
example.com.
(sondaki nokta ile) öğesininexample.com
ile aynı içeriği sunduğundan emin olun.- Sunucu tarafı yönlendirmeler
Aşağıdakiler gibi bir yönlendirme ayarlarsanız sistem, uygulamanız için hiçbir Android App Link'i doğrulamaz:
http://example.com
-https://example.com
example.com
-www.example.com
Bu davranış, uygulamanızın güvenliğini korur.
- Sunucu sağlamlığı
Sunucunuzun istemci uygulamalarınıza bağlanıp bağlanamadığını kontrol edin.
- Doğrulanamayan bağlantılar
Test amacıyla, doğrulanabilir olmayan bağlantıları bilerek ekleyebilirsiniz. Android 11 ve önceki sürümlerde bu bağlantıların, sistemin uygulamanız için tüm Android Uygulama Bağlantılarını doğrulamamasına neden olduğunu unutmayın.
- assetlinks.json dosyasında yanlış imza var
İmzanızın doğru olduğunu ve uygulamanızı imzalamak için kullanılan imzayla eşleştiğini doğrulayın. Yaygın hatalar şunlardır:
- Uygulamayı hata ayıklama sertifikasıyla imzalama ve yalnızca
assetlinks.json
'da yayın imzasına sahip olma. assetlinks.json
içinde küçük harfli bir imza kullanıyorsanız. İmza büyük harflerle yazılmalıdır.- Play Uygulama İmzalama özelliğini kullanıyorsanız Google'ın her sürümünüzü imzalamak için kullandığı imzayı kullandığınızdan emin olun. Web sitesi ilişkilendirmelerini bildirme ile ilgili talimatları uygulayarak bu ayrıntıları (tam bir JSON snippet'i dahil) doğrulayabilirsiniz.
- Uygulamayı hata ayıklama sertifikasıyla imzalama ve yalnızca