Web sitesi ilişkilendirmelerini ve dinamik kuralları yapılandırma

Uygulama Bağlantılarını desteklemek için assetlinks.json adlı bir Digital Asset Links JSON dosyası oluşturup web sitenizde iyi bilinen bir konumda yayınlamanız gerekir. Bu dosya, alanınızdaki bağlantıları işlemeye yetkili uygulamaları herkese açık olarak bildirir. Android cihazlar, derin bağlantılarınızı doğrulamak için bu dosyayı sunucunuzdan alır.

Android 15 ve sonraki sürümlerdeki dinamik uygulama bağlantıları için assetlinks.json dosyası, yol, parça ve sorgu parametreleri için kalıp eşleştiriciler gibi dinamik kural yapılandırmanızı tanımladığınız yerdir. Google hizmetlerinin yüklü olduğu Android 15 (API düzeyi 35) veya sonraki sürümlerin yüklü olduğu Android cihazlar, dosyayı düzenli olarak alır ve dinamik yapılandırmanızı uygulamanın manifest dosyasındaki statik yapılandırmayla birleştirir.

Bu kılavuzda, assetlinks.json dosyası hazırlama ve web sitenizde yayınlama adımları açıklanmaktadır. İsterseniz Play Deep Links aracı veya Android Studio App Links Assistant'tan assetlinks.json dosyası oluşturabilirsiniz. Daha fazla bilgi için Uygulama Bağlantıları geliştirici araçları başlıklı makaleyi inceleyin.

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ınlamanız gerekir. JSON dosyası, ilişkili uygulamaları tanımlamak için aşağıdaki alanları kullanır:

  • package_name: Uygulamanın build.gradle dosyasında beyan edilen uygulama kimliği.
  • sha256_cert_fingerprints: Uygulamanızın imzalama sertifikasının SHA256 parmak izleri. Java keytool'u kullanarak parmak izi oluşturmak için aşağıdaki komutu kullanabilirsiniz:

keytool -list -v -keystore my-release-key.keystore

  • 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. 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. Uygulamanız için Play Uygulama İmzalama'yı kullanıp kullanmadığınızı Play Console geliştirici hesabınızdaki Release > Setup > App signing bölümünde doğrulayabilirsiniz. Bu hizmeti kullanıyorsanız aynı sayfada uygulamanız için doğru Dijital 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ı içinde birden fazla uygulamayla ilişkilendirme bildirebilir. Aşağıdaki dosya listesinde, iki uygulamayla ayrı ayrı ilişkilendirme bildiren ve https://www.example.com/.well-known/assetlinks.json konumunda 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ı altındaki farklı kaynaklara ait bağlantıları işleyebilir. Örneğin, uygulama1, https://example.com/articles için bir intent filtresi bildirebilir ve uygulama2, https://example.com/videos için bir intent filtresi bildirebilir.

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 giriş, example.com ile app1 arasındaki ilişkilendirmeyi gösterir:

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 uygulama1 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"]
  }
}]

Dinamik kuralları yapılandırma

Android 15 ve sonraki sürümlerdeki dinamik uygulama bağlantıları, uygulamanızın manifestinde statik olarak tanımladığınız kurallarla birlikte çalışan sunucu tarafı derin bağlantı eşleştirme kurallarını kullanmanıza olanak tanır. assetlinks.json dosyanız, dinamik kuralları tanımladığınız yerdir. Bu bilgiyi eklemek isteğe bağlıdır.

Google hizmetlerinin yüklü olduğu Android 15 (API düzeyi 35) veya sonraki sürümlerin yüklü olduğu Android cihazlar, bu dosyayı sunucunuzdan düzenli olarak alır ve dinamik kurallar yapılandırmanızı uygulamanın manifest dosyasındaki statik yapılandırmayla birleştirir. Aşağıda, dinamik kurallar içeren bir assetlinks.json dosyası örneği verilmiştir:

[
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.app",
      "sha256_cert_fingerprints": [...]
    },
    "relation_extensions": {
      "delegate_permission/common.handle_all_urls": {
        "dynamic_app_link_components": [
          {"?": {"dl": "*"}},
          {"#": "app"},
          {"/": "/products/*"},
          {"/": "/shoes", "?": {"in_app": "true"}},
          {"/": "*", "exclude": true}
        ]
      }
    }
  }
]

Kodla ilgili önemli noktalar

  • Dinamik Uygulama Bağlantıları, dynamic_app_link_components adlı yeni bir Digital Asset Links ilişki uzantısı ekler. Dinamik kurallarınızı burada yapılandırabilirsiniz.
  • Dinamik kurallar; yol, parça ve sorgu parametreleri için kalıp eşleştiriciler içerebilir.
  • Eşleşen URL'lerin uygulamanızı açmaması için herhangi bir kalıp eşleştiriciyi hariç tutulan olarak da işaretleyebilirsiniz.
  • Bu örnekte yol ("/"), parça ("#") ve sorgu parametreleri ("?") için eşleştiricilerin yanı sıra hariç tutulan eşleştiriciler ("exclude") gösterilmektedir.
  • Dosyadaki alanlardan herhangi biri hatalı biçimlendirilmişse veya boşsa Android, dinamik kuralları siler ve cihaz, uygulamanın manifest dosyasında statik olarak tanımlanan kurallara geri döner.

Dinamik kurallar yalnızca uygulamanızın manifest dosyasında belirttiğiniz alan adları kapsamında geçerli olan kuralları belirtebilir. Aşağıdaki bilgilere bakın.

Dinamik kuralları bildirme

Dinamik uygulama bağlantıları, bir kural nesneleri dizisi içeren yeni bir dynamic_app_link_components relation uzantısını destekler. Her kural, uygulamanızı açacak yollar, parçalar ve sorgu parametreleri için kalıp eşleştiriciler kullanılarak tanımlanır. Eşleştiriciler, uygulamanızı açmamaları için ayrı ayrı hariç de tutulabilir. Bunların tümü isteğe bağlıdır.

  • Yol eşleştirme
    • Tuş: "/"
    • Değer: URL yolu için eşleşen ifade olan tek bir dize
  • Parça eşleştirme
    • Tuş: "#"
    • Değer: URL parçası için eşleşen ifade olan tek bir dize
  • Sorgu parametresi eşleştirme
    • Anahtar: "?"
    • Değer: URL sorgu parametrelerindeki anahtar/değer çiftleriyle eşleşecek sözlük.
    • Örneğin, {"?", {"dl": "*", "in_app":"true"} sözlüğü, "?in_app=true&dl=abc" sorgu dizesiyle eşleşir.
    • Sözlükteki anahtar/değer çiftlerinin sırası, sorgu dizesindeki çiftlerin sırasıyla eşleşmek zorunda değildir. Ayrıca, sözlüğün sorgu dizesindeki tüm anahtar/değer çiftleriyle eşleşmesi gerekmez ancak her sözlük girişi için bir eşleşme bulunmalıdır.
    • Örneğin, sözlük "?lang=en&in_app=true&tz=pst&dl=abc" sorgu dizesiyle de eşleşir ancak "?lang=en&tz=pst&dl=abc" sorgu dizesiyle eşleşmez.
  • Hariç tutulanlar
    • Anahtar: "exclude"
    • Değer: dynamic_app_link_components içinde tanımlanan her kural için isteğe bağlı doğru/yanlış değeri (örneğe bakın).

Aşağıdaki özel karakterleri kalıp eşleştiricilerde kullanabilirsiniz:

  • "*", kalıptaki joker karakterden sonraki karakter eşleşen dizede bulunana kadar sıfır veya daha fazla karakterle eşleşir.
  • "?" herhangi bir tek karakterle eşleşir
  • "?*" bir veya daha fazla karakterle eşleşir

Değerlerle ilgili başka karakter kısıtlaması yoktur.

Dinamik kuralları sıralama

Kuralların bildirilme sırası önemlidir. Android, eşleşme bulana kadar her kuralı sırayla değerlendirir.

Aşağıdaki örnekte, sıralamanın işleme sürecini nasıl etkileyebileceği gösterilmektedir. İlk kural tüm yollarla ("*") eşleşir ancak eşleşmeleri hariç tutar (exclude: true). Bu nedenle, tüm URL'lerin uygulamayı açması engellenir. Bu durumda, "/path1" yoluna izin veren ikinci kural hiçbir zaman değerlendirilmez.

dynamic_app_link_components: [
  {​"/": "*", exclude: true},
  {​"/": "/path1"}
]

Ancak sonraki örnekte "/path1" kuralı önce bildirildiği için önce değerlendirilir ve "/path1" ile eşleşen bir URL için uygulamayı açar. Uygulamanın açılmasını engelleyen tüm URL'leri hariç tutan ikinci kural, yalnızca ilk kural eşleşme sağlamazsa ikinci olarak değerlendirilir.

dynamic_app_link_components: [
  {​"/": "/path1"},
  {​"/": "*", exclude: true}
]

Dinamik kurallarınızı uygun şekilde kapsamlandırma

Android 15 ve sonraki sürümlerde Dinamik Uygulama Bağlantıları ile kullanılacak sunucu tarafı kurallarınızı tanımlarken, bu kuralların uygulama manifestinizde tanımlanan statik intent filtreleriyle birlikte çalışıp bunları tamamlayacak şekilde uygun kapsamda tanımlanması önemlidir.

assetlinks.json dosyasında tanımlanan dinamik kurallar yalnızca uygulamanızın AndroidManifest.xml dosyasında tanımladığınız ana makineler için kurallar belirtebilir. Dinamik kurallar, uygulama manifestinizde statik olarak bildirdiğiniz URL kurallarının kapsamını genişletemez.

Bu nedenle, dinamik ve statik kurallarınızda bu yaklaşımı kullanmanızı öneririz:

  • Uygulama manifestinizde, yalnızca şema ve alan adı bildirme gibi mümkün olan en geniş kapsamlı kurallar ayarlayın.
  • Yol düzeyinde yönlendirme gibi daha fazla iyileştirme için sunucu tarafı dinamik kurallardan yararlanın.

Bu ideal yapılandırmayla, uygulamanın manifest dosyasında belirlediğiniz geniş kapsam dahilinde kalacaklarını bilerek assetlinks.json dosyasına gerektiğinde dinamik olarak yeni uygulama bağlantısı yolları ekleyebilirsiniz.

Kurallarınızın düzgün şekilde işlenmesi için belirli bir site, ilişki ve uygulama ile ilgili ifadelerde yalnızca bir dynamic_app_link_components nesnesi bildirin.

  • Aynı site, ilişki ve uygulama için dynamic_app_link_components nesnesi bildiren birden fazla ifade olup olmadığını kontrol edin.
  • Tek bir ifadede tanımlanan birden fazla dynamic_app_link_components nesnesi olup olmadığını kontrol edin.

Bu gibi durumlarda Android, hangi dinamik kurallar yapılandırmasının kullanılacağını garanti etmez.

Dinamik kuralların önceki uygulama bağlantısı yapılandırmalarıyla uyumluluğu

App Links'i zaten destekliyorsanız Dynamic App Links desteğini doğrudan mevcut assetlinks.json dosyanıza ekleyebilirsiniz. Uygulama Bağlantılarınızı doğrulamak için kullanılan ilişki alanları aynı kalır ve dinamik kurallar için yeni ilişki uzantısı alanlarını başka herhangi bir değişiklik yapmadan ekleyebilirsiniz.

Android 14 (API düzeyi 34 veya önceki sürümler) yüklü Android cihazlar, dinamik kurallar için yeni ilişki uzantısı alanlarını yoksayar. Android 15 ve sonraki sürümlerin yüklü olduğu cihazlar ise bu kuralları manifest dosyasında tanımlanan kurallarınızla birleştirir.

JSON doğrulama dosyasını yayınlayın

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 test URL'leriyle (ör. yalnızca VPN ile erişilebilenler) yayınlamayın. Bu gibi durumlarda, geçici çözüm olarak derleme çeşitlerini yapılandırarak geliştirme derlemeleri için farklı bir manifest dosyası oluşturabilirsiniz.

Aşağıdaki ilgili kılavuzlara göz atın: