Universal Link Apple (iOS 9+) mexanizmi bo'lib, veb-havolalarni Safari-ni chetlab o'tib, to'g'ridan-to'g'ri ilovada ochish imkonini beradi. Agar ilova o'rnatilmagan bo'lsa, havola muammosiz brauzerda ochiladi. Bu atama Apple tomonidan 2015-yilda WWDC da Handoff va Continuity ekotizimining bir qismi sifatida kiritilgan. Apple Developer ma'lumotlariga ko'ra, Universal Link tanlash dialog oynalarisiz veb va native ilova o'rtasida yagona foydalanuvchi tajribasini ta'minlaydi.
Asosiy fikrlar
Universal Link https://example.com/page ko'rinishidagi standart HTTPS-havola bo'lib, iOS qurilmasidan bosilganda Safari o'rniga o'rnatilgan ilovani ochadi. Custom URL Scheme-dan asosiy farqi: Universal Link maxsus sxema (myapp://) ro'yxatdan o'tkazishni talab qilmaydi — oddiy domendan foydalaniladi. Bu har qanday ilova bir xil sxemani ro'yxatdan o'tkazishi mumkin bo'lgan URL Scheme hijacking muammosini bartaraf qiladi.
Apple Universal Link-ni WWDC 2015 da iOS 9 doirasida taqdim etdi. Mexanizm Handoff va Spotlight ekotizimining bir qismiga aylandi: Universal Link nafaqat brauzerda, balki Spotlight qidiruv natijalarida, Mail, Messages va boshqa tizim ilovalarida ishlaydi. Bundan tashqari, Universal Link watchOS va macOS da qo'llab-quvvatlanadi — foydalanuvchi Mac-dagi havola orqali iPhone-da ilovani ochishi mumkin.
Asosiy afzallik: yagona URL. Dasturchi ikki xil havolani (biri veb uchun, ikkinchisi ilova uchun) boshqarmaydi. Universal Link bir xil https-havoladir. Agar ilova o'rnatilgan bo'lsa — u ochiladi. Agar yo'q bo'lsa — xuddi shu havola Safari-da oddiy veb-sahifa sifatida ochiladi. Bu trafik yo'qotmasdan ideal fallbackni ta'minlaydi.
Universal Link mexanizmi uch bosqichdan iborat: assotsiatsiyani tekshirish, havolani qayta ishlash va brauzerga fallback. Har bir bosqich to'g'ri ishlash uchun muhimdir. Agar assotsiatsiya sozlanmagan bo'lsa, iOS havolani Safari-ga oddiy o'tish sifatida qayta ishlaydi. Keling, har bir bosqichni batafsil ko'rib chiqaylik.
Havolani birinchi bosishda iOS serverdan https://example.com/.well-known/apple-app-site-association manzilidagi apple-app-site-association faylini yuklab oladi. Faylda JSON formatida Team ID va Bundle ID, shuningdek ilova ochishi kerak bo'lgan yo'llar ro'yxati mavjud. iOS bu faylni keshga oladi va vaqti-vaqti bilan uning yangiligini tekshiradi (ilova yangilanganda, qurilma qayta ishga tushirilganda).
JSON fayli apple-app-site-association HTTPS orqali qayta yo'naltirishlarsiz mavjud bo'lishi kerak. Server Content-Type: application/json qaytarishi kerak. Muhim: faylning .json kengaytmasi yo'q — iOS uni qat'iy ravishda /.well-known/apple-app-site-association yo'lidan qidiradi. Apple shuningdek CDN da Universal Link qo'llab-quvvatlashni qo'shishni va fayl robots.txt tomonidan bloklanmaganligini tekshirishni tavsiya qiladi.
// apple-app-site-association — minimal konfiguratsiya
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.app",
"paths": ["/product/*", "/profile/*", "/search"]
}
]
}
}
appID Team ID + Bundle ID (TEAMID.com.example.app) sifatida tuziladi. paths — ilova qayta ishlashi kerak bo'lgan URL andozalari massivi. *, ? va NOT yozuvidan foydalanish mumkin: ["NOT /admin/*", "/product/*"]. Yo'llar sanab o'tilish tartibida tekshiriladi: birinchi moslik xatti-harakatni belgilaydi. Agar yo'l mos kelmasa — havola Safari-da ochiladi.
Assotsiatsiya muvaffaqiyatli tasdiqlangandan so'ng, iOS havolani ilovaga uzatadi. Qayta ishlash AppDelegate da NSUserActivity uchun application(_:continue:restorationHandler:) metodi yoki SceneDelegate da scene(_:continue:) orqali amalga oshiriladi. Dasturchi NSUserActivityTypeBrowsingWeb turi bilan NSUserActivity obyektini oladi, URL ni chiqaradi va tegishli ekranga navigatsiya qiladi.
// Universal Link ni AppDelegate da qayta ishlash
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping UIUserActivityRestorationHandler
) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL
else { return false }
// URL ga muvofiq ekranga navigatsiya
DeepLinkRouter.navigate(to: url)
return true
}
Yuqoridagi misolda DeepLinkRouter URL ni tahlil qiladigan va tegishli navigatsiya koordinatorini chaqiradigan maxsus sinfdir. SwiftUI uchun qayta ishlash onOpenURL metodi yoki environment(\.openURL) modifikatori orqali amalga oshiriladi. Faqat foreground ishga tushirishni emas, balki ilova ishga tushirilmagan holatni (cold start) ham qayta ishlash muhim: Universal Link bu holda ilovani ishga tushirish parametrlari orqali ochadi.
Agar ilova o'rnatilmagan bo'lsa, iOS avtomatik ravishda Universal Link-ni Safari-da ochadi. Bu Custom URL Scheme-dan asosiy farq: foydalanuvchi xatolikni ko'rmaydi. Fallback xuddi shu domenning standart veb-sahifasidir. Dasturchi bu sahifada App Store havolasi, mahsulot haqida ma'lumot yoki muqobil tarkibni joylashtirishi mumkin.
Muhim: fallback iOS darajasida sozlanishi mumkin emas. iOS shunchaki URL ni Safari-da ochadi. Ilova o'rnatilgan va o'rnatilmagan foydalanuvchilar uchun turli tarkibni ko'rsatish uchun Smart App Banner (Safari uchun ilovani ochishni taklif qiluvchi meta-teg) yoki JavaScript orqali ilova o'rnatilishini aniqlashdan foydalaning. Apple shuningdek Universal Link orqali o'rnatishlarni atributsiya qilish uchun SKAdNetwork ni taqdim etadi.
Universal Link va an'anaviy Deep Link (Custom URL Scheme) bir xil vazifani hal qiladi, lekin arxitektura va xavfsizlik jihatidan tubdan farqlanadi. Custom URL Scheme — Info.plist da ro'yxatdan o'tadigan maxsus protokol (myapp://). Har qanday ilova bir xil sxemani (myapp://) ro'yxatdan o'tkazishi mumkin va iOS qaysi biri "haqiqiy" ekanligini aniqlay olmaydi. Bu URL Scheme hijacking deb ataladi.
Universal Link hijacking muammosini domen tekshiruvi orqali hal qiladi. Faqat domen egasi o'z serverida apple-app-site-association ni joylashtirib, aniq Bundle ID bilan bog'lanishni tasdiqlashi mumkin. Ikki ilova bitta Universal Link-ni ro'yxatdan o'tkaza olmaydi: agar ziddiyat yuzaga kelsa, iOS oxirgi o'rnatilgan ilovaga ustunlik beradi yoki Safari ni ochadi.
Yana bir farq: Fallback. Custom URL Scheme ning fallback i yo'q — agar ilova o'rnatilmagan bo'lsa, brauzer xatolikni ko'rsatadi. Universal Link saytni ochadi. Yagona URL SEO qiymatining saqlanishini anglatadi (havola Google tomonidan indekslanadi) va har qanday qurilmadagi foydalanuvchi tegishli tarkibni oladi. Universal Link deep link dan unified link ga evolyutsion qadamdir.
| Xususiyat | Custom URL Scheme | Universal Link |
|---|---|---|
| Format | myapp://path | https://domain/path |
| Tekshiruv | Yo'q | apple-app-site-association |
| Xavfsizlik | Hijacking ga moyil | Faqat domen egasi |
| Fallback | Xatolik | Safari da sayt |
| iOS versiyasi | iOS 3+ | iOS 9+ |
Sozlash Universal Link server va mijoz qismlarini o'z ichiga oladi. Server qismi — apple-app-site-association faylini https://domain/.well-known/apple-app-site-association manzilida joylashtirish. Mijoz qismi — domenni Xcode da Associated Domains da ro'yxatdan o'tkazish (Capabilities → Associated Domains → applinks:example.com). Shundan so'ng ilova avtomatik ravishda belgilangan domen uchun barcha Universal Link larni oladi.
Sozlash qadamlari:
Nosozliklarni tuzatish Universal Link — iOS dasturchilarining tez-tez uchraydigan muammosi. Ishlamaydigan havolalarning asosiy sabablari: apple-app-site-association fayli HTTPS orqali mavjud emas, noto'g'ri appID, Content-Type application/json emas, /.well-known yo'lidan qayta yo'naltirish, eski versiyaning keshlanishi (Settings → Developer → Associated Domains Development orqali tiklash). Apple assotsiatsiyani sinash uchun Apple Developer Console da "Validation Checker" vositasini taqdim etadi.
Branch va boshqa MMP platformalari Universal Link sozlashni soddalashtiradi: ular apple-app-site-association ni avtomatik yaratadi va o'z domenlarida xosting qiladi. Dasturchiga faqat Branch domenini Associated Domains ga qo'shish va SDK ni integratsiya qilish qoladi. Bu, ayniqsa, AASA faylini xosting qilish uchun o'z server infratuzilmasiga ega bo'lmagan startaplar uchun qulaydir.
Universal Link bir nechta cheklovlarga ega. Birinchisi: apple-app-site-association fayli qat'iy ravishda HTTPS orqali mavjud bo'lishi kerak (HTTP qo'llab-quvvatlanmaydi). Ikkinchisi: havola Associated Domains da ko'rsatilgan bir xil domenga olib borishi kerak. Domenlararo Universal Link ishlamaydi — har bir domen uchun Capabilities da alohida yozuv va alohida AASA fayli kerak. Uchinchisi: Universal Link WKWebView da ishlamaydi — faqat Safari va tizim komponentlarida.
Moslik: iOS 9.0+ (Universal Link), watchOS 6.0+ (Handoff Universal Link), macOS 10.15+ (Catalyst va Mac ilovalari). Eski iOS versiyalarida havola Safari da ochiladi. Bu iOS 8 da (qurilmalarning 1% dan kami) Universal Link ishlamasligini anglatadi. Eski qurilmalar uchun Custom URL Scheme ni fallback sifatida qo'llab-quvvatlash tavsiya etiladi, agar auditoriya eskirgan versiyalari bo'lgan foydalanuvchilarni o'z ichiga olsa.
iOS 16+ o'zgarishlari: Apple SwiftUI uchun Universal Link qayta ishlashni yaxshiladi. Kechiktirilgan qayta ishlash imkoniyati bilan yangi environment(\.openURL) modifikatori paydo bo'ldi. iOS 16 shuningdek SFSafariViewController orqali ham Universal Link ni ilovada ochishga imkon beradi. iOS 16 foydalanuvchilari uchun Universal Link ni SwiftUI da qayta ishlashga to'liq o'tish tavsiya etiladi, AppDelegate kodi faqat orqaga qarab moslik uchun saqlanadi.
Tez-tez beriladigan savollar
Universal Link standart HTTPS-URL dan foydalanadi va serverdagi fayl orqali tasdiqlanadi. Custom URL Scheme tekshiruvsiz maxsus protokol (myapp://) dan foydalanadi, bu uni bir xil sxemani ro'yxatdan o'tkazgan boshqa ilova tomonidan egallanishga moyil qiladi.
Fayl HTTPS serverining ildizida /.well-known/apple-app-site-association yo'lida (.json kengaytmasisiz) joylashtiriladi. Server Content-Type: application/json qaytarishi kerak. Muhim: hech qanday qayta yo'naltirishlarsiz, fayl to'g'ridan-to'g'ri mavjud bo'lishi kerak.
Asosiy sabablar: AASA faylida noto'g'ri Team ID yoki Bundle ID, fayl HTTPS orqali mavjud emas, qayta yo'naltirish, noto'g'ri Content-Type, eski versiyaning keshlanishi. Developer → Associated Domains Development orqali tekshiring va qurilmani qayta ishga tushirib keshnni tiklang.
Yo'q — Universal Link uchun apple-app-site-association joylashtirilgan HTTPS server kerak. Domenisiz Universal Link ishlamaydi. Muqobil: Custom URL Scheme (kamroq xavfsiz) yoki o'z domeniga ega uchinchi tomon xizmatlari (Branch, Firebase).
Yo'q — Universal Link Apple ning iOS, iPadOS, watchOS va macOS uchun eksklyuziv texnologiyasidir. Android da analogi App Link (Android 6.0+) deb ataladi va apple-app-site-association o'rniga Digital Asset Links (assetlinks.json) dan foydalanadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing