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 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.
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.
// 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.
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.
// 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.
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.
| Karakteristik | Custom URL Scheme | Universal Link |
|---|---|---|
| Format | myapp://path | https://domain/path |
| Verifikasi | Tidak | apple-app-site-association |
| Keamanan | Rentan terhadap hijacking | Hanya pemilik domain |
| Fallback | Kesalahan | Situs di Safari |
| Versi iOS | iOS 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:
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.
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
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.
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.
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.
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.
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
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.
Baca juga