Appy

Ücretsiz araç

AASA ve assetlinks.json oluşturucu

iOS Universal Links için apple-app-site-association, Android App Links için assetlinks.json dosyasını oluşturun. Uygulama bilgilerinizi girin, ardından yüklemeye hazır dosyayı kopyalayın ya da indirin.

  • Ücretsiz, hesap gerekmez
  • Tarayıcınızda çalışır
  • Apple’ın güncel components biçimi

Dosyalarınız hazır mı? Doğrulayıcıyla kontrol edin

Uygulamalar

Bu alan adındaki linkleri açması gereken her uygulamayı ekleyin. Her biri appIDs içinde bir kayıt olur.

  1. Uygulama 1

    10 karakter; Apple Developer hesabınızda Membership details altında.

    Xcode’da uygulama target’ınızdan, örneğin com.example.app.

Uygulamayı açan yollar

Kurallar yukarıdan aşağıya kontrol edilir ve ilk eşleşen kazanır; bu yüzden hariç tutma kurallarını geniş kuralların üstüne koyun. * herhangi sayıda karakterle, ? tam bir karakterle eşleşir.

  1. Kural 1

    & ile birleştirilmiş ad=değer çiftleri

Diğer servisler

Dosyanız

apple-app-site-association

Örnek. Bilgilerinizi girdiğinizde değişir.

{
  "applinks": {
    "details": [
      {
        "appIDs": [
          "ABCDE12345.com.example.app"
        ],
        "components": [
          {
            "/": "/*"
          }
        ]
      }
    ]
  }
}

Tarayıcınızda oluşturulur. Hiçbir yere gönderilmez.

Nerede yayınlanmalı

  1. Dosyayı .json uzantısı olmadan https://alan-adiniz/.well-known/apple-app-site-association adresine yükleyin.
  2. Geçerli bir sertifikayla HTTPS üzerinden, yönlendirme olmadan doğrudan 200 ile sunun.
  3. Content-Type: application/json başlığını gönderin.
  4. Linklerinizdeki her host’ta tekrarlayın: example.com ve www.example.com için ayrı dosya ve ayrı applinks: kaydı gerekir.
  5. Apple CDN’i yeni dosyayı 24 saat içinde alır. Bu sürede ?mode=developer ile test edin.
Bir alan adını doğrulayıcıyla kontrol edin

Dosyaları kendiniz barındırmak istemiyor musunuz? Akıllı linkler ücretsizdir; Enterprise planda Appy iki dosyayı da uygulamanızın link alan adında sunar.

Ücretsiz link oluşturun

Nasıl birleşir

İki dosya, karşılıklı bir doğrulama

Universal Links ve App Links, uygulamanızı yalnızca iki taraf birbirine kefil olduğunda açar. Uygulama alan adını, alan adındaki dosya da uygulamayı belirtir. İki yarıdan biri eksikse link bunun yerine web sitenizi açar.

iOS uygulaması

Associated Domains entitlement’ı

applinks:example.com

Alan adınız

example.com/.well-known/

  • apple-app-site-association

    App ID’yi listeler: Team ID ve bundle ID

    ABCDE12345.com.example.app
  • assetlinks.json

    Paket adını ve SHA-256 parmak izini listeler

    com.example.app · 14:6D:E9:…

Android uygulaması

autoVerify içeren intent filter

android:autoVerify="true"android:host="example.com"

İki yarı eşleşiyor: link uygulamayı açar

Bir şey eksik: link web sitenizi açar

iOS dosyayı uygulama yüklendiğinde Apple CDN’i üzerinden alır ve yaklaşık haftada bir güncellemeleri kontrol eder. Android doğrulamayı uygulama yüklendiğinde yapar. İkisi de dokunma anında alan adınıza bakmaz.

Alan alan

Dosyalardaki her anahtar ne anlama gelir

İki dosya da düz JSON’dır. Oluşturucunun yazdığı anahtarlar ve bilmeye değer isteğe bağlı olanlar aşağıda.

apple-app-site-association

applinks
Universal Links servisi. Hangi URL’nin hangi uygulamayı açacağına dair her şey bunun içinde durur.
details
Her biri bir uygulama grubunu bir URL kuralları grubuyla eşleştiren kayıtlar dizisi. Farklı uygulamalar farklı yolları işliyorsa birden fazla kayıt kullanın.
appIDs
<Team ID>.<bundle ID> biçimindeki app ID’ler, örneğin ABCDE12345.com.example.app. Her uygulamanın Associated Domains entitlement’ında da bu alan adı yer almalıdır.
components
Sırayla kontrol edilen URL kuralları. İlk eşleşen kural uygulamanın açılıp açılmayacağına karar verir.
/
URL yolu için bir desen, örneğin /products/*. Yazmazsanız her yol eşleşir.
?
Eşleşmesi gereken sorgu parametreleri, sözlük olarak. {"ref": "?*"} boş olmayan bir ref parametresi ister.
#
# işaretinden sonraki fragment için bir desen.
exclude
Eşleşen URL’leri web sitesinde tutmak için true yapın. Bu kuralları daha geniş kuralların üstüne koyun.
comment
Dosyayı okuyan insanlar için bir not. iOS bunu yok sayar.
webcredentials
İsteğe bağlı. Bu web sitesi için kaydedilmiş parolaları otomatik doldurmayla kullanabilecek uygulamaları listeler.
appclips
İsteğe bağlı. Bu alan adının açabileceği App Clip’leri listeler.

* herhangi sayıda karakterle, ? tam bir karakterle, ?* en az bir karakterle eşleşir. "caseSensitive": false eklemediğiniz sürece eşleşme büyük/küçük harfe duyarlıdır.

assetlinks.json

[ ]
Dosya, tek bir ifade (statement) içerse bile ifadelerden oluşan bir JSON dizisidir.
relation
delegate_permission/common.handle_all_urls uygulamanın bu sitenin linklerini açmasına izin verir. delegate_permission/common.get_login_creds giriş bilgilerinin paylaşımını ekler.
target
İfadenin ilgili olduğu uygulama.
namespace
Android uygulaması için her zaman android_app.
package_name
Uygulamanın applicationId değeri, örneğin com.example.app.
sha256_cert_fingerprints
Uygulamayı imzalayan sertifikaların SHA-256 parmak izleri; iki nokta üst üsteyle ayrılmış büyük harfli çiftler halinde. Kullanıcıların yüklediği build’leri imzalayan her anahtarı listeleyin.
relation_extensions
İsteğe bağlı, Android 15 ve sonrası. İçindeki dynamic_app_link_components, Apple’ın components yapısına benzer yol kuralları ekler. Eski sürümler bunu yok sayar.

Eski paths biçimi

iOS 13’ten önce her kayıtta tek bir appID, hariç tutmaların başına NOT eklenen bir paths dizisi vardı ve dosyada boş bir apps dizisi gerekiyordu. iOS 13 ve sonrası appIDs ile components anahtarlarını okur. Oluşturucu yalnızca yeni biçimi yazar. Hâlâ iOS 12 destekliyorsanız eski anahtarları aynı kayda ekleyin.

Eski, iOS 12 ve öncesi
{
  "applinks": {
    "apps": [],
    "details": [{
      "appID": "ABCDE12345.com.example.app",
      "paths": ["NOT /help/website/*", "/buy/*"]
    }]
  }
}
Yeni, iOS 13 ve sonrası
{
  "applinks": {
    "details": [{
      "appIDs": ["ABCDE12345.com.example.app"],
      "components": [
        {"/": "/help/website/*", "exclude": true},
        {"/": "/buy/*"}
      ]
    }]
  }
}

Sık yapılan hatalar

Doğru görünen bir dosya neden yine de çalışmaz

JSON geçerli olabilir, linkler yine de web sitesini açabilir. Başka bir şeye bakmadan önce bu yedi noktayı kontrol edin.

  1. 01iOS

    Yanlış Team ID ön eki

    Dosya yükleniyor ama iOS uygulamayı hiç açmıyor.

    Çözüm

    Sürümü imzalayan hesabın Membership details altındaki Team ID’sini kullanın. Sayısal App Store ID’sini, bir Key ID’yi ya da uygulama sizin hesabınızdan yayınlanıyorsa ajansın ekibini değil.

    iOS ve Android için kapsamlı Universal Links rehberi
  2. 02Android

    Play App Signing anahtarı yerine yükleme anahtarı

    Kendi build’leriniz uygulamayı açıyor, Google Play’den yüklenen sürüm tarayıcıyı açıyor.

    Çözüm

    Google, dağıttığı uygulamaları uygulama imzalama anahtarıyla imzalar. O anahtarın SHA-256 değerini Play Console’da App integrity bölümünden kopyalayın; yükleme anahtarını yalnızca onunla imzalanmış build’ler paylaşıyorsanız listede tutun.

    Android App Links Doğrulanmıyor: adb ile Beş Dakikalık Teşhis
  3. 03iOS + Android

    Dosya bir yönlendirmenin arkasında

    Adres tarayıcıda sorunsuz açılıyor ama doğrulama başarısız oluyor.

    Çözüm

    Apple ve Android tam adreste doğrudan 200 bekler. /.well-known/ yolunu çıplak alan adından www’ye, www’den çıplak alan adına ve dile göre yapılan yönlendirmelerin dışında tutun.

    Universal Links Safari açıyor mu? AASA, App Links, redirect ve header sorunlarını düzeltin
  4. 04iOS + Android

    Yanlış içerik tipi ya da JSON yerine HTML

    Dosya orada ama platform onu yok sayıyor.

    Çözüm

    İki dosyayı da application/json olarak sunun. Sunucular uzantısız AASA dosyasını çoğu zaman application/octet-stream olarak gönderir; bazı barındırma hizmetleri de giriş sayfası ya da bot kontrolü döndürür.

    Universal Links Safari açıyor mu? AASA, App Links, redirect ve header sorunlarını düzeltin
  5. 05iOS + Android

    www host’unu unutmak

    example.com linkleri uygulamayı, www.example.com linkleri web sitesini açıyor.

    Çözüm

    Her host ayrı kontrol edilir. Dosyayı ikisine de yükleyin, ikisini de Associated Domains’e ekleyin ve Android intent filter’larınızda ikisini de tanımlayın.

    iOS ve Android için kapsamlı Universal Links rehberi
  6. 06iOS

    Her şeyi yakalayan kuralın altında kalan bir hariç tutma

    Web sitesinde kalmasını istediğiniz sayfalar uygulamayı açıyor.

    Çözüm

    İlk eşleşen kural kazanır. exclude kurallarını /* kuralının üstüne taşıyın; oluşturucudaki Appy örneği de böyle yapar.

  7. 07iOS

    .json uzantısı ya da yanlış klasör

    iOS’un istediği adreste hiçbir şey bulunmuyor.

    Çözüm

    Dosyanın adı uzantısız apple-app-site-association olmalı ve /.well-known/ içinde durmalı. Yukarıdaki indirme düğmesi bu adı zaten kullanır.

Barındırmayla uğraşmayın

İki dosyayı da Appy sizin için sunsun

Enterprise planda uygulamanız kendi link alan adını alır; Appy, apple-app-site-association ve assetlinks.json dosyalarını kaydettiğiniz Team ID, bundle ID, paket adı ve parmak izlerinden oluşturup bu alan adında barındırır. Akıllı linklerin kendisi ücretsizdir, deep link ise Pro planla gelir.

  • Ücretsiz plan
  • Kredi kartı gerekmez
  • Her planda sınırsız tıklama
  • İptal etseniz de linkler çalışır

Sık sorulan sorular

apple-app-site-association dosyası nedir?

Alan adınızda duran ve iOS’a hangi uygulamaların hangi URL’lerinizi Universal Link olarak açabileceğini söyleyen bir JSON dosyasıdır. https://alanadiniz/.well-known/apple-app-site-association adresinde, uzantısız durur; app ID’leri (Team ID ile bundle ID) ve her birinin işlediği URL kurallarını listeler.

assetlinks.json nedir?

Google’ın Digital Asset Links yapısına dayanan Android karşılığıdır. https://alanadiniz/.well-known/assetlinks.json adresinde durur; linklerinizi açmasına izin verilen uygulamanın paket adını ve imzalama sertifikası parmak izlerini belirtir. Android bu dosyayı uygulama yüklendiğinde kontrol eder ve linklerinizi ancak o zaman doğrulanmış App Links olarak kabul eder.

Oluşturulan dosyaları nereye yüklemeliyim?

Linklerde kullandığınız her host’un kökündeki /.well-known/ klasörüne. İki dosya da HTTPS üzerinden, yönlendirme olmadan doğrudan 200 ile ve application/json içerik tipiyle yüklenmelidir. AASA dosyasının uzantısı olmadığı için statik barındırma hizmetlerinde çoğu zaman bir header kuralı gerekir.

Team ID ve bundle ID’mi nerede bulurum?

Team ID, Apple Developer hesabınızda Membership details altındadır. Bundle ID, Xcode’da uygulama target’ınızın General sekmesindedir. İkisi birlikte ABCDE12345.com.example.app gibi bir app ID oluşturur.

assetlinks.json için SHA-256 parmak izini nasıl alırım?

Uygulamanızı Google Play imzalıyorsa Play Console’u açın, App integrity bölümüne gidin ve uygulama imzalama anahtarı sertifikasının SHA-256 değerini kopyalayın. Kendi tuttuğunuz anahtarlar için keytool -list -v -keystore my-release-key.keystore ya da ./gradlew signingReport çalıştırın. Oluşturucu değeri iki nokta üst üsteyle ya da onsuz kabul eder.

AASA dosyasında paths mi, components mi kullanmalıyım?

components kullanın. Apple onu iOS 13 ile getirdi; sorgu parametrelerini, fragment’leri, hariç tutmaları ve açıklamaları destekler. Eski paths dizisi yalnızca hâlâ iOS 12 ya da öncesini destekliyorsanız gerekir; bu durumda ikisini aynı kayda koyun.

Tek dosya birden fazla uygulamayı kapsayabilir mi?

Evet. AASA dosyasında her app ID’yi appIDs içinde listeleyin ya da uygulamalar farklı yolları işliyorsa ayrı details kayıtları ekleyin. assetlinks.json’da her paket için diziye bir ifade ekleyin. Oluşturucu birden fazla iOS uygulamasını destekler; ikinci bir Android paketi için ifadeyi kopyalayıp paket adını ve parmak izlerini değiştirin.

Değişikliklerin cihazlara ulaşması ne kadar sürer?

Apple’a göre CDN’i AASA dosyanızı 24 saat içinde ister, cihazlar da yüklemeden sonra yaklaşık haftada bir güncellemeleri kontrol eder. Android doğrulamayı uygulama yüklendiğinde yapar; test cihazında adb shell pm verify-app-links --re-verify com.example.app kontrolü yeniden çalıştırır.

AASA dosyasını imzalamam gerekir mi?

Hayır. Dosyayı TLS sertifikanızla imzalamak yalnızca iOS 8’de gerekiyordu. iOS 9’dan bu yana Apple’ın beklediği, HTTPS üzerinden sunulan düz bir JSON dosyasıdır.

Girdiğim bilgiler Appy’ye gönderiliyor mu?

Hayır. Dosyalar tarayıcınızda çalışan kodla oluşturulur; yazdığınız hiçbir şey yüklenmez ya da saklanmaz. Doğrulayıcı farklı çalışır: çalıştırdığınızda dosyaları alan adınızdan çeker.