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 intent filtrelerinde bulunan her benzersiz ana makine adı için
https:///.well-known/assetlinks.json
adresindeki Digital Asset Links dosyasıyla ilgili olarak karşılık gelen web sitelerini sorgular.
Uygulamanızla ilişkilendirilecek web sitelerinin listesini ve barındırılan JSON dosyasının geçerli olduğunu onayladıktan sonra uygulamayı cihazınıza yükleyin. Eşzamansız 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 başlatabilirsiniz. Uygulamanızın Android 12'yi hedefleyip hedeflemediğinden bağımsız olarak bu işlemi gerçekleştirebilirsiniz.
İnternet bağlantısı kurma
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
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ında 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 çıkışı aşağıdaki gibidir:
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ğrulamasıyla 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 onaylandı.
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 etme
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 verme
Alan onayı isteğinde bulunmadan önce kullanıcıya biraz bağlam bilgisi verin. Örneğin, kullanıcılara uygulamanızın neden belirli bir alan için varsayılan işleyici olması gerektiğini açıklayan bir başlangıç ekranı, iletişim kutusu veya benzer bir kullanıcı arayüzü öğesi gösterebilirsiniz.
İsteği yapma
Kullanıcı, uygulamanızın kendisinden ne yapmasını istediğini anladıktan sonra isteği 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
intent işlemini ve package:com.example.pkg
ile eşleşen bir veri dizesini içeren bir intent ç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);
İntent ç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ızda, uygulamanızın doğrulayamadığı alan adları açma
Uygulamanızın temel işlevi, işlediği alan adlarını 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 intent filtresiyle eşleşen birinci taraf uygulamalara paket görünürlüğü olacak şekilde ayarlayın.