URL Scheme — mobil tətbiqin əməliyyat sistemində myapp://path kimi linklər vasitəsilə açılmaq üçün qeydiyyatdan keçirdiyi xüsusi URI protokoludur. RFC 3986-ya əsasən, URI sxemi ünvanın bütün sonrakı komponentlərinin sintaksisini və semantikasını müəyyən edir. Belə bir linkə keçid zamanı sistem qeydiyyatdan keçmiş tətbiqi unikal identifikatorla müəyyən edir və linkdən çıxarılmış parametrlərlə onu işə salır. Deep link URL Scheme əsasında daha müasir alternativlərin yaranmasına baxmayaraq, mobil platformalarda tətbiqlərarası naviqasiyanın əsas mexanizmi olaraq qalır.
Əsas məqamlar
URL Scheme — tətbiqin əməliyyat sistemində xüsusi linklər vasitəsilə çağırışları qəbul etmək üçün qeydiyyatdan keçirdiyi unikal protokol identifikatorudur. İstifadəçi myapp://profile/123 kimi bir linkə kliklədikdə, sistem myapp sxemini qeydiyyatdan keçirmiş tətbiqi müəyyən edir və tam URI ilə idarəetməni ona ötürür. Bu mexanizm tətbiqlərə server infrastrukturu olmadan məlumat mübadiləsi aparmağa və bir-birini açmağa imkan verir.
URL Scheme konsepsiyası birbaşa RFC 3986 internet standartlarından götürülmüşdür, burada URI sxemi hər bir universal resurs identifikatorunun ilk komponentidir. Mobil inkişafda bu fikir tətbiqlərarası kommunikasiya üçün uyğunlaşdırılmışdır, burada HTTP serveri əvəzinə linki emal edən tətbiqin özü çıxış edir.
Bir çox məşhur tətbiqlər üçüncü tərəf xidmətləri ilə inteqrasiya üçün öz URL Scheme-lərini qeydiyyatdan keçirir. Məsələn, Spotify spotify:// sxemindən, Telegram — tg://, Instagram isə instagram:// sxemindən istifadə edir. Tərtibatçılar tez-tez daxili naviqasiya və ekranların sınaqdan keçirilməsi üçün appname:// tipli sxem yaradırlar.
URL Scheme hələ də push bildirişlərində, e-poçt kampaniyalarında və QR kodlarda geniş istifadə olunur, burada tətbiqin konkret bölməsinə dərhal keçid tələb olunur. Bununla belə, iOS 9 və Android 6-dan başlayaraq, tədricən çılpaq sxemləri tamamlayan və əvəz edən alternativ mexanizmlər meydana çıxmışdır.
Xüsusi URI-nin strukturu ümumi RFC 3986 spesifikasiyasına tabedir və bir neçə komponentdən ibarətdir. Sxem birinci göstərilir və ünvanın qalan hissəsindən iki nöqtə ilə ayrılır. Sxemdən sonra host, port, yol, query-parametrləri və fraqment gələ bilər, hər biri isteğe bağlıdır.
Tam sintaksis scheme://host/path?key=value#fragment kimi görünür. Sxem yeganə məcburi elementdir, qalanları konkret tətbiqin ehtiyacları ilə müəyyən edilir. Sxemdən sonra qoşa slash tarixən HTTP-dən götürülmüşdür və spesifikasiyaya görə ciddi şəkildə məcburi deyil, lakin hər yerdə konvensiya kimi istifadə olunur.
URI strukturunun vizual təsviri üçün komponentlər cədvəlindən istifadə olunur. Hər bir elementin öz təyinatı və məcburilik səviyyəsi var.
| Komponent | Nümunə | Məcburilik |
|---|---|---|
| Scheme | myapp | Bəli |
| Host | profile | Xeyr |
| Path | /user/42 | Xeyr |
| Query | ?id=42&tab=main | Xeyr |
| Fragment | #section2 | Xeyr |
Tərtibatçılar URI strukturunu sərbəst seçə bilərlər ki, bu da çeviklik yaradır, lakin tətbiqin müxtəlif versiyaları arasında uyğunluq problemləri yaradır. URL Scheme formatını tətbiqin ictimai API hissəsi kimi sənədləşdirmək və dəyişiklik zamanı versiyalamaq tövsiyə olunur.
iOS layihənin Info.plist faylında hər bir URL Scheme-in açıq şəkildə qeydiyyatdan keçirilməsini tələb edir. Tərtibatçı CFBundleURLTypes massivi əlavə edir, onun hər bir elementi identifikator (CFBundleURLName) və dəstəklənən sxemlərin siyahısını (CFBundleURLSchemes) ehtiva edir. Qeydiyyatdan sonra sistem avtomatik olaraq qeydiyyatdan keçmiş sxemlər üzrə bütün daxil olan çağırışları tətbiqə yönləndirir.
Daxil olan URL Scheme-in emalı tətbiqin AppDelegate-də application(_:open:options:) metodu vasitəsilə baş verir. Bu metod naviqasiya qərarı vermək üçün yol və query-parametrlərinin çıxarıldığı URL obyektini alır. Emal əməliyyatın uğurlu olduğunu göstərən Bool dəyərini qaytarmalıdır.
Aşağıda Swift dilində URL Scheme emalçısının tətbiq nümunəsi verilmişdir. Kod URLComponents vasitəsilə daxil olan URI-dən host və query-parametrlərinin çıxarılmasını nümayiş etdirir.
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any]
) -> Bool {
let host = url.host
let params = URLComponents(
url: url,
resolvingAgainstBaseURL: false
)?.queryItems
if host == "profile" {
navigateToProfile(params)
}
return true
}
Metod query-parametrlərinin təhlükəsiz parsellenməsi üçün URLComponents-dən istifadə edir. Bu yanaşma sətrin əl ilə təhlilindən üstündür, çünki avtomatik olaraq faiz kodlaşdırmasını və parametr dəyərlərində xüsusi simvolların dekodlaşdırılmasını idarə edir.
Android URL Scheme əsasında deep link-lərin yönləndirilməsi üçün Intent Filter sistemindən istifadə edir. Tərtibatçı linki emal etməli olan Activity teqinin içərisində AndroidManifest.xml-də filtr elan edir. Filtr action VIEW, BROWSABLE və DEFAULT kateqoriyalarını, həmçinin sxem, host və pathPrefix göstərilməklə data teqini ehtiva edir.
İstifadəçi xüsusi sxemli linkə kliklədikdə, sistem bütün quraşdırılmış tətbiqlərin Intent Filter-lərini yoxlayır. Bir neçə uyğun tətbiq tapılarsa, istifadəçiyə seçim dialoqu təqdim olunur. BROWSABLE kateqoriyası linkin brauzerdən emalına icazə verir.
Activity-də myapp sxeminin emalı üçün AndroidManifest.xml-də Intent Filter bəyannaməsi nümunəsi. Action və category kombinasiyası deep link-in düzgün yönləndirilməsi üçün məcburidir.
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category
android:name="android.intent.category.DEFAULT" />
<category
android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="myapp"
android:host="profile"
android:pathPrefix="/user" />
</intent-filter>
</activity>
Filtrləri konfiqurasiya etdikdən sonra Activity-də URI əldə etmək üçün intent.getData() çağırılmalıdır. Intent və məlumatları null olub-olmamasını yoxlamaq vacibdir, çünki Activity deep link olmadan, məsələn, launcher-dən standart başlatma zamanı işə salına bilər.
URL Scheme-də query-parametrləri sual işarəsindən sonra açar=dəyər formatında, ampersandla ayrılaraq ötürülür. Bu format HTTP sorğuları ilə eynidir və platformanın standart vasitələri ilə asanlıqla emal olunur. Parametrlər URI-nin icazə verilən dəstinə daxil olmayan bütün simvollar üçün faiz kodlaşdırması ilə kodlaşdırılmalıdır.
Parametrləri olan tam link nümunəsi: myapp://profile?userId=42&source=email&ref=abc123. URL çıxarıldıqdan sonra tətbiq ardıcıl olaraq bütün query-items-ləri təhlil edir və onların dəyərləri əsasında hədəf ekrana naviqasiya qərarı verir.
Mürəkkəb məlumatları ötürərkən URI uzunluğu məhdudiyyətini nəzərə almaq vacibdir. iOS-da URL Scheme-in maksimum uzunluğu 2 KB ilə məhdudlaşır, bundan sonra sistem linki kəsir. Android-də limit təxminən 8 KB-dır, lakin dəqiq dəyər OS versiyasından və cihaz istehsalçısından asılıdır. Böyük həcmli məlumatlar üçün yalnız sessiya identifikatorunu URL Scheme vasitəsilə ötürmək, qalan məlumatları isə serverdən yükləmək tövsiyə olunur.
URL Scheme-in əsas çatışmazlığı — tətbiq cihazda quraşdırılmayıbsa, linki emal edə bilməməsidir. Brauzer xəta göstərir və istifadəçi keçid kontekstini itirir. Bu problemi həll etmək üçün Apple iOS 9-da Universal Links, Google isə Android 6-da App Links tətbiq etmişdir. Hər iki mexanizm tətbiqə bağlı veb-domain vasitəsilə qeydiyyatdan keçir.
Universal Links və App Links adi HTTPS linkləri kimi işləyir, lakin tətbiq quraşdırılıbsa, onu seçim dialoqu olmadan açır. Tətbiq quraşdırılmayıbsa, link eyni domendə veb-səhifəni açır, istifadəçi təcrübəsini qoruyur. Bu onları istehsal mühiti üçün üstünlük verilən alternativ edir.
iOS və Android-də URL Scheme üçün daxili fallback mexanizmi yoxdur. Tərtibatçılar aralıq server həllərindən istifadə edir: link tətbiqin quraşdırılmasını JavaScript vasitəsilə yoxlayan və ya sxemə, ya da tətbiq mağazasına yönləndirən veb-səhifəyə aparır. Firebase Dynamic Links və Branch.io təxirə salınmış deep link dəstəyi ilə bu problemin hazır həllərini təklif edir, onlar avtomatik olaraq quraşdırma statusunu müəyyən edir və istifadəçini öz server pipeline-ni hazırlamaq ehtiyacı olmadan yönləndirir.
iOS 15+ və Android 12+-də URL Scheme istifadə edərkən əlavə mürəkkəblik yaranır, burada məxfilik qaydaları sərtləşdirilmişdir. Safari əvvəlcədən təsdiq olmadan qeydiyyatdan keçməmiş sxemi açmaq cəhdlərini bloklayır, Android 12 isə PackageManager vasitəsilə quraşdırılmış tətbiqlərin görünməsini məhdudlaşdırır. Bu dəyişikliklər URL Scheme-dən tətbiqlərarası qarşılıqlı əlaqə üçün istifadəni platformaların əvvəlki versiyalarından daha az etibarlı edir.
Tez-tez verilən suallar
URL Scheme şifrələmə olmadan xüsusi protokoldan istifadə edir, Universal Links isə domain yoxlanışı ilə HTTPS vasitəsilə işləyir. Universal Links tətbiq seçimi dialoqunu çağırmır və tətbiq cihazda olmadıqda düzgün emal olunur.
Bəli, lakin bütün qeyri-ASCII simvollar RFC 3986-ya uyğun olaraq percent-encoding vasitəsilə kodlaşdırılmalıdır. Köhnə OS və brauzer versiyaları ilə uyğunluğu təmin etmək üçün URL Scheme-də kirildən qaçınmaq tövsiyə olunur.
Nə iOS, nə də Android-də sxemlərin sayında məhdudiyyət yoxdur. Təcrübədə tətbiqlər birdən beşə qədər sxemdən istifadə edir. Məsələn, Telegram tg://, t.me/, telegram:// və telegram.me:// sxemlərini qeydiyyatdan keçirir.
iOS-da qeydiyyatdan keçmiş sxem olduqda true qaytaran canOpenURL(_:) metodundan istifadə olunur. Android-də yoxlama PackageManager.queryIntentActivities() vasitəsilə aparılır. Hər iki platforma konfiqurasiyada sxemin əvvəlcədən göstərilməsini tələb edir.
Xeyr, URL Scheme məlumatları şifrələmir. Eyni sxemi qeydiyyatdan keçirmiş hər hansı tətbiq linki ələ keçirə bilər. Təhlükəsizlik üçün HTTPS ilə Universal Links və ya protokol səviyyəsində məlumatların şifrələnməsindən istifadə edin.
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