Uygulamanızın intent filtrelerinden en az birinde android:autoVerify="true" varsa uygulamanızı Android 6.0 (API düzeyi 23) veya sonraki sürümleri çalıştıran bir cihaza yüklediğinizde sistem, uygulamanızın intent filtrelerindeki URL'lerle ilişkili ana makineleri otomatik olarak doğrular. 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ı şunları içerir:
- Sistem, aşağıdakilerden herhangi birini içeren tüm intent filtrelerini inceler:
- İşlem:
android.intent.action.VIEW - Kategoriler:
android.intent.category.BROWSABLEveandroid.intent.category.DEFAULT - Veri şeması:
httpveyahttps
- İşlem:
- Android, intent filtrelerinde bulunan her benzersiz ana makine adı için ilgili web sitelerinde https://hostname/.well-known/assetlinks.json adresindeki Digital Asset Links dosyasını 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, cihaza yüklenen bir uygulama için alan doğrulamasını manuel olarak çağırabilirsiniz. Uygulamanızın Android 12'yi hedefleyip hedeflemediğine bakılmaksızın 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. Bunun için 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ğrulamasını manuel olarak çağırmadan önce test cihazındaki Android Uygulama Bağlantıları'nın durumunu sıfırlamanız gerekir. Bunun 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. Bunun için 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 bekledikten sonra doğrulama sonuçlarını inceleyin. Bunun için aşağıdaki komutu çalıştırın:
adb shell pm get-app-links PACKAGE_NAME
Bu komutun çıkışı 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 durumlar, alan doğrulamasının gerçekleştirilemediğini gösterir. Özellikle none durumu, doğrulama temsilcisinin 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 ve ardından alan doğrulama sürecini tekrar çağırın.
verified- Alan, bildirimde bulunan 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ğrulaması kullanan önceki bir işlemin sonucunu korudu.
restored- Kullanıcı veri geri yükleme işlemi gerçekleştirdikten sonra alan onaylandı. Alan adının daha önce doğrulandığı varsayılır.
legacy_failure- Alan, eski bir doğrulayıcı tarafından reddedildi. Başarısızlığın kesin nedeni bilinmiyor.
system_configured- Alan, cihaz yapılandırması tarafından otomatik olarak onaylandı.
- Hata kodu
1024veya daha büyük Cihazın doğrulayıcısına özel hata kodu.
Ağ bağlantısı kurduğ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 başka bir 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ıdan onay istemeden önce uygulamanızın, <intent-filter> öğelerinizde tanımladığınız alanlar için varsayılan işleyici olup olmadığını kontrol edin. Onay durumunu aşağıdaki yöntemlerden birini kullanarak sorgulayabilirsiniz:
DomainVerificationManagerAPI'si (ç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 adı için doğrulamayı geçememiş olsa da 0 kullanıcısı, uygulamayı sistem ayarlarında manuel olarak onaylamıştır ve bu alan adı 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 alan adıyla ilişkili uygulamayı seçtiği süreci simüle etmek için kabuk komutlarını da kullanabilirsiniz. Bu komutların tam açıklaması adb shell pm çıkışında mevcuttur.
İstekle ilgili bağlam bilgisi verme
Alan onayı için bu isteği göndermeden önce kullanıcıya biraz bilgi 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.
İstek oluşturma
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örünür. Kullanıcılar buradan uygulamanızla ilişkilendirmek istedikleri alanları seçebilir. Ayrıca Şekil 2'de gösterildiği gibi Bağlantı ekle'yi seçerek alan ekleyebilirler. Kullanıcılar daha sonra ekledikleri alanlardaki herhangi bir bağlantıyı seçtiğinde bağlantı otomatik olarak uygulamanızda açılır.
Uygulamanızın doğrulayamadığı alanları 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 intent filtresiyle eşleşen birinci taraf uygulamalara paket görünürlüğü olacak şekilde ayarlayın.
Digital Asset Links güncelleme gecikmesi
Web sunucunuzdaki assetlinks.json dosyasını güncellediğinizde bu değişikliklerin son kullanıcı cihazlarına yansıtılması için gereken süre, OS sürümüne bağlıdır:
- Android 15 (API düzeyi 35) ve sonraki sürümler: Sistem, alanları arka planda düzenli olarak yeniden doğrular. Sistemin önbelleğe alma ve planlanmış yeniden doğrulama işlemleri nedeniyle, değişikliklerin tüm son kullanıcı cihazlarına uygulanması yedi günü bulabilir.
- Android 14 (API düzeyi 34) ve önceki sürümler: Sistem, arka planda düzenli olarak yeniden doğrulama yapmaz. Dosyadaki güncellemeler genellikle yalnızca uygulama yüklendiğinde veya güncellendiğinde alınır.
Test güncellemeleri
Test sırasında belirli bir cihazda yeniden doğrulamayı zorunlu kılmak için uygulamayı kaldırıp yeniden yükleyebilirsiniz. Ancak yeniden yükleme işleminden sonra bile sunucu tarafı önbelleklerinin, güncellenmiş assetlinks.json dosyasının cihaza teslimini geciktirebileceğini unutmayın. Önbellek zamana dayalı olduğundan, birkaç saat sonra tekrar denerseniz gecikme genellikle otomatik olarak çözülür.