URL Scheme: co to je, jak funguje a používá se ve vývoji

Autor: IT Sectr Publikováno: 2026-05-14 Doba čtení: 8 min

URL Scheme je vlastní URI protokol, který mobilní aplikace registruje v operačním systému pro otevírání pomocí odkazů ve tvaru myapp://path. Podle RFC 3986 schéma URI definuje syntaxi a sémantiku všech následujících komponent adresy. Při kliknutí na takový odkaz systém identifikuje registrovanou aplikaci podle unikátního identifikátoru a spustí ji s parametry extrahovanými z odkazu. Deep link založený na URL Scheme zůstává základním mechanismem navigace mezi aplikacemi na mobilních platformách, navzdory vzniku modernějších alternativ.

Hlavní body

  • URL Scheme — vlastní protokol odkazů ve tvaru myapp://path, který aplikace registruje pro otevírání z jiných aplikací nebo prohlížeče.
  • Syntaxe zahrnuje schéma, host, cestu a query parametry podle standardu RFC 3986, což zajišťuje flexibilní přenos dat mezi aplikacemi.
  • iOS používá CFBundleURLTypes v Info.plist a delegáta AppDelegate pro zpracování příchozích URL Scheme s navigačními parametry.
  • Android aplikuje Intent Filter v AndroidManifest.xml s uvedením action, category a data pro směrování deep link na cílovou Activity.
  • Omezení — URL Scheme nefunguje při absenci aplikace, což je řešeno pomocí Universal Links na iOS a App Links na Android.

Co je URL Scheme?

URL Scheme — je unikátní identifikátor protokolu, který aplikace registruje v operačním systému pro příjem volání prostřednictvím vlastních odkazů. Když uživatel klikne na odkaz jako myapp://profile/123, systém identifikuje aplikaci, která zaregistrovala schéma myapp, a předá jí řízení s úplným URI. Tento mechanismus umožňuje aplikacím vyměňovat si data a otevírat se navzájem bez serverové infrastruktury.

Koncept URL Scheme je přímo převzat z webových standardů RFC 3986, kde schéma URI je první komponentou každého univerzálního identifikátoru zdroje. V mobilním vývoji byla tato myšlenka adaptována pro komunikaci mezi aplikacemi, kde místo HTTP serveru vystupuje sama aplikace zpracovávající odkaz.

Příklady známých URL Scheme

Mnoho populárních aplikací registruje vlastní URL Scheme pro integraci s externími službami. Například Spotify používá schéma spotify://, Telegram — tg:// a Instagram — instagram://. Vývojáři také často vytvářejí schéma ve tvaru appname:// pro interní navigaci a testování obrazovek.

URL Scheme jsou stále široce používány v push notifikacích, e-mailových kampaních a QR kódech, kde je vyžadován okamžitý přechod do konkrétní sekce aplikace. Od iOS 9 a Android 6 se však objevily alternativní mechanismy, které postupně doplňují a nahrazují holá schémata.

Syntaxe URL Scheme: schéma, host a cesta

Struktura vlastního URI podléhá obecné specifikaci RFC 3986 a skládá se z několika komponent. Schéma se uvádí jako první a je odděleno dvojtečkou od zbytku adresy. Po schématu mohou následovat host, port, cesta, query parametry a fragment, z nichž každý je volitelný.

Úplná syntaxe vypadá jako scheme://host/path?key=value#fragment. Schéma je jediným povinným prvkem, ostatní jsou určeny potřebami konkrétní implementace. Dvojité lomítko za schématem historicky pochází z HTTP a není podle specifikace striktně povinné, ale všude se používá jako konvence.

Komponenty URI

Pro vizuální znázornění struktury URI se používá tabulka komponent. Každý prvek má svůj účel a úroveň povinnosti.

KomponentaPříkladPovinnost
SchememyappAno
HostprofileNe
Path/user/42Ne
Query?id=42&tab=mainNe
Fragment#section2Ne

Vývojáři mohou volně zvolit strukturu URI, což poskytuje flexibilitu, ale vytváří problémy s kompatibilitou mezi různými verzemi aplikace. Doporučuje se dokumentovat formát URL Scheme jako součást veřejného API aplikace a verzovat jej při změně.

Jak funguje URL Scheme v iOS

iOS vyžaduje explicitní registraci každého URL Scheme v souboru Info.plist projektu. Vývojář přidá pole CFBundleURLTypes, jehož každý prvek obsahuje identifikátor (CFBundleURLName) a seznam podporovaných schémat (CFBundleURLSchemes). Po registraci systém automaticky směruje všechna příchozí volání na registrovaná schémata do aplikace.

Zpracování příchozího URL Scheme probíhá v delegátu aplikace prostřednictvím metody application(_:open:options:). Tato metoda obdrží objekt URL, z něhož se extrahuje cesta a query parametry pro rozhodnutí o navigaci. Zpracování musí vrátit hodnotu Bool indikující úspěšnost operace.

Zpracování v AppDelegate

Níže je uveden příklad implementace obsluhy URL Scheme v jazyce Swift. Kód demonstruje extrakci hosta a query parametrů z příchozího URI pomocí 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
}

Metoda používá URLComponents pro bezpečné parsování query parametrů. Tento přístup je preferován před ručním zpracováním řetězce, protože automaticky zvládá procentuální kódování a dekódování speciálních znaků v hodnotách parametrů.

Jak funguje URL Scheme v Android

Android používá systém Intent Filter pro směrování deep link na základě URL Scheme. Vývojář deklaruje filtr v AndroidManifest.xml uvnitř tagu Activity, která má odkaz zpracovávat. Filtr obsahuje action VIEW, kategorie BROWSABLE a DEFAULT a tag data s uvedením schématu, hosta a pathPrefix.

Když uživatel klikne na odkaz s vlastním schématem, systém zkontroluje Intent Filter všech nainstalovaných aplikací. Pokud je nalezeno několik vhodných aplikací, uživateli se zobrazí dialog výběru. Kategorie BROWSABLE umožňuje zpracování odkazu z prohlížeče.

Nastavení Intent Filter

Příklad deklarace Intent Filter v AndroidManifest.xml pro zpracování schématu myapp na Activity. Kombinace action a category je povinná pro správné směrování 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>

Po nastavení filtru je v Activity nutné zavolat intent.getData() pro získání URI. Je důležité zkontrolovat intent a data na null, protože Activity může být spuštěna bez příchozího deep link, například při standardním spuštění z launcheru.

Předávání parametrů přes URL Scheme

Query parametry v URL Scheme se předávají za otazníkem ve formátu klíč=hodnota, oddělené ampersandem. Tento formát je totožný s HTTP požadavky a snadno se zpracovává standardními nástroji platformy. Parametry musí být kódovány pomocí procentuálního kódování pro všechny znaky, které nepatří do povolené sady URI.

Příklad úplného odkazu s parametry: myapp://profile?userId=42&source=email&ref=abc123. Po extrakci URL aplikace sekvenčně parsuje všechny query-items a na základě jejich hodnot rozhoduje o navigaci na cílovou obrazovku.

Omezení délky URI

Při předávání složitých dat je důležité zohlednit omezení délky URI. V iOS je maximální délka URL Scheme omezena na 2 KB, po jejímž překročení systém odkaz zkrátí. V Android je limit přibližně 8 KB, ale přesná hodnota závisí na verzi operačního systému a výrobci zařízení. Pro velké objemy dat se doporučuje předávat pouze identifikátor relace přes URL Scheme a zbývající data načítat ze serveru.

Omezení a alternativy URL Scheme

Hlavní nevýhodou URL Scheme — neschopnost zpracovat odkaz, pokud aplikace není nainstalována na zařízení. Prohlížeč zobrazí chybu a uživatel ztratí kontext přechodu. K vyřešení tohoto problému Apple zavedl Universal Links v iOS 9 a Google — App Links v Android 6. Oba mechanismy se registrují pomocí webové domény připojené k aplikaci.

Universal Links a App Links fungují jako běžné HTTPS odkazy, ale při nainstalované aplikaci ji otevírají bez dialogu výběru. Pokud aplikace není nainstalována, odkaz otevře webovou stránku na stejné doméně, čímž zachovává uživatelský zážitek. To z nich činí preferovanou alternativu pro produkční prostředí.

Mechanismy fallback

Pro URL Scheme na iOS a Android neexistuje vestavěný mechanismus fallback. Vývojáři používají mezilehlá serverová řešení: odkaz vede na webovou stránku, která kontroluje instalaci aplikace pomocí JavaScript a přesměrovává buď na schéma, nebo do obchodu s aplikacemi. Firebase Dynamic Links a Branch.io nabízejí hotová řešení tohoto problému s podporou deferred deep link, která automaticky určují stav instalace a směrují uživatele bez nutnosti vyvíjet vlastní serverový pipeline.

Další složitost vzniká při použití URL Scheme v iOS 15+ a Android 12+, kde byly zpřísněny pravidla ochrany soukromí. Safari blokuje pokusy o otevření neregistrovaného schématu bez předchozího potvrzení a Android 12 omezuje viditelnost nainstalovaných aplikací přes PackageManager. Tyto změny činí použití URL Scheme pro interakci mezi aplikacemi méně spolehlivým než v dřívějších verzích platforem.

Často kladené otázky

Čím se URL Scheme liší od Universal Links?

URL Scheme používá vlastní protokol bez šifrování, zatímco Universal Links fungují přes HTTPS s ověřením domény. Universal Links nevyvolávají dialog výběru aplikace a jsou správně zpracovány při absenci aplikace na zařízení.

Může URL Scheme obsahovat cyrilické znaky?

Ano, ale všechny ne-ASCII znaky musí být kódovány pomocí percent-encoding podle RFC 3986. Doporučuje se vyhýbat se cyrilici v URL Scheme pro zajištění kompatibility se staršími verzemi operačních systémů a prohlížečů.

Kolik URL Scheme může zaregistrovat jedna aplikace?

Neexistují omezení počtu schémat ani v iOS, ani v Android. V praxi aplikace používají jedno až pět schémat. Například Telegram registruje schémata tg://, t.me/, telegram:// a telegram.me://.

Jak zkontrolovat, zda zařízení podporuje mé URL Scheme?

V iOS se používá metoda canOpenURL(_:), která vrací true při existenci registrovaného schématu. V Android se kontrola provádí přes PackageManager.queryIntentActivities(). Obě platformy vyžadují předchozí uvedení schématu v konfiguraci.

Lze přenášet hesla přes URL Scheme?

Ne, URL Scheme nešifruje data. Jakákoli aplikace, která zaregistrovala stejné schéma, může odkaz zachytit. Pro bezpečnost používejte Universal Links s HTTPS nebo šifrování dat na úrovni protokolu.

Shrnutí

  • URL Scheme — vlastní URI protokol pro interakci mezi aplikacemi na mobilních platformách podle standardu RFC 3986.
  • Registrace schématu probíhá v Info.plist pro iOS a v AndroidManifest.xml pro Android pomocí mechanismu Intent Filter.
  • Zpracování příchozího odkazu v iOS probíhá přes delegáta aplikace, v Android — přes intent.getData() v cílové Activity.
  • Parametry se předávají přes query-string s procentuálním kódováním a omezením délky do 2 KB na iOS.
  • Omezení — URL Scheme nefunguje při absenci aplikace; pro správný fallback jsou vyžadovány Universal Links nebo App Links.
  • Alternativy — Universal Links (iOS), App Links (Android) a komerční platformy Firebase Dynamic Links a Branch.io.
  • Bezpečnost — URL Scheme nešifruje data, proto není vhodný pro přenos důvěrných informací.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také