Universal Link — apa itu, prinsip kerja dan konfigurasi

Penulis: IT Sectr Diterbitkan: 2026-05-14 Waktu membaca: 9 mnt

Universal Link adalah mekanisme Apple (iOS 9+) yang memungkinkan tautan web dibuka langsung di aplikasi, melewati Safari. Jika aplikasi tidak terinstal, tautan terbuka dengan mulus di browser. Istilah ini diperkenalkan oleh Apple pada tahun 2015 di WWDC sebagai bagian dari Handoff dan ekosistem Continuity. Menurut Apple Developer, Universal Link memberikan pengalaman pengguna yang seragam antara web dan aplikasi native tanpa dialog pemilihan.

Poin Utama

  • Universal Link — tautan https standar yang membuka aplikasi (iOS 9+) atau situs (fallback)
  • apple-app-site-association — file JSON di server yang mengonfirmasi hubungan domain dengan aplikasi
  • Keamanan — hanya pemilik domain yang dapat mengasosiasikan tautan, menghilangkan penyadapan skema
  • URL Tunggal — satu tautan berfungsi sebagai halaman web dan sebagai pintu masuk ke aplikasi
  • Handoff dan Spotlight — Universal Link terintegrasi dengan pencarian Apple dan transfer antar perangkat

Universal Link adalah tautan HTTPS standar berbentuk https://example.com/page yang saat diklik dari perangkat iOS membuka aplikasi yang terinstal, bukan Safari. Perbedaan utama dengan Custom URL Scheme: Universal Link tidak memerlukan registrasi skema khusus (myapp://) — menggunakan domain biasa. Ini menghilangkan masalah URL Scheme hijacking, di mana aplikasi mana pun dapat mendaftarkan skema yang sama.

Apple memperkenalkan Universal Link di WWDC 2015 dalam kerangka iOS 9. Mekanisme ini menjadi bagian dari ekosistem Handoff dan Spotlight: Universal Link tidak hanya berfungsi di browser, tetapi juga di hasil pencarian Spotlight, Mail, Messages, dan aplikasi sistem lainnya. Selain itu, Universal Link didukung di watchOS dan macOS — pengguna dapat membuka aplikasi di iPhone melalui tautan di Mac.

Keunggulan utama: URL Tunggal. Pengembang tidak mengelola dua tautan berbeda (satu untuk web, satu untuk aplikasi). Universal Link adalah tautan https yang sama. Jika aplikasi terinstal — aplikasi yang terbuka. Jika tidak — tautan yang sama terbuka di Safari sebagai halaman web biasa. Ini memberikan fallback ideal tanpa kehilangan lalu lintas.

Mekanisme Universal Link terdiri dari tiga tahap: verifikasi asosiasi, pemrosesan tautan, dan fallback ke browser. Setiap tahap sangat penting untuk pengoperasian yang benar. Jika asosiasi tidak dikonfigurasi, iOS memperlakukan tautan sebagai transisi biasa ke Safari. Mari kita lihat setiap tahap secara detail.

Verifikasi Asosiasi (Association Verification)

Pada klik pertama pada tautan, iOS mengunduh file apple-app-site-association dari server di alamat https://example.com/.well-known/apple-app-site-association. File berisi JSON dengan identifikasi Team ID dan Bundle ID aplikasi, serta daftar jalur yang harus dibuka oleh aplikasi. iOS menyimpan file ini dalam cache dan secara berkala memeriksa keaktualannya (saat memperbarui aplikasi, memulai ulang perangkat).

File JSON apple-app-site-association harus dapat diakses melalui HTTPS tanpa pengalihan. Server harus mengembalikan Content-Type: application/json. Penting: file tidak memiliki ekstensi .json — iOS mencarinya secara ketat di jalur /.well-known/apple-app-site-association. Apple juga merekomendasikan untuk menambahkan dukungan Universal Link di CDN dan memeriksa bahwa file tidak diblokir oleh robots.txt.

json
// apple-app-site-association — konfigurasi minimal
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAMID.com.example.app",
                "paths": ["/product/*", "/profile/*", "/search"]
            }
        ]
    }
}

appID dibentuk sebagai Team ID + Bundle ID (TEAMID.com.example.app). paths — array pola URL yang harus diproses oleh aplikasi. Dapat menggunakan *, ? dan notasi NOT: ["NOT /admin/*", "/product/*"]. Jalur diperiksa dalam urutan pencacahan: kecocokan pertama menentukan perilaku. Jika jalur tidak cocok — tautan terbuka di Safari.

Pemrosesan Tautan (Link Handling)

Setelah verifikasi asosiasi berhasil, iOS meneruskan tautan ke aplikasi. Pemrosesan dilakukan di AppDelegate melalui metode application(_:continue:restorationHandler:) untuk NSUserActivity atau di SceneDelegate melalui scene(_:continue:). Pengembang menerima objek NSUserActivity dengan tipe NSUserActivityTypeBrowsingWeb, mengekstrak URL, dan bernavigasi ke layar yang sesuai.

swift
// Pemrosesan Universal Link di AppDelegate
func application(
    _ application: UIApplication,
    continue userActivity: NSUserActivity,
    restorationHandler: @escaping UIUserActivityRestorationHandler
) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let url = userActivity.webpageURL
    else { return false }

    // Navigasi ke layar sesuai URL
    DeepLinkRouter.navigate(to: url)
    return true
}

DeepLinkRouter dalam contoh di atas adalah kelas khusus yang mengurai URL dan memanggil koordinator navigasi yang sesuai. Untuk SwiftUI, pemrosesan dilakukan melalui metode onOpenURL atau pengubah environment(\.openURL). Penting untuk memproses tidak hanya peluncuran latar depan (foreground), tetapi juga kasus ketika aplikasi belum berjalan (cold start): Universal Link dalam kasus ini membuka aplikasi melalui opsi peluncuran.

Fallback ke Browser (Browser Fallback)

Jika aplikasi tidak terinstal, iOS secara otomatis membuka Universal Link di Safari. Ini adalah perbedaan utama dengan Custom URL Scheme: pengguna tidak melihat kesalahan. Fallback adalah halaman web standar dari domain yang sama. Pengembang dapat menempatkan di halaman ini tautan ke App Store, informasi produk, atau konten alternatif.

Penting: fallback tidak dapat disesuaikan di tingkat iOS. iOS hanya membuka URL di Safari. Untuk menampilkan konten yang berbeda kepada pengguna dengan aplikasi terinstal dan tidak terinstal, gunakan Smart App Banner (tag meta untuk Safari yang menyarankan membuka aplikasi) atau deteksi instalasi aplikasi melalui JavaScript. Apple juga menyediakan SKAdNetwork untuk atribusi instalasi melalui Universal Link.

Universal Link dan Deep Link tradisional (Custom URL Scheme) memecahkan tugas yang sama, tetapi berbeda secara fundamental dalam arsitektur dan keamanan. Custom URL Scheme — protokol khusus (myapp://) yang didaftarkan di Info.plist. Aplikasi mana pun dapat mendaftarkan skema yang sama (myapp://), dan iOS tidak dapat menentukan mana yang "asli". Ini disebut URL Scheme hijacking.

Universal Link menyelesaikan masalah hijacking melalui verifikasi domain. Hanya pemilik domain yang dapat menempatkan apple-app-site-association di servernya, mengonfirmasi hubungan dengan Bundle ID tertentu. Dua aplikasi tidak dapat mendaftarkan satu Universal Link: jika terjadi konflik, iOS memberikan prioritas kepada aplikasi yang terinstal terakhir atau membuka Safari.

Perbedaan lain: Fallback. Custom URL Scheme tidak memiliki fallback — jika aplikasi tidak terinstal, browser menunjukkan kesalahan. Universal Link membuka situs. URL tunggal berarti nilai SEO tautan tetap dipertahankan (tautan diindeks oleh Google), dan pengguna dengan perangkat apa pun menerima konten yang relevan. Universal Link adalah langkah evolusioner dari deep link ke unified link.

KarakteristikCustom URL SchemeUniversal Link
Formatmyapp://pathhttps://domain/path
VerifikasiTidakapple-app-site-association
KeamananRentan terhadap hijackingHanya pemilik domain
FallbackKesalahanSitus di Safari
Versi iOSiOS 3+iOS 9+

Konfigurasi Universal Link mencakup bagian server dan klien. Bagian server — menempatkan file apple-app-site-association di alamat https://domain/.well-known/apple-app-site-association. Bagian klien — mendaftarkan domain di Associated Domains di Xcode (Capabilities → Associated Domains → applinks:example.com). Setelah itu, aplikasi secara otomatis menerima semua Universal Link untuk domain yang ditentukan.

Langkah-langkah konfigurasi:

  1. Buat apple-app-site-association dengan appID yang benar (TeamID.BundleID) dan paths
  2. Tempatkan file di server pada jalur /.well-known/ tanpa ekstensi .json
  3. Periksa aksesibilitas: curl https://domain/.well-known/apple-app-site-association
  4. Tambahkan domain di Associated Domains (Xcode Capabilities)
  5. Implementasikan pemrosesan melalui NSUserActivity (AppDelegate atau SceneDelegate)
  6. Uji pada perangkat nyata (simulator tidak memverifikasi asosiasi)

Debugging Universal Link — sakit kepala umum bagi pengembang iOS. Penyebab utama tautan tidak berfungsi: file apple-app-site-association tidak dapat diakses melalui HTTPS, appID salah, Content-Type bukan application/json, pengalihan dari jalur /.well-known, cache versi lama (reset melalui Settings → Developer → Associated Domains Development). Apple menyediakan alat "Validation Checker" di Apple Developer Console untuk menguji asosiasi.

Branch dan platform MMP lainnya menyederhanakan konfigurasi Universal Link: mereka menghasilkan apple-app-site-association secara otomatis dan menghostingnya di domain mereka sendiri. Pengembang cukup menambahkan domain Branch ke Associated Domains dan mengintegrasikan SDK. Ini sangat nyaman bagi startup yang tidak memiliki infrastruktur server sendiri untuk menghosting file AASA.

Batasan dan Kompatibilitas

Universal Link memiliki beberapa batasan. Pertama: file apple-app-site-association harus dapat diakses secara ketat melalui HTTPS (HTTP tidak didukung). Kedua: tautan harus mengarah ke domain yang sama yang ditentukan di Associated Domains. Universal Link lintas domain tidak berfungsi — untuk setiap domain diperlukan entri terpisah di Capabilities dan file AASA terpisah. Ketiga: Universal Link tidak berfungsi di WKWebView — hanya di Safari dan komponen sistem.

Kompatibilitas: iOS 9.0+ (Universal Link), watchOS 6.0+ (Handoff Universal Link), macOS 10.15+ (Catalyst dan aplikasi Mac). Di versi iOS yang lebih lama, tautan terbuka di Safari. Ini berarti pada iOS 8 (kurang dari 1% perangkat) Universal Link tidak akan berfungsi. Disarankan untuk mendukung Custom URL Scheme sebagai fallback untuk perangkat lama, jika audiens mencakup pengguna dengan versi usang.

Perubahan iOS 16+: Apple meningkatkan pemrosesan Universal Link untuk SwiftUI. Pengubah baru environment(\.openURL) muncul dengan kemampuan pemrosesan yang ditunda. iOS 16 juga memungkinkan membuka Universal Link di aplikasi bahkan melalui SFSafariViewController. Untuk pengguna iOS 16, disarankan untuk sepenuhnya beralih ke pemrosesan Universal Link di SwiftUI, menjaga kode AppDelegate hanya untuk kompatibilitas mundur.

Pertanyaan yang Sering Diajukan

Apa perbedaan Universal Link dengan Custom URL Scheme?

Universal Link menggunakan HTTPS-URL standar dan diverifikasi melalui file di server. Custom URL Scheme menggunakan protokol khusus (myapp://) tanpa verifikasi, yang membuatnya rentan terhadap penyadapan oleh aplikasi lain yang mendaftarkan skema yang sama.

Di mana menempatkan apple-app-site-association?

File ditempatkan di root server HTTPS di jalur /.well-known/apple-app-site-association (tanpa ekstensi .json). Server harus mengembalikan Content-Type: application/json. Penting: tidak ada pengalihan, file harus dapat diakses langsung.

Mengapa Universal Link tidak membuka aplikasi?

Penyebab utama: Team ID atau Bundle ID salah di file AASA, file tidak dapat diakses melalui HTTPS, pengalihan, Content-Type salah, cache versi lama. Periksa melalui Developer → Associated Domains Development dan reset cache dengan memulai ulang perangkat.

Bisakah Universal Link digunakan tanpa situs web?

Tidak — Universal Link memerlukan server HTTPS tempat apple-app-site-association ditempatkan. Tanpa domain, Universal Link tidak berfungsi. Alternatif: Custom URL Scheme (kurang aman) atau layanan pihak ketiga (Branch, Firebase) dengan domain sendiri.

Apakah Universal Link berfungsi di Android?

Tidak — Universal Link adalah teknologi eksklusif Apple untuk iOS, iPadOS, watchOS, dan macOS. Di Android, padanannya disebut App Link (Android 6.0+), yang menggunakan Digital Asset Links (assetlinks.json) sebagai pengganti apple-app-site-association.

Kesimpulan

  • Universal Link — tautan https yang membuka aplikasi di iOS 9+ atau situs di Safari sebagai fallback
  • apple-app-site-association — file JSON di server yang memverifikasi hubungan domain dengan aplikasi
  • Keamanan — tidak seperti Custom URL Scheme, Universal Link dilindungi dari penyadapan oleh aplikasi pihak ketiga
  • URL Tunggal — satu tautan berfungsi untuk pengguna yang telah dan belum menginstal aplikasi
  • Handoff dan Spotlight — Universal Link terintegrasi dengan ekosistem Apple Continuity
  • Konfigurasi mencakup bagian server (file AASA) dan bagian klien (Associated Domains + NSUserActivity)
  • Pengujian hanya pada perangkat nyata — simulator tidak memverifikasi asosiasi domain

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga