Uygulama bağlantılarını 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:

  1. Sistem, aşağıdakilerden herhangi birini içeren tüm amaç filtrelerini inceler:
    • İşlem: android.intent.action.VIEW
    • Kategoriler: android.intent.category.BROWSABLE ve android.intent.category.DEFAULT
    • Veri şeması: http veya https
  2. 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 kodu

Cihazı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

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.

Radyo düğmesi etkinleştirildiğinde, alt kısımlara yakın bir bölümde onay kutularının yanı sıra &quot;Bağlantı ekle&quot; adlı bir düğme bulunur.
Şekil 1. Kullanıcıların hangi bağlantıların varsayılan olarak uygulamanızda açılacağını seçebileceği sistem ayarları ekranı.
Her onay kutusu, ekleyebileceğiniz bir alanı temsil eder. İletişim kutusundaki düğmeler &quot;İptal&quot; ve &quot;Ekle&quot;dir.
Şekil 2. Kullanıcıların uygulamanızla ilişkilendirmek için ek alanlar seçebileceği iletişim kutusu.

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.