URL Scheme: що це, як працює та використовується в розробці

Автор: IT Sectr Опубліковано: 2026-05-14 Час читання: 8 хв

URL Scheme — це кастомний URI-протокол, який мобільний додаток реєструє в операційній системі для відкриття за посиланнями виду myapp://path. Згідно з RFC 3986, схема URI визначає синтаксис і семантику всіх наступних компонентів адреси. При переході на таке посилання система ідентифікує зареєстрований додаток за унікальним ідентифікатором і запускає його з вилученими з посилання параметрами. Deep link на основі URL Scheme залишається базовим механізмом міжпрограмної навігації на мобільних платформах, незважаючи на появу більш сучасних альтернатив.

Головне

  • URL Scheme — кастомний протокол посилань виду myapp://path, який додаток реєструє для відкриття з інших додатків або браузера.
  • Синтаксис включає схему, хост, шлях та query-параметри за стандартом RFC 3986, що забезпечує гнучку передачу даних між додатками.
  • iOS використовує CFBundleURLTypes в Info.plist та делегат AppDelegate для обробки вхідних URL Scheme з параметрами навігації.
  • Android застосовує Intent Filter в AndroidManifest.xml із зазначенням action, category та data для маршрутизації deep link на цільову Activity.
  • Обмеження — URL Scheme не працює за відсутності додатка, що вирішується через Universal Links на iOS та App Links на Android.

Що таке URL Scheme?

URL Scheme — це унікальний ідентифікатор протоколу, який додаток реєструє в операційній системі для отримання викликів за кастомними посиланнями. Коли користувач переходить за посиланням виду myapp://profile/123, система визначає додаток, що зареєстрував схему myapp, і передає йому керування з повним URI. Такий механізм дозволяє додаткам обмінюватися даними та відкривати один одного без участі серверної інфраструктури.

Концепція URL Scheme безпосередньо запозичена з веб-стандартів RFC 3986, де URI-схема є першим компонентом будь-якого універсального ідентифікатора ресурсу. У мобільній розробці ця ідея адаптована для міжпрограмної комунікації, де замість HTTP-сервера виступає сам додаток-обробник посилання.

Приклади відомих URL Scheme

Багато популярних додатків реєструють власні URL Scheme для інтеграції зі сторонніми сервісами. Наприклад, Spotify використовує схему spotify://, Telegram — tg://, а Instagram — instagram://. Розробники також часто створюють схему виду appname:// для внутрішньої навігації та наскрізного тестування екранів.

URL Scheme, як і раніше, широко застосовуються в push-сповіщеннях, email-розсилках та QR-кодах, де потрібен миттєвий перехід до конкретного розділу додатка. Однак починаючи з iOS 9 та Android 6 з'явилися альтернативні механізми, які поступово доповнюють та замінюють голі схеми.

Синтаксис URL Scheme: схема, хост і шлях

Структура кастомного URI підпорядковується загальній специфікації RFC 3986 і складається з кількох компонентів. Схема вказується першою і відокремлюється двокрапкою від решти адреси. Після схеми можуть слідувати хост, порт, шлях, query-параметри та фрагмент, кожен з яких є опціональним.

Повний синтаксис виглядає як scheme://host/path?key=value#fragment. Схема є єдиним обов'язковим елементом, решта визначаються потребами конкретної реалізації. Подвійний слеш після схеми історично запозичений з HTTP і не є строго обов'язковим за специфікацією, але повсюдно використовується як угода.

Компоненти URI

Для наочного представлення структури URI використовується таблиця компонентів. Кожен елемент має своє призначення та рівень обов'язковості.

КомпонентПрикладОбов'язковість
SchememyappТак
HostprofileНі
Path/user/42Ні
Query?id=42&tab=mainНі
Fragment#section2Ні

Розробники можуть довільно вибирати структуру URI, що створює гнучкість, але породжує проблеми сумісності між різними версіями додатка. Рекомендується документувати формат URL Scheme як частину публічного API додатка і версіонувати його при зміні.

Як працює URL Scheme в iOS

iOS вимагає явної реєстрації кожної URL Scheme у файлі Info.plist проекту. Розробник додає масив CFBundleURLTypes, кожен елемент якого містить ідентифікатор (CFBundleURLName) та список підтримуваних схем (CFBundleURLSchemes). Після реєстрації система автоматично направляє всі вхідні виклики за зареєстрованими схемами в додаток.

Обробка вхідного URL Scheme відбувається в делегаті додатка через метод application(_:open:options:). Цей метод отримує об'єкт URL, з якого вилучається шлях та query-параметри для прийняття рішення про навігацію. Обробка повинна повертати Bool-значення, що вказує на успішність операції.

Обробка в AppDelegate

Нижче наведено приклад реалізації обробника URL Scheme мовою Swift. Код демонструє вилучення хоста та query-параметрів із вхідного URI за допомогою URLComponents.

swift
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
}

Метод використовує URLComponents для безпечного парсингу query-параметрів. Цей підхід є кращим за ручний розбір рядка, оскільки автоматично обробляє відсоткове кодування та декодування спеціальних символів у значеннях параметрів.

Як працює URL Scheme в Android

Android використовує систему Intent Filter для маршрутизації deep link на основі URL Scheme. Розробник оголошує фільтр в AndroidManifest.xml всередині тега Activity, яка повинна обробляти посилання. Фільтр містить action VIEW, категорії BROWSABLE та DEFAULT, а також тег data із зазначенням схеми, хоста та pathPrefix.

Коли користувач переходить за посиланням з кастомною схемою, система перевіряє Intent Filter всіх встановлених додатків. Якщо знайдено кілька відповідних додатків, користувачеві пропонується діалог вибору. Категорія BROWSABLE дозволяє обробку посилання з браузера.

Налаштування Intent Filter

Приклад оголошення Intent Filter в AndroidManifest.xml для обробки схеми myapp на Activity. Комбінація action та category обов'язкова для коректної маршрутизації deep link.

xml
<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>

Після налаштування фільтра в Activity необхідно викликати intent.getData() для отримання URI. Важливо перевіряти intent та дані на null, оскільки Activity може бути запущена без вхідного deep link, наприклад при стандартному запуску з лаунчера.

Передача параметрів через URL Scheme

Query-параметри в URL Scheme передаються після знака питання у форматі ключ=значення, розділені амперсандом. Цей формат ідентичний HTTP-запитам і легко обробляється стандартними засобами платформи. Параметри повинні бути закодовані за допомогою відсоткового кодування для всіх символів, що не входять до допустимого набору URI.

Приклад повного посилання з параметрами: myapp://profile?userId=42&source=email&ref=abc123. Після вилучення URL додаток послідовно парсить всі query-items і на основі їх значень приймає рішення про навігацію на цільовий екран.

Обмеження довжини URI

При передачі складних даних важливо враховувати обмеження на довжину URI. В iOS максимальна довжина URL Scheme обмежена 2 КБ, після чого система обрізає посилання. В Android ліміт становить близько 8 КБ, але точне значення залежить від версії ОС та виробника пристрою. Для великих обсягів даних рекомендується передавати лише ідентифікатор сесії через URL Scheme, а решту даних завантажувати з сервера.

Обмеження та альтернативи URL Scheme

Основний недолік URL Scheme — неможливість обробити посилання, якщо додаток не встановлено на пристрої. Браузер відображає помилку, і користувач втрачає контекст переходу. Для вирішення цієї проблеми Apple впровадила Universal Links в iOS 9, а Google — App Links в Android 6. Обидва механізми реєструються через веб-домен, прив'язаний до додатка.

Universal Links та App Links працюють як звичайні HTTPS-посилання, але за наявності додатка відкривають його без діалогу вибору. Якщо додаток не встановлено, посилання відкриває веб-сторінку на тому ж домені, зберігаючи користувацький досвід. Це робить їх кращою альтернативою для production-середовища.

Механізми fallback

Для URL Scheme на iOS та Android немає вбудованого механізму fallback. Розробники використовують проміжні серверні рішення: посилання веде на веб-сторінку, яка перевіряє встановлення додатка через JavaScript і перенаправляє або на схему, або в магазин додатків. Firebase Dynamic Links та Branch.io пропонують готові рішення цієї проблеми з підтримкою deferred deep link, які автоматично визначають статус встановлення та маршрутизують користувача без необхідності розробляти власний серверний пайплайн.

Додаткова складність виникає при використанні URL Scheme в iOS 15+ та Android 12+, де посилено правила конфіденційності. Safari блокує спроби відкрити незареєстровану схему без попереднього підтвердження, а Android 12 обмежує видимість встановлених додатків через PackageManager. Ці зміни роблять використання URL Scheme для міжпрограмної взаємодії менш надійним, ніж у ранніх версіях платформ.

Часті запитання

Чим URL Scheme відрізняється від Universal Links?

URL Scheme використовує кастомний протокол без шифрування, а Universal Links працюють через HTTPS з верифікацією домену. Universal Links не викликають діалог вибору додатка і коректно обробляються за відсутності додатка на пристрої.

Чи може URL Scheme містити кириличні символи?

Так, але всі не-ASCII символи повинні бути закодовані через percent-encoding згідно з RFC 3986. Рекомендується уникати кирилиці в URL Scheme для забезпечення сумісності зі старими версіями ОС та браузерів.

Скільки URL Scheme може зареєструвати один додаток?

Обмежень на кількість схем немає ні в iOS, ні в Android. На практиці додатки використовують від однієї до п'яти схем. Наприклад, Telegram реєструє схеми tg://, t.me/, telegram:// та telegram.me://.

Як перевірити, чи підтримує пристрій мою URL Scheme?

В iOS використовується метод canOpenURL(_:), який повертає true за наявності зареєстрованої схеми. В Android перевірка виконується через PackageManager.queryIntentActivities(). Обидві платформи вимагають попереднього зазначення схеми в конфігурації.

Чи можна передавати паролі через URL Scheme?

Ні, URL Scheme не шифрує дані. Будь-який додаток, що зареєстрував ту саму схему, може перехопити посилання. Для безпеки використовуйте Universal Links з HTTPS або наскрізне шифрування даних на рівні протоколу.

Підсумки

  • URL Scheme — кастомний URI-протокол для міжпрограмної взаємодії на мобільних платформах за стандартом RFC 3986.
  • Реєстрація схеми виконується в Info.plist для iOS та в AndroidManifest.xml для Android через механізм Intent Filter.
  • Обробка вхідного посилання в iOS відбувається через делегат додатка, в Android — через intent.getData() в цільовій Activity.
  • Параметри передаються через query-рядок з відсотковим кодуванням та обмеженням довжини до 2 КБ на iOS.
  • Обмеження — URL Scheme не працює за відсутності додатка; потрібні Universal Links або App Links для коректного fallback.
  • Альтернативи — Universal Links (iOS), App Links (Android) та комерційні платформи Firebase Dynamic Links і Branch.io.
  • Безпека — URL Scheme не шифрує дані, тому не підходить для передачі конфіденційної інформації.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також