Uygulama bağlantıları için intent filtreleri ekleme

Uygulama Bağlantıları, HTTP veya HTTPS şemasını kullanan ve Android tarafından web sitenizle ilişkili olduğu doğrulanan derin bağlantılardır. Uygulama Bağlantılarını işlemek için kaydolmak üzere aşağıdaki adımları uygulayın:

  1. Uygulama manifestinize, web sitenizin alanını veya URL'lerini belirten bir veya daha fazla amaç filtresi ekleyin.
  2. Intent filtresi öğelerine autoVerify="true"attribute ekleyin. Bu, sisteme şemayı ve ana makine alanlarını web sitenizin assetlinks.json yapılandırmasına göre doğrulamaya çalışması gerektiğini bildirir.
  3. Web sitesi ilişkilendirmelerini bildirin.

Aşağıda, şemalar ve ana makinelerin yanı sıra autoVerify="true içeren bir uygulama bağlantısı bildirimi örneği verilmiştir:

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- 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 link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

Kodla ilgili önemli noktalar

  • AutoVerify: Uygulama Bağlantıları için android:autoVerify="true" özelliği gereklidir. Sisteme, uygulamanız ile <data> etiketlerinde belirtilen şemalar ve alanlar arasındaki ilişkilendirmeyi doğrulamaya çalışması gerektiğini bildirir. Doğrulanabilir olmasını istediğiniz her Intent filtresine autoVerify="true eklemeniz önerilir.
  • Veri öğeleri: Her uygulama bağlantıları intent filtresi, doğrulanabilir web sitesi alanınızla eşleşen şemaları ve ana makine biçimlerini belirten bir veya daha fazla <data> öğesi içermelidir.
  • Şemalar: Intent filtresi, hem http hem de https şemaları için <data> öğelerini içermelidir.
  • Ana makineler: İsteğe bağlı olarak bir veya daha fazla ana makineyle eşleşecek <data> öğeleri ekleyebilirsiniz. Birden fazla alt alan adını (ör. *.example.com) eşleştirmek için joker karakter (*) kullanın. Sistem, her ana makineyi web sitenizdeki assetlinks.json dosyanıza göre doğrulamaya çalışır. Yol düzeyindeki yönlendirmelerin assetlinks.json dosyası tarafından işlenmesi gerektiğini unutmayın (aşağıdaki en iyi uygulamalar bölümüne bakın).

  • Birden fazla ana makine: Birden fazla ana makine alanı beyan ederseniz sistem (Android 12'de ve sonraki sürümlerde) her birini doğrulamaya çalışır. Herhangi bir ana makine doğrulanırsa uygulama, doğrulanmış ana makineden gelen bağlantılar için varsayılan işleyici olur. Android 11 ve önceki sürümlerde tek bir ana makine bile doğrulanamazsa doğrulama başarısız olur.

  • Birden fazla intent filtresi: Benzersiz URL'ler (ör. şema ve ana makinenin belirli bir kombinasyonu) tanımlamak istediğinizde ayrı filtreler oluşturmanız önemlidir. Bunun nedeni, aynı intent filtresindeki birden fazla <data> öğesinin, birleştirilmiş özelliklerinin tüm varyasyonlarını hesaba katmak için birleştirilmesidir.

Manifest filtreleme kurallarıyla ilgili dikkat edilmesi gerekenler

Android 15 ve sonraki sürümlerde Dinamik Uygulama Bağlantıları ile kullanılacak filtreler ayarlıyorsanız sunucu tarafındaki assetlinks.json dosyasında tanımlanan dinamik kuralların, uygulama manifestinizde statik olarak tanımladığınız URL kurallarının kapsamını genişletemeyeceğini unutmayın.

Bu nedenle, şu yaklaşımı kullanmanızı öneririz:

  • Uygulama manifestinizde, yalnızca şema ve alan adını belirterek mümkün olan en geniş kapsamı ayarlayın.
  • Daha fazla iyileştirme için sunucu tarafı assetlinks.json kurallarını kullanın. Örneğin, yol düzeyinde yönlendirme.

Bu ideal yapılandırmayla, uygulama manifestinde belirlediğiniz geniş kapsamın içine sığacağını bilerek assetlinks.json dosyasına gerektiğinde dinamik olarak yeni uygulama bağlantısı yolları ekleyebilirsiniz.

Birden fazla ana makine için uygulama bağlantılarını destekleme

Sistemin, uygulamanın URL intent filtrelerinin veri öğelerinde belirtilen ana makineyi, söz konusu intent filtresindeki ilgili web alanlarında barındırılan Digital Asset Links dosyalarına göre doğrulayabilmesi gerekir. Doğrulama başarısız olursa sistem, intent'i çözmek için Uygulama İçeriğine Derin Bağlantılar Oluşturma bölümünde açıklandığı gibi standart davranışına geri döner. Ancak uygulama, uygulamanın diğer intent filtrelerinde tanımlanan URL kalıplarının herhangi biri için varsayılan işleyici olarak doğrulanmaya devam edebilir.

Örneğin, aşağıdaki intent filtrelerine sahip bir uygulama, https://www.example.com için doğrulama adımını yalnızca https://www.example.com/.well-known/assetlinks.json konumunda assetlinks.json dosyası bulunursa ancak https://www.example.net/.well-known/assetlinks.json konumunda bulunmazsa 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="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>

Birden fazla alt alan adı için uygulama bağlantısı oluşturma desteği

Digital Asset Links protokolü, intent filtrelerinizdeki alt alan adlarını benzersiz ve ayrı ana makineler olarak değerlendirir. Bu nedenle, intent 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 intent filtresi, kabul edilen intent URL'si ana makineleri olarak www.example.com ve mobile.example.com'u 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) tanımlarsanız assetlinks.json dosyanızı kök ana makine adında (example.com) yayınlamanız gerekir. Örneğin, aşağıdaki intent filtresine sahip bir uygulama, assetlinks.json dosyası https://example.com/.well-known/assetlinks.json konumunda yayınlandığı sürece example.com'un 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 bir uygulama 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 intent'lerini çözebilir.

Bu gibi durumlarda, gerekli paket görünürlüğüne sahip olduğunuz varsayılarak 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.

assetlinks.json içindeki gelişmiş eşleşme kuralları ve <uri-relative-filter-group> kullanımı dahil olmak üzere dinamik uygulama bağlantısı özellikleri yalnızca Android 15 (API düzeyi 35) ve sonraki sürümlerde tam olarak desteklenir.

Android 14 (API düzeyi 34) ve önceki sürümlerde sistem, uygulama bağlantısı doğrulama için yalnızca manifest dosyanızın <data> öğelerinde belirtilen scheme ve host değerlerini dikkate alır. assetlinks.json dosyasındaki yola özgü kurallar, hariç tutmalar ve dinamik güncellemeler uygulanmaz.

Bu nedenle, manifestinizde yalnızca scheme ve host belirtilmişse uygulamanız, Android 15 ve sonraki sürümlerde assetlinks.json içinde tanımlanan yola özel kurallardan bağımsız olarak Android 14 ve önceki sürümlerde doğrulanmış alanın tüm yollarını beklenmedik şekilde yakalayabilir.

Android 15 ve sonraki sürümlerde daha belirli yollar için Dinamik Uygulama Bağlantıları'nı kullanmak istediğinizde uygulamanızın Android 14 ve önceki sürümlerde bir alanla ilgili tüm bağlantıları işlemesini önlemek için manifest dosyanızın amaç filtresine eşleşmeyen bir yol ekleyin. Bağlantılarınız için geçerli bir yol olma ihtimali olmayan bir android:path özelliğine sahip bir <data> öğesi ekleyin. Bu, intent filtresinin daha eski sürümlerdeki tüm yollarla eşleşmemesini sağlar.

Örnek:

<activity
    android:name=".MainActivity"
    android:exported="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" />

        <data android:scheme="http" />
        <data android:scheme="https" />
        <data android:host="www.example.com" />

        <!-- Add a non-matching path for backward compatibility -->
        <data android:path="/no_match_for_older_android_versions" />

        <uri-relative-filter-group android:allow="true">
          <data android:pathPattern="/.*"/>
        </uri-relative-filter-group>
    </intent-filter>
</activity>

<data android:path="/no_match_for_older_android_versions" /> ekleyerek, Android 14 ve önceki sürümlerde bu intent filtresinin gelen bağlantılarla eşleşmemesini sağlarken alanın, assetlinks.json kurallarınızdaki gelişmiş eşleştirme kurallarına göre Android 15 ve sonraki sürümlerde dinamik uygulama bağlantılarıyla kullanılmak üzere doğrulanmasına da izin vermiş olursunuz.

Manifestinizde belirli yol kurallarına (ör. android:pathPrefix) sahip uygulama bağlantılarınız varsa ve Android 15 ile sonraki sürümlerde Dinamik Uygulama Bağlantıları'nı kullanmaya başlamak istiyorsanız <uri-relative-filter-group> öğesini mevcut intent filtrelerinize doğrudan ekleyebilirsiniz.

Android 14 ve önceki sürümler <uri-relative-filter-group> öğesini yok saydığından mevcut uygulama bağlantılarınız, Android'in daha eski sürümlerini çalıştıran cihazlarda şu anki gibi çalışmaya devam eder.

Ancak Android 15 ve sonraki sürümlerin "karma" yapılandırmayı nasıl değerlendirdiğini dikkatlice göz önünde bulundurmanız gerekir:

  • İki katmanlı filtreleme: Android 15 ve sonraki sürümlerde sistem, amaç filtrelerini bir birleşim olarak değerlendirir. Bir URL, eski statik <data> etiketlerinizi veya <uri-relative-filter-group> dosyanızdaki geniş kapsamlı kuralları karşılıyorsa manifest kontrolünü geçer. URL bu ilk manifest kontrolünü geçtikten sonra sistem, assetlinks.json dosyanızda tanımlanan dinamik kuralları ikinci bir ayrıntılı filtreleme katmanı olarak uygular. Bu, sunucu tarafındaki JSON kurallarının, eşleşen URL'lerden hangisinin uygulamayı açacağını belirlediği anlamına gelir.

Karma yapılandırma örneği:

<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="www.example.com" />

    <!-- Legacy rule: Android 14 and lower use this. Android 15 and higher
         also use this. -->
    <data android:pathPrefix="/store" />

    <!--
      Dynamic rule: Android 14 and lower ignore this. Android 15 and higher
      evaluate this as a union between all paths and the configuration
      specified in the assetlinks.json file. Make sure to apply further
      refinements in the assetlinks.json file to prevent all URL paths from
      opening in the app.
    -->
    <uri-relative-filter-group android:allow="true">
        <data android:pathPrefix="/" />
    </uri-relative-filter-group>
</intent-filter>