Universal Link — mi ez, működési elv és beállítás

Szerző: IT Sectr Megjelenés: 2026-05-14 Olvasási idő: 9 perc

Az Universal Link egy Apple-mechanizmus (iOS 9+), amely lehetővé teszi a webes hivatkozások közvetlen megnyitását az alkalmazásban, megkerülve a Safarit. Ha az alkalmazás nincs telepítve, a hivatkozás zökkenőmentesen megnyílik a böngészőben. A kifejezést az Apple vezette be 2015-ben a WWDC-n a Handoff és a Continuity ökoszisztéma részeként. Az Apple Developer szerint az Universal Link egységes felhasználói élményt biztosít a web és a natív alkalmazás között választási párbeszédablakok nélkül.

Főbb pontok

  • Universal Link — egy szabványos https-hivatkozás, amely megnyitja az alkalmazást (iOS 9+) vagy a weboldalt (fallback)
  • apple-app-site-association — JSON-fájl a szerveren, amely megerősíti a domain kapcsolatát az alkalmazással
  • Biztonság — csak a domain tulajdonosa társíthat hivatkozásokat, kizárva a sémák elfogását
  • Egységes URL — egy hivatkozás működik weboldalként és belépésként az alkalmazásba
  • Handoff és Spotlight — az Universal Link integrálódik az Apple kereséssel és az eszközök közötti átvitellel

Universal Link egy szabványos HTTPS-hivatkozás https://example.com/page formában, amely iOS-eszközről kattintva a telepített alkalmazást nyitja meg a Safari helyett. A fő különbség a Custom URL Scheme-hez képest: az Universal Link nem igényli egyéni séma (myapp://) regisztrálását — egy szokásos domain kerül felhasználásra. Ez kiküszöböli az URL Scheme hijacking problémáját, amikor bármely alkalmazás regisztrálhatja ugyanazt a sémát.

Az Apple a WWDC 2015-ön mutatta be az Universal Link-et az iOS 9 keretében. A mechanizmus a Handoff és a Spotlight ökoszisztéma részévé vált: az Universal Link nemcsak a böngészőben működik, hanem a Spotlight keresési eredményeiben, a Mail, Messages és más rendszeralkalmazásokban is. Ezenkívül az Universal Link támogatott a watchOS-ben és macOS-ben — a felhasználó megnyithatja az alkalmazást iPhone-on egy Mac-en lévő hivatkozáson keresztül.

A legfontosabb előny: egységes URL. A fejlesztő nem kezel két különböző hivatkozást (egyet a webhez, egyet az alkalmazáshoz). Az Universal Link ugyanaz a https-hivatkozás. Ha az alkalmazás telepítve van — az nyílik meg. Ha nem — ugyanaz a hivatkozás nyílik meg a Safari-ban szokásos weboldalként. Ez ideális fallback-et biztosít forgalom elvesztése nélkül.

Az Universal Link mechanizmusa három szakaszból áll: asszociáció ellenőrzése, hivatkozás feldolgozása és fallback a böngészőbe. Minden szakasz kritikus a helyes működéshez. Ha az asszociáció nincs beállítva, az iOS a hivatkozást szokásos Safari-ba történő átmenetként kezeli. Vizsgáljuk meg részletesen az egyes szakaszokat.

Asszociáció ellenőrzése (Association Verification)

A hivatkozás első kattintásakor az iOS letölti az apple-app-site-association fájlt a szerverről a https://example.com/.well-known/apple-app-site-association címen. A fájl JSON-t tartalmaz a Team ID és Bundle ID azonosítókkal, valamint azon útvonalak listájával, amelyeket az alkalmazásnak meg kell nyitnia. Az iOS gyorsítótárazza ezt a fájlt, és időszakosan ellenőrzi annak aktualitását (alkalmazás frissítésekor, eszköz újraindításakor).

JSON-fájl az apple-app-site-association-nak HTTPS-en keresztül kell elérhetőnek lennie átirányítások nélkül. A szervernek Content-Type: application/json értéket kell visszaadnia. Fontos: a fájl nem rendelkezik .json kiterjesztéssel — az iOS szigorúan a /.well-known/apple-app-site-association útvonalon keresi. Az Apple azt is javasolja, hogy adjon hozzá Universal Link-támogatást a CDN-ben, és ellenőrizze, hogy a fájl nincs blokkolva a robots.txt által.

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

appID Team ID + Bundle ID (TEAMID.com.example.app) formában kerül kialakításra. paths — az alkalmazás által feldolgozandó URL-minták tömbje. Használható *, ? és NOT jelölés: ["NOT /admin/*", "/product/*"]. Az útvonalak a felsorolás sorrendjében kerülnek ellenőrzésre: az első egyezés határozza meg a viselkedést. Ha az útvonal nem egyezik — a hivatkozás a Safari-ban nyílik meg.

Hivatkozás feldolgozása (Link Handling)

Az asszociáció sikeres ellenőrzése után az iOS továbbítja a hivatkozást az alkalmazásnak. A feldolgozás az AppDelegate-ben történik az application(_:continue:restorationHandler:) metódussal NSUserActivity esetén, vagy a SceneDelegate-ben a scene(_:continue:) metódussal. A fejlesztő egy NSUserActivity objektumot kap NSUserActivityTypeBrowsingWeb típussal, kivonja az URL-t és a megfelelő képernyőre navigál.

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

    // Navigáció a képernyőre az URL szerint
    DeepLinkRouter.navigate(to: url)
    return true
}

A fenti példában a DeepLinkRouter egy egyéni osztály, amely elemzi az URL-t és meghívja a megfelelő navigációs koordinátort. SwiftUI esetén a feldolgozás az onOpenURL metódussal vagy az environment(\.openURL) módosítóval történik. Fontos, hogy ne csak az előtérben történő indítást (foreground) dolgozza fel, hanem azt az esetet is, amikor az alkalmazás nincs elindítva (cold start): az Universal Link ebben az esetben az indítási opciókon keresztül nyitja meg az alkalmazást.

Fallback a böngészőbe (Browser Fallback)

Ha az alkalmazás nincs telepítve, az iOS automatikusan megnyitja az Universal Link-et a Safari-ban. Ez a fő különbség a Custom URL Scheme-hez képest: a felhasználó nem lát hibát. A fallback ugyanazon domain szabványos weboldala. A fejlesztő ezen az oldalon elhelyezhet egy hivatkozást az App Store-ba, termékinformációt vagy alternatív tartalmat.

Fontos: a fallback nem testreszabható iOS szinten. Az iOS egyszerűen megnyitja az URL-t a Safari-ban. Ha eltérő tartalmat szeretne megjeleníteni a telepített és nem telepített alkalmazással rendelkező felhasználóknak, használja a Smart App Banner-t (meta-címke a Safari számára, amely az alkalmazás megnyitását javasolja) vagy JavaScript-észlelést az alkalmazás telepítésének felismerésére. Az Apple a SKAdNetwork-öt is biztosítja a telepítések attribúciójához Universal Link-en keresztül.

Az Universal Link és a hagyományos Deep Link (Custom URL Scheme) ugyanazt a feladatot oldja meg, de alapvetően különböznek az architektúrában és biztonságban. Custom URL Scheme — egy egyéni protokoll (myapp://), amely az Info.plist-ben regisztrálódik. Bármely alkalmazás regisztrálhatja ugyanazt a sémát (myapp://), és az iOS nem tudja meghatározni, melyik az "igazi". Ezt URL Scheme hijacking-nek nevezzük.

Universal Link a hijacking problémáját domain-ellenőrzésen keresztül oldja meg. Csak a domain tulajdonosa helyezhet el apple-app-site-association-t a szerverén, megerősítve a kapcsolatot egy adott Bundle ID-val. Két alkalmazás nem regisztrálhatja ugyanazt az Universal Link-et: ha konfliktus merül fel, az iOS az utoljára telepített alkalmazásnak ad prioritást, vagy megnyitja a Safarit.

Másik különbség: Fallback. A Custom URL Scheme-nek nincs fallback-je — ha az alkalmazás nincs telepítve, a böngésző hibát jelenít meg. Az Universal Link megnyitja a weboldalt. Az egységes URL azt jelenti, hogy a hivatkozás SEO-értéke megmarad (a hivatkozást a Google indexeli), és a felhasználó bármilyen eszközzel releváns tartalmat kap. Az Universal Link evolúciós lépés a deep link-től a unified link felé.

JellemzőCustom URL SchemeUniversal Link
Formátummyapp://pathhttps://domain/path
EllenőrzésNemapple-app-site-association
BiztonságSérülékeny hijacking-reCsak domain tulajdonosa
FallbackHibaWeboldal Safari-ban
iOS verzióiOS 3+iOS 9+

Beállítás az Universal Link szerver- és kliensoldali részeket foglal magában. Szerveroldali rész — az apple-app-site-association fájl elhelyezése a https://domain/.well-known/apple-app-site-association címen. Kliensoldali rész — a domain regisztrálása az Associated Domains-ben az Xcode-ban (Capabilities → Associated Domains → applinks:example.com). Ezt követően az alkalmazás automatikusan megkapja az összes Universal Link-et a megadott domainhez.

Beállítás lépései:

  1. Hozza létre az apple-app-site-association-t a helyes appID-val (TeamID.BundleID) és paths-szal
  2. Helyezze el a fájlt a szerveren a /.well-known/ útvonalon .json kiterjesztés nélkül
  3. Ellenőrizze az elérhetőséget: curl https://domain/.well-known/apple-app-site-association
  4. Adja hozzá a domaint az Associated Domains-hez (Xcode Capabilities)
  5. Valósítsa meg a feldolgozást NSUserActivity segítségével (AppDelegate vagy SceneDelegate)
  6. Tesztelje valós eszközön (a szimulátor nem ellenőrzi az asszociációt)

Hibakeresés Universal Link — gyakori fejfájás iOS-fejlesztők számára. A nem működő hivatkozások fő okai: az apple-app-site-association fájl nem érhető el HTTPS-en keresztül, helytelen appID, a Content-Type nem application/json, átirányítás a /.well-known útvonalról, a régi verzió gyorsítótárazása (visszaállítás a Settings → Developer → Associated Domains Development menüpontban). Az Apple a „Validation Checker" eszközt biztosítja az Apple Developer Console-ban az asszociáció teszteléséhez.

Branch és más MMP-platformok egyszerűsítik az Universal Link beállítását: automatikusan generálják az apple-app-site-association-t és saját domainjükön hosztolják. A fejlesztőnek csak a Branch domaint kell hozzáadnia az Associated Domains-hez és integrálnia az SDK-t. Ez különösen kényelmes azon startupok számára, amelyek nem rendelkeznek saját szerverinfrastruktúrával az AASA-fájl hosztolásához.

Korlátozások és kompatibilitás

Universal Link számos korlátozással rendelkezik. Első: az apple-app-site-association fájlnak szigorúan HTTPS-en keresztül kell elérhetőnek lennie (HTTP nem támogatott). Második: a hivatkozásnak ugyanarra a domainre kell mutatnia, amely az Associated Domains-ben van megadva. Több domain közötti Universal Link nem működik — minden domainhez külön bejegyzés szükséges a Capabilities-ben és külön AASA-fájl. Harmadik: az Universal Link nem működik WKWebView-ban — csak Safari-ban és rendszerkomponensekben.

Kompatibilitás: iOS 9.0+ (Universal Link), watchOS 6.0+ (Handoff Universal Link), macOS 10.15+ (Catalyst és Mac alkalmazások). Az iOS régebbi verzióiban a hivatkozás a Safari-ban nyílik meg. Ez azt jelenti, hogy iOS 8-on (az eszközök kevesebb mint 1%-a) az Universal Link nem fog működni. Javasolt a Custom URL Scheme támogatása is fallback-ként a régi eszközökhöz, ha a közönség tartalmaz elavult verziójú felhasználókat.

iOS 16+ változások: Az Apple javította az Universal Link feldolgozását SwiftUI esetén. Megjelent egy új environment(\.openURL) módosító késleltetett feldolgozási lehetőséggel. Az iOS 16 lehetővé teszi az Universal Link megnyitását az alkalmazásban akár SFSafariViewController-en keresztül is. iOS 16 felhasználók számára javasolt a teljes átállás a SwiftUI-alapú Universal Link feldolgozásra, az AppDelegate kódot csak visszamenőleges kompatibilitás céljából megtartva.

Gyakran ismételt kérdések

Miben különbözik az Universal Link a Custom URL Scheme-től?

Universal Link szabványos HTTPS-URL-t használ, és egy szerveren lévő fájlon keresztül ellenőrződik. A Custom URL Scheme egyéni protokollt (myapp://) használ ellenőrzés nélkül, ami sebezhetővé teszi egy másik, ugyanazt a sémát regisztráló alkalmazás általi elfogásra.

Hova kell helyezni az apple-app-site-association-t?

A fájl a HTTPS-szerver gyökerébe kerül a /.well-known/apple-app-site-association útvonalon (.json kiterjesztés nélkül). A szervernek Content-Type: application/json-t kell visszaadnia. Fontos: nincs átirányítás, a fájlnak közvetlenül elérhetőnek kell lennie.

Miért nem nyitja meg az Universal Link az alkalmazást?

Fő okok: helytelen Team ID vagy Bundle ID az AASA-fájlban, a fájl nem érhető el HTTPS-en keresztül, átirányítás, helytelen Content-Type, régi verzió gyorsítótárazása. Ellenőrizze a Developer → Associated Domains Development menüpontban, és állítsa vissza a gyorsítótárat az eszköz újraindításával.

Használható az Universal Link weboldal nélkül?

Nem — az Universal Linkhez HTTPS-szerver szükséges, amelyen az apple-app-site-association található. Domain nélkül az Universal Link nem működik. Alternatíva: Custom URL Scheme (kevésbé biztonságos) vagy harmadik fél szolgáltatásai (Branch, Firebase) saját domainnel.

Működik az Universal Link Androidon?

Nem — az Universal Link az Apple kizárólagos technológiája iOS, iPadOS, watchOS és macOS rendszerekhez. Androidon a megfelelője App Link (Android 6.0+) néven ismert, amely apple-app-site-association helyett Digital Asset Links (assetlinks.json) fájlt használ.

Összefoglalás

  • Universal Link — https-hivatkozás, amely iOS 9+-on megnyitja az alkalmazást vagy a weboldalt a Safari-ban fallback-ként
  • apple-app-site-association — JSON-fájl a szerveren, amely ellenőrzi a domain kapcsolatát az alkalmazással
  • Biztonság — a Custom URL Scheme-től eltérően az Universal Link védett a harmadik féltől származó alkalmazások általi elfogástól
  • Egységes URL — egy hivatkozás működik a telepített és nem telepített alkalmazással rendelkező felhasználók számára
  • Handoff és Spotlight — az Universal Link integrálódik az Apple Continuity ökoszisztémával
  • Beállítás szerveroldali részt (AASA-fájl) és kliensoldali részt (Associated Domains + NSUserActivity) foglal magában
  • Tesztelés csak valós eszközön — a szimulátor nem ellenőrzi a domain asszociációt

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is