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şturmanız ve bunu web sitenizde bilinen bir konumda yayınlamanız gerekir. Bu dosya, alanınızın bağlantılarını 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 kullanıldığı 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ının nasıl hazırlanacağı ve web sitenizde nasıl yayınlanacağı açıklanmaktadır. İsterseniz Google Play Derin Bağlantılar aracından veya Android Studio App Links Assistant'tan bir 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 intent'lerini 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 izini oluşturmak için aşağıdaki komutu kullanabilirsiniz:

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

  • Bu alan, uygulamanızın hata ayıklama ve üretim derlemeleri gibi farklı sürümlerini desteklemek için kullanılabilecek birden fazla parmak izini destekler. Uygulamanız için Play Uygulama İmzalama'yı kullanıyorsanız yerel olarak keytool komutunu çalıştırarak oluşturulan sertifika parmak izi genellikle kullanıcıların cihazlarındakiyle eşleşmez. Uygulamanız için Google Play Uygulama İmzalama'yı kullanıp kullanmadığınızı Google Play Console geliştirici hesabınızda Release > Setup > App signing bölümünden doğrulayabilirsiniz. Kullanıyorsanız uygulamanız için doğru Digital Asset Links JSON snippet'ini de aynı sayfada 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ında birden fazla uygulamayla ilişkilendirme beyan edebilir. Aşağıdaki dosya listelemesinde, iki uygulamayla ayrı ayrı ilişkilendirme beyan eden ve https://www.example.com/.well-known/assetlinks.json adresinde bulunan bir ifade 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.

Birden fazla web sitesini tek bir uygulamayla 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 uygulama1 ile ilişkilendirilmesinin nasıl beyan edileceğine dair bir örnek gösterilmektedir. İlk listede, example.com'un uygulama1 ile ilişkilendirilmesi gösterilmektedir:

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ı, uygulama manifestinizde 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. Dinamik kuralları assetlinks.json dosyanızda tanımlarsınız. 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 kullanıldığı Android cihazlar, bu dosyayı düzenli olarak sunucunuzdan alır ve dinamik kural 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ı, dinamik kurallarınızı yapılandırdığınız dynamic_app_link_components adlı yeni bir Digital Asset Links ilişki uzantısı ekler.
  • 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ç tutuldu olarak da işaretleyebilirsiniz.
  • Bu örnekte yol ("/"), parça ("#") ve sorgu parametreleri ("?") için eşleştirici örnekleri ve hariç tutulan eşleştiriciler ("exclude") gösterilmektedir.
  • Dosyadaki alanlardan herhangi biri hatalı biçimlendirilmiş 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 tanımladığınız alan adları kapsamında geçerli olan kuralları belirtebilir. Dinamik kuralları bildirme bölümüne bakın.

Dinamik kuralları bildirme

Dinamik uygulama bağlantıları, kural nesneleri dizisi içeren yeni bir dynamic_app_link_components ilişki 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 dize
  • Parça eşleştirme
    • Tuş: "#"
    • Değer: URL parçası için eşleşen ifade olan tek dize
  • Sorgu parametresi eşleştirme
    • Tuş: "?"
    • Değer: URL sorgu parametrelerindeki anahtar/değer çiftlerini eşleştirmek için 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ının, sorgu dizesindeki çiftlerin sırasıyla eşleşmesi gerekmez. 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
    • "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).

Kalıp eşleştiricilerde şu özel karakterleri kullanabilirsiniz:

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

Değerler için 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şlemeyi nasıl etkileyebileceği gösterilmektedir. İlk kural tüm yollarla ("*") eşleşir ancak eşleşmeleri hariç tutar (exclude: true). Yani tüm URL'lerin uygulamayı açmasını engeller. Bu durumda, "/path1"e izin veren ikinci kural hiçbir zaman değerlendirilmez.

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

Ancak sonraki örnekte "/path1" kuralı önce tanımlandığı için önce değerlendirilir ve "/path1" ile eşleşen bir URL için uygulamayı açar. Tüm URL'lerin uygulamayı açmasını engelleyen ikinci kural, yalnızca ilk kural eşleşmediğinde ikinci olarak değerlendirilir.

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

Bildirilen bileşenler listesinde eşleşme bulunamazsa URL, uygulamayı açmaz. Aşağıdaki örnekte, yolların hiçbiri "/path3" ile eşleşmediğinden cihaz bu yolu hariç tutulan yol olarak değerlendirir.

dynamic_app_link_components: [
  {"/": "/path1"},
  {"/": "/path2"}
]

dynamic_app_link_components özelliğinin yalnızca belirli URL bölümlerini hariç tutmasını ancak diğer tüm bölümlere izin vermesini istiyorsanız bu davranış önemlidir. Aşağıdaki örnekte, kalan tüm yollara izin veren son kuralın atlanması, tüm URL'lerin uygulamadan hariç tutulacağı anlamına gelir.

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

Dinamik kurallarınızın kapsamını doğru şekilde belirleme

Android 15 ve sonraki sürümlerde Dinamik Uygulama Bağlantıları ile kullanılacak sunucu tarafı kurallarınızı tanımlarken, uygulama manifestinizde beyan edilen statik intent filtreleriyle çalışıp bunları tamamlayacak şekilde uygun şekilde kapsamlandırmanız ö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 kural belirtebilir. Dinamik kurallar, uygulama manifest dosyanızda statik olarak beyan ettiğ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ını beyan etmek gibi mümkün olan en geniş kapsamlı kuralları belirleyin.
  • Yol düzeyinde yönlendirme gibi daha ayrıntılı düzenlemeler için sunucu tarafı dinamik kurallardan yararlanın.

Bu ideal yapılandırmayla, assetlinks.json dosyasına gerektiğinde dinamik olarak yeni Uygulama Bağlantıları yolları ekleyebilirsiniz. Bu yollar, uygulama manifestinde belirlediğiniz geniş kapsama uygun olur.

Kurallarınızın doğru şekilde işlenmesi için belirli bir site, ilişki ve uygulama ile ilgili ifadelerde yalnızca bir dynamic_app_link_components nesnesi tanımlayın.

  • 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 kural yapılandırmasının kullanılacağını garanti etmez.

Dinamik kuralların önceki Uygulama Bağlantıları yapılandırmalarıyla uyumluluğu

Uygulama Bağlantıları'nı zaten destekliyorsanız Dinamik Uygulama Bağlantıları 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 bir değişiklik yapmadan ekleyebilirsiniz.

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

JSON doğrulama dosyasını yayınlama

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ı, application/json içerik türüyle sunuluyor.
  • Uygulamanızın intent filtreleri HTTPS'yi veri şeması olarak tanımlasa da tanımlamasa da assetlinks.json dosyasına 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 barındırılan alan adı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 (ör. yalnızca VPN ile erişilebilen) test URL'leriyle yayınlamayın. Bu gibi durumlarda, geliştirme derlemeleri için farklı bir manifest dosyası oluşturmak üzere derleme değişkenlerini yapılandırmak geçici bir çözüm olabilir.

Aşağıdaki ilgili kılavuzları inceleyin: