Universal Link Apple (iOS 9+) mexanizmidir, veb-linkləri Safari-ni yan keçərək birbaşa tətbiqdə açmağa imkan verir. Tətbiq quraşdırılmayıbsa, link problemsiz brauzerdə açılır. Termin Apple tərəfindən 2015-ci ildə WWDC-də Handoff və Continuity ekosisteminin bir hissəsi kimi təqdim edilmişdir. Apple Developer-ə görə, Universal Link seçim dialoqları olmadan veb və nativ tətbiq arasında vahid istifadəçi təcrübəsi təmin edir.
Əsas məqamlar
Universal Link https://example.com/page formasında standart HTTPS-linkdir, iOS cihazından keçid zamanı Safari əvəzinə quraşdırılmış tətbiqi açır. Custom URL Scheme-dən əsas fərqi: Universal Link fərdi sxemin (myapp://) qeydiyyatını tələb etmir — adi domen istifadə olunur. Bu, istənilən tətbiqin eyni sxemi qeydiyyatdan keçirə biləcəyi URL Scheme hijacking problemini aradan qaldırır.
Apple Universal Link-i WWDC 2015-də iOS 9 çərçivəsində təqdim etdi. Mexanizm Handoff və Spotlight ekosisteminin bir hissəsi oldu: Universal Link yalnız brauzerdə deyil, həm də Spotlight axtarış nəticələrində, Mail, Messages və digər sistem tətbiqlərində işləyir. Bundan əlavə, Universal Link watchOS və macOS-da dəstəklənir — istifadəçi Mac-dakı link vasitəsilə iPhone-da tətbiqi aça bilər.
Əsas üstünlük: vahid URL. Tərtibatçı iki fərqli linki (biri veb üçün, digəri tətbiq üçün) idarə etmir. Universal Link eyni https-linkdir. Tətbiq quraşdırılıbsa — o açılır. Yoxdursa — eyni link Safari-də adi veb-səhifə kimi açılır. Bu, trafik itkisi olmadan ideal fallback təmin edir.
Universal Link mexanizmi üç mərhələdən ibarətdir: assosiasiya yoxlanışı, linkin işlənməsi və brauzerə fallback. Hər mərhələ düzgün işləmə üçün kritikdir. Əgər assosiasiya qurulmayıbsa, iOS linki Safari-yə adi keçid kimi emal edir. Hər mərhələni ətraflı nəzərdən keçirək.
Linkə ilk klikdə iOS serverdən https://example.com/.well-known/apple-app-site-association ünvanından apple-app-site-association faylını yükləyir. Faylda JSON formatında Team ID və Bundle ID, həmçinin tətbiqin açmalı olduğu yolların siyahısı var. iOS bu faylı keşləyir və vaxtaşırı yeniliyini yoxlayır (tətbiq yeniləndikdə, cihaz yenidən başladıldıqda).
JSON faylı apple-app-site-association HTTPS vasitəsilə yönləndirməsiz əlçatan olmalıdır. Server Content-Type: application/json qaytarmalıdır. Vacib: faylın .json genişlənməsi yoxdur — iOS onu ciddi şəkildə /.well-known/apple-app-site-association yolunda axtarır. Apple həmçinin CDN-də Universal Link dəstəyi əlavə etməyi və faylın robots.txt tərəfindən bloklanmadığını yoxlamağı tövsiyə edir.
// apple-app-site-association — minimal konfiqurasiya
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.app",
"paths": ["/product/*", "/profile/*", "/search"]
}
]
}
}
appID Team ID + Bundle ID (TEAMID.com.example.app) kimi formalaşır. paths — tətbiqin emal etməli olduğu URL nümunələri massivi. *, ? və NOT notasiyasından istifadə etmək olar: ["NOT /admin/*", "/product/*"]. Yollar sadalanma ardıcıllığı ilə yoxlanılır: ilk uyğunluq davranışı müəyyən edir. Yol uyğun gəlmirsə — link Safari-də açılır.
Assosiasiyanın uğurlu yoxlanışından sonra iOS linki tətbiqə ötürür. İşlənmə AppDelegate-də NSUserActivity üçün application(_:continue:restorationHandler:) metodu və ya SceneDelegate-də scene(_:continue:) vasitəsilə həyata keçirilir. Tərtibatçı NSUserActivityTypeBrowsingWeb tipi ilə NSUserActivity obyekti alır, URL-i çıxarır və müvafiq ekrana naviqasiya edir.
// Universal Link-in AppDelegate-də işlənməsi
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping UIUserActivityRestorationHandler
) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL
else { return false }
// URL-ə uyğun ekrana naviqasiya
DeepLinkRouter.navigate(to: url)
return true
}
Yuxarıdakı nümunədə DeepLinkRouter URL-i pars edən və müvafiq naviqasiya koordinatorunu çağıran fərdi sinifdir. SwiftUI üçün işlənmə onOpenURL metodu və ya environment(\.openURL) modifikatoru vasitəsilə aparılır. Yalnız foreground işəsalmanı deyil, həm də tətbiqin işə salınmadığı halı (cold start) emal etmək vacibdir: Universal Link bu halda tətbiqi işəsalma parametrləri vasitəsilə açır.
Tətbiq quraşdırılmayıbsa, iOS avtomatik olaraq Universal Link-i Safari-də açır. Bu, Custom URL Scheme-dən əsas fərqdir: istifadəçi xəta görmür. Fallback eyni domenin standart veb-səhifəsidir. Tərtibatçı bu səhifədə App Store linki, məhsul haqqında məlumat və ya alternativ məzmun yerləşdirə bilər.
Vacib: fallback iOS səviyyəsində fərdiləşdirilə bilməz. iOS sadəcə URL-i Safari-də açır. Tətbiqi quraşdırmış və quraşdırmamış istifadəçilər üçün fərqli məzmun göstərmək üçün Smart App Banner (Safari üçün tətbiqi açmağı təklif edən meta-teq) və ya JavaScript vasitəsilə tətbiq quraşdırmasının aşkarlanmasından istifadə edin. Apple həmçinin Universal Link vasitəsilə quraşdırmaların atribusiyası üçün SKAdNetwork təqdim edir.
Universal Link və ənənəvi Deep Link (Custom URL Scheme) eyni problemi həll edir, lakin arxitektura və təhlükəsizlik baxımından prinsipial fərqlənir. Custom URL Scheme — Info.plist-də qeydiyyatdan keçən fərdi protokol (myapp://). İstənilən tətbiq eyni sxemi (myapp://) qeydiyyatdan keçirə bilər və iOS hansının "həqiqi" olduğunu müəyyən edə bilməz. Buna URL Scheme hijacking deyilir.
Universal Link hijacking problemini domen yoxlanışı vasitəsilə həll edir. Yalnız domen sahibi öz serverində apple-app-site-association yerləşdirərək konkret Bundle ID ilə əlaqəni təsdiqləyə bilər. İki tətbiq bir Universal Link-i qeydiyyatdan keçirə bilməz: konflikt yaranarsa, iOS son quraşdırılan tətbiqə üstünlük verir və ya Safari-ni açır.
Digər fərq: Fallback. Custom URL Scheme-in fallback-i yoxdur — tətbiq quraşdırılmayıbsa, brauzer xəta göstərir. Universal Link saytı açır. Vahid URL SEO dəyərinin qorunması deməkdir (link Google tərəfindən indekslənir) və istənilən cihazda olan istifadəçi müvafiq məzmun alır. Universal Link deep link-dən unified link-ə təkamül addımıdır.
| Xüsusiyyət | Custom URL Scheme | Universal Link |
|---|---|---|
| Format | myapp://path | https://domain/path |
| Yoxlanış | Yox | apple-app-site-association |
| Təhlükəsizlik | Hijacking-ə həssas | Yalnız domen sahibi |
| Fallback | Xəta | Safari-də sayt |
| iOS versiyası | iOS 3+ | iOS 9+ |
Konfiqurasiya Universal Link server və müştəri hissələrini əhatə edir. Server hissəsi — apple-app-site-association faylının https://domain/.well-known/apple-app-site-association ünvanında yerləşdirilməsi. Müştəri hissəsi — domenin Xcode-da Associated Domains-də qeydiyyatı (Capabilities → Associated Domains → applinks:example.com). Bundan sonra tətbiq avtomatik olaraq göstərilən domen üçün bütün Universal Link-ləri alır.
Konfiqurasiya addımları:
Debug Universal Link — iOS tərtibatçılarının tez-tez baş ağrısı. İşləməyən linklərin əsas səbəbləri: apple-app-site-association faylı HTTPS vasitəsilə əlçatan deyil, səhv appID, Content-Type application/json deyil, /.well-known yolundan yönləndirmə, köhnə versiyanın keşlənməsi (Settings → Developer → Associated Domains Development vasitəsilə sıfırlama). Apple assosiasiyanı sınamaq üçün Apple Developer Console-da "Validation Checker" aləti təqdim edir.
Branch və digər MMP platformaları Universal Link konfiqurasiyasını asanlaşdırır: onlar apple-app-site-association faylını avtomatik yaradır və öz domenlərində host edirlər. Tərtibatçıya sadəcə Branch domenini Associated Domains-ə əlavə etmək və SDK-nı inteqrasiya etmək qalır. Bu, xüsusilə AASA faylını host etmək üçün öz server infrastrukturu olmayan startaplar üçün əlverişlidir.
Universal Link-in bir neçə məhdudiyyəti var. Birincisi: apple-app-site-association faylı ciddi şəkildə HTTPS vasitəsilə əlçatan olmalıdır (HTTP dəstəklənmir). İkincisi: link Associated Domains-də göstərilən eyni domenə aparmalıdır. Çoxdomenli Universal Link işləmir — hər domen üçün Capabilities-də ayrıca qeyd və ayrıca AASA faylı tələb olunur. Üçüncüsü: Universal Link WKWebView-də işləmir — yalnız Safari və sistem komponentlərində.
Uyğunluq: iOS 9.0+ (Universal Link), watchOS 6.0+ (Handoff Universal Link), macOS 10.15+ (Catalyst və Mac tətbiqləri). Köhnə iOS versiyalarında link Safari-də açılır. Bu o deməkdir ki, iOS 8-də (cihazların 1%-dən azı) Universal Link işləməyəcək. Köhnə cihazlarda fallback kimi Custom URL Scheme dəstəkləmək tövsiyə olunur, əgər auditoriyaya köhnəlmiş versiyaları olan istifadəçilər daxildirsə.
iOS 16+ dəyişiklikləri: Apple SwiftUI üçün Universal Link işlənməsini təkmilləşdirdi. Gecikmiş emal imkanı ilə yeni environment(\.openURL) modifikatoru meydana çıxdı. iOS 16 həmçinin SFSafariViewController vasitəsilə də Universal Link-i tətbiqdə açmağa imkan verir. iOS 16 istifadəçiləri üçün Universal Link-in SwiftUI emalına tam keçid tövsiyə olunur, AppDelegate kodu yalnız geriyə uyğunluq üçün saxlanılır.
Tez-tez verilən suallar
Universal Link standart HTTPS-URL istifadə edir və serverdəki fayl vasitəsilə yoxlanılır. Custom URL Scheme yoxlama olmadan fərdi protokol (myapp://) istifadə edir, bu da onu eyni sxemi qeydiyyatdan keçirmiş digər tətbiq tərəfindən ələ keçirilməyə həssas edir.
Fayl HTTPS serverinin kökündə /.well-known/apple-app-site-association yolunda yerləşdirilir (.json genişlənməsi olmadan). Server Content-Type: application/json qaytarmalıdır. Vacib: heç bir yönləndirmə olmamalıdır, fayl birbaşa əlçatan olmalıdır.
Əsas səbəblər: AASA faylında səhv Team ID və ya Bundle ID, faylın HTTPS vasitəsilə əlçatan olmaması, yönləndirmə, səhv Content-Type, köhnə versiyanın keşlənməsi. Developer → Associated Domains Development vasitəsilə yoxlayın və cihazı yenidən başladaraq keşi sıfırlayın.
Xeyr — Universal Link üçün apple-app-site-association yerləşdirilmiş HTTPS server tələb olunur. Domen olmadan Universal Link işləmir. Alternativ: Custom URL Scheme (daha az təhlükəsiz) və ya öz domeni olan üçüncü tərəf xidmətləri (Branch, Firebase).
Xeyr — Universal Link Apple-ın iOS, iPadOS, watchOS və macOS üçün eksklüziv texnologiyasıdır. Android-də analoqu App Link (Android 6.0+) adlanır və apple-app-site-association əvəzinə Digital Asset Links (assetlinks.json) istifadə edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun