Universal Link — co to je, princip fungování a nastavení

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

Universal Link je mechanismus Apple (iOS 9+), který umožňuje otevírat webové odkazy přímo v aplikaci, aniž by se otevřel Safari. Pokud aplikace není nainstalována, odkaz se bez problémů otevře v prohlížeči. Termín zavedl Apple v roce 2015 na WWDC jako součást Handoff a ekosystému Continuity. Podle Apple Developer poskytuje Universal Link jednotný uživatelský zážitek mezi webem a nativní aplikací bez dialogů výběru.

Hlavní body

  • Universal Link — standardní https odkaz, který otevře aplikaci (iOS 9+) nebo web (fallback)
  • apple-app-site-association — JSON soubor na serveru potvrzující spojení domény s aplikací
  • Bezpečnost — pouze vlastník domény může přiřazovat odkazy, což vylučuje zachycení schémat
  • Jednotné URL — jeden odkaz funguje jako webová stránka i jako vstup do aplikace
  • Handoff a Spotlight — Universal Link se integruje s vyhledáváním Apple a přenosem mezi zařízeními

Universal Link je standardní HTTPS odkaz ve tvaru https://example.com/page, který po kliknutí ze zařízení iOS otevře nainstalovanou aplikaci místo Safari. Hlavní rozdíl oproti Custom URL Scheme: Universal Link nevyžaduje registraci vlastního schématu (myapp://) — používá se běžná doména. Tím se eliminuje problém URL Scheme hijacking, kdy jakákoli aplikace může zaregistrovat stejné schéma.

Apple představil Universal Link na WWDC 2015 v rámci iOS 9. Mechanismus se stal součástí ekosystému Handoff a Spotlight: Universal Link funguje nejen v prohlížeči, ale také ve výsledcích vyhledávání Spotlight, v Mail, Messages a dalších systémových aplikacích. Kromě toho je Universal Link podporován v watchOS a macOS — uživatel může otevřít aplikaci na iPhonu pomocí odkazu na Macu.

Klíčová výhoda: jednotné URL. Vývojář nespravuje dva různé odkazy (jeden pro web, druhý pro aplikaci). Universal Link je stejný https odkaz. Pokud je aplikace nainstalována — otevře se ona. Pokud ne — stejný odkaz se otevře v Safari jako běžná webová stránka. To poskytuje ideální fallback bez ztráty návštěvnosti.

Mechanismus Universal Link se skládá ze tří fází: ověření asociace, zpracování odkazu a fallback do prohlížeče. Každá fáze je kritická pro správnou funkci. Pokud asociace není nakonfigurována, iOS považuje odkaz za běžný přechod do Safari. Podívejme se na každou fázi podrobně.

Ověření asociace (Association Verification)

Při prvním kliknutí na odkaz iOS stáhne soubor apple-app-site-association ze serveru na adrese https://example.com/.well-known/apple-app-site-association. Soubor obsahuje JSON s identifikátorem Team ID a Bundle ID aplikace a seznam cest, které má aplikace otevírat. iOS tento soubor ukládá do mezipaměti a pravidelně kontroluje jeho aktuálnost (při aktualizaci aplikace, restartu zařízení).

JSON soubor apple-app-site-association musí být přístupný přes HTTPS bez přesměrování. Server musí vracet Content-Type: application/json. Důležité: soubor nemá příponu .json — iOS jej hledá striktně na cestě /.well-known/apple-app-site-association. Apple také doporučuje přidat podporu pro Universal Link v CDN a zkontrolovat, že soubor není blokován robots.txt.

json
// apple-app-site-association — minimální konfigurace
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAMID.com.example.app",
                "paths": ["/product/*", "/profile/*", "/search"]
            }
        ]
    }
}

appID se tvoří jako Team ID + Bundle ID (TEAMID.com.example.app). paths — pole URL vzorů, které má aplikace zpracovávat. Lze použít *, ? a NOT notaci: ["NOT /admin/*", "/product/*"]. Cesty se kontrolují v pořadí výčtu: první shoda určuje chování. Pokud cesta neodpovídá — odkaz se otevře v Safari.

Zpracování odkazu (Link Handling)

Po úspěšném ověření asociace iOS předá odkaz aplikaci. Zpracování probíhá v AppDelegate přes metodu application(_:continue:restorationHandler:) pro NSUserActivity nebo v SceneDelegate přes scene(_:continue:). Vývojář obdrží objekt NSUserActivity s typem NSUserActivityTypeBrowsingWeb, extrahuje URL a naviguje na odpovídající obrazovku.

swift
// Zpracování Universal Link v AppDelegate
func application(
    _ application: UIApplication,
    continue userActivity: NSUserActivity,
    restorationHandler: @escaping UIUserActivityRestorationHandler
) -> Bool {
    guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
          let url = userActivity.webpageURL
    else { return false }

    // Navigace na obrazovku podle URL
    DeepLinkRouter.navigate(to: url)
    return true
}

DeepLinkRouter v uvedeném příkladu je vlastní třída, která parsuje URL a volá příslušný navigační koordinátor. Pro SwiftUI se zpracování provádí pomocí metody onOpenURL nebo modifikátoru environment(\.openURL). Je důležité zpracovat nejen spuštění v popředí (foreground), ale také případ, kdy aplikace není spuštěna (cold start): Universal Link v tomto případě otevře aplikaci pomocí možností spuštění.

Fallback do prohlížeče (Browser Fallback)

Pokud aplikace není nainstalována, iOS automaticky otevře Universal Link v Safari. To je klíčový rozdíl oproti Custom URL Scheme: uživatel nevidí chybu. Fallback je standardní webová stránka stejné domény. Vývojář může na této stránce umístit odkaz na App Store, informace o produktu nebo alternativní obsah.

Důležité: fallback nelze přizpůsobit na úrovni iOS. iOS jednoduše otevře URL v Safari. Chcete-li zobrazit odlišný obsah uživatelům s nainstalovanou a nenainstalovanou aplikací, použijte Smart App Banner (meta tag pro Safari navrhující otevření aplikace) nebo detekci instalace aplikace pomocí JavaScriptu. Apple také poskytuje SKAdNetwork pro atribuci instalací prostřednictvím Universal Link.

Universal Link a tradiční Deep Link (Custom URL Scheme) řeší stejný úkol, ale zásadně se liší architekturou a bezpečností. Custom URL Scheme — vlastní protokol (myapp://), který se registruje v Info.plist. Jakákoli aplikace může zaregistrovat stejné schéma (myapp://) a iOS nemůže určit, která je „skutečná". Tomu se říká URL Scheme hijacking.

Universal Link řeší problém hijackingu pomocí ověření domény. Pouze vlastník domény může umístit apple-app-site-association na svůj server a potvrdit spojení s konkrétním Bundle ID. Dvě aplikace nemohou zaregistrovat stejný Universal Link: pokud dojde ke konfliktu, iOS dá prioritu naposledy nainstalované aplikaci nebo otevře Safari.

Další rozdíl: Fallback. Custom URL Scheme nemá fallback — pokud aplikace není nainstalována, prohlížeč zobrazí chybu. Universal Link otevře web. Jednotné URL znamená, že SEO hodnota odkazu zůstává zachována (odkaz je indexován Googlem) a uživatel s jakýmkoli zařízením obdrží relevantní obsah. Universal Link je evoluční krok od deep link k unified link.

VlastnostCustom URL SchemeUniversal Link
Formátmyapp://pathhttps://domain/path
OvěřeníNeapple-app-site-association
BezpečnostZranitelný vůči hijackinguPouze vlastník domény
FallbackChybaWeb v Safari
Verze iOSiOS 3+iOS 9+

Nastavení Universal Link zahrnuje serverovou a klientskou část. Serverová část — umístění souboru apple-app-site-association na adrese https://domain/.well-known/apple-app-site-association. Klientská část — registrace domény v Associated Domains v Xcode (Capabilities → Associated Domains → applinks:example.com). Poté aplikace automaticky přijímá všechny Universal Link pro zadanou doménu.

Kroky nastavení:

  1. Vytvořte apple-app-site-association se správným appID (TeamID.BundleID) a paths
  2. Umístěte soubor na server na cestu /.well-known/ bez přípony .json
  3. Zkontrolujte dostupnost: curl https://domain/.well-known/apple-app-site-association
  4. Přidejte doménu do Associated Domains (Xcode Capabilities)
  5. Implementujte zpracování přes NSUserActivity (AppDelegate nebo SceneDelegate)
  6. Otestujte na skutečném zařízení (simulátor neověřuje asociaci)

Ladění Universal Link — častá bolest hlavy iOS vývojářů. Hlavní příčiny nefunkčních odkazů: soubor apple-app-site-association není dostupný přes HTTPS, nesprávné appID, Content-Type není application/json, přesměrování z cesty /.well-known, ukládání staré verze do mezipaměti (reset přes Settings → Developer → Associated Domains Development). Apple poskytuje nástroj "Validation Checker" v Apple Developer Console pro testování asociace.

Branch a další MMP platformy zjednodušují nastavení Universal Link: generují apple-app-site-association automaticky a hostují jej na své vlastní doméně. Vývojář stačí přidat doménu Branch do Associated Domains a integrovat SDK. To je zvláště výhodné pro startupy, které nemají vlastní serverovou infrastrukturu pro hostování AASA souboru.

Omezení a kompatibilita

Universal Link má několik omezení. Za prvé: soubor apple-app-site-association musí být přístupný striktně přes HTTPS (HTTP není podporováno). Za druhé: odkaz musí vést na stejnou doménu, která je uvedena v Associated Domains. Mezidoménové Universal Link nefungují — pro každou doménu je potřeba samostatný záznam v Capabilities a samostatný AASA soubor. Za třetí: Universal Link nefunguje ve WKWebView — pouze v Safari a systémových komponentách.

Kompatibilita: iOS 9.0+ (Universal Link), watchOS 6.0+ (Handoff Universal Link), macOS 10.15+ (Catalyst a Mac aplikace). Ve starších verzích iOS se odkaz otevře v Safari. To znamená, že na iOS 8 (méně než 1 % zařízení) Universal Link nebude fungovat. Doporučuje se podporovat také Custom URL Scheme jako fallback pro stará zařízení, pokud publikum zahrnuje uživatele se zastaralými verzemi.

Změny v iOS 16+: Apple vylepšil zpracování Universal Link pro SwiftUI. Objevil se nový modifikátor environment(\.openURL) s možností odloženého zpracování. iOS 16 také umožňuje otevřít Universal Link v aplikaci dokonce i přes SFSafariViewController. Pro uživatele iOS 16 se doporučuje zcela přejít na SwiftUI zpracování Universal Link a ponechat kód AppDelegate pouze pro zpětnou kompatibilitu.

Často kladené otázky

Čím se Universal Link liší od Custom URL Scheme?

Universal Link používá standardní HTTPS-URL a je ověřován prostřednictvím souboru na serveru. Custom URL Scheme používá vlastní protokol (myapp://) bez ověření, což jej činí zranitelným vůči zachycení jinou aplikací, která zaregistrovala stejné schéma.

Kam umístit apple-app-site-association?

Soubor se umísťuje do kořene HTTPS serveru na cestu /.well-known/apple-app-site-association (bez přípony .json). Server musí vracet Content-Type: application/json. Důležité: žádná přesměrování, soubor musí být přímo přístupný.

Proč Universal Link neotevírá aplikaci?

Hlavní příčiny: nesprávné Team ID nebo Bundle ID v AASA souboru, soubor není dostupný přes HTTPS, přesměrování, nesprávný Content-Type, ukládání staré verze do mezipaměti. Zkontrolujte přes Developer → Associated Domains Development a resetujte mezipaměť restartováním zařízení.

Lze Universal Link použít bez webové stránky?

Ne — Universal Link vyžaduje HTTPS server, na kterém je umístěn apple-app-site-association. Bez domény Universal Link nefunguje. Alternativa: Custom URL Scheme (méně bezpečné) nebo služby třetích stran (Branch, Firebase) s vlastní doménou.

Funguje Universal Link na Androidu?

Ne — Universal Link je exkluzivní technologie Apple pro iOS, iPadOS, watchOS a macOS. Na Androidu se analog nazývá App Link (Android 6.0+), který používá Digital Asset Links (assetlinks.json) místo apple-app-site-association.

Shrnutí

  • Universal Link — https odkaz otevírající aplikaci na iOS 9+ nebo web v Safari jako fallback
  • apple-app-site-association — JSON soubor na serveru ověřující spojení domény s aplikací
  • Bezpečnost — na rozdíl od Custom URL Scheme je Universal Link chráněn před zachycením aplikacemi třetích stran
  • Jednotné URL — jeden odkaz funguje pro uživatele s i bez nainstalované aplikace
  • Handoff a Spotlight — Universal Link se integruje s ekosystémem Apple Continuity
  • Nastavení zahrnuje serverovou část (AASA soubor) a klientskou část (Associated Domains + NSUserActivity)
  • Testování pouze na skutečném zařízení — simulátor neověřuje asociaci domény

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é