Universal Link — vad är det, funktionsprincip och konfiguration

Författare: IT Sectr Publicerad: 2026-05-14 Lästid: 9 min

Universal Link är en Apple-mekanism (iOS 9+) som gör det möjligt att öppna webblänkar direkt i appen, utan att gå via Safari. Om appen inte är installerad öppnas länken sömlöst i webbläsaren. Termen introducerades av Apple 2015 på WWDC som en del av Handoff och Continuity-ekosystemet. Enligt Apple Developer ger Universal Link en enhetlig användarupplevelse mellan webben och den ursprungliga appen utan valdialogrutor.

Huvudpunkter

  • Universal Link — en standard https-länk som öppnar appen (iOS 9+) eller webbplatsen (fallback)
  • apple-app-site-association — JSON-fil på servern som bekräftar domänens koppling till appen
  • Säkerhet — endast domänägaren kan associera länkar, vilket utesluter kapning av scheman
  • Enhetlig URL — en länk fungerar både som webbsida och som ingång till appen
  • Handoff och Spotlight — Universal Link integreras med Apples sökning och överföring mellan enheter

Universal Link är en standard HTTPS-länk av formen https://example.com/page som vid klick från en iOS-enhet öppnar den installerade appen istället för Safari. Den främsta skillnaden från Custom URL Scheme: Universal Link kräver inte registrering av ett anpassat schema (myapp://) — en vanlig domän används. Detta eliminerar problemet med URL Scheme hijacking, där vilken app som helst kan registrera samma schema.

Apple introducerade Universal Link på WWDC 2015 inom ramen för iOS 9. Mekanismen blev en del av Handoff- och Spotlight-ekosystemet: Universal Link fungerar inte bara i webbläsaren, utan även i Spotlight-sökresultat, i Mail, Messages och andra systemappar. Dessutom stöds Universal Link i watchOS och macOS — användaren kan öppna appen på iPhone via en länk på Mac.

Den viktigaste fördelen: enhetlig URL. Utvecklaren hanterar inte två olika länkar (en för webben, en för appen). Universal Link är samma https-länk. Om appen är installerad — öppnas den. Om inte — öppnas samma länk i Safari som en vanlig webbsida. Detta ger en idealisk fallback utan förlust av trafik.

Universal Link-mekanismen består av tre steg: associationsverifiering, länkhantering och fallback till webbläsaren. Varje steg är avgörande för korrekt funktion. Om associationen inte är konfigurerad behandlar iOS länken som en vanlig övergång till Safari. Låt oss titta på varje steg i detalj.

Associationsverifiering (Association Verification)

Vid första klicket på länken laddar iOS ner filen apple-app-site-association från servern på adressen https://example.com/.well-known/apple-app-site-association. Filen innehåller JSON med Team ID och Bundle ID för appen, samt en lista över sökvägar som appen ska öppna. iOS cachar denna fil och kontrollerar regelbundet dess aktualitet (vid uppdatering av appen, omstart av enheten).

JSON-filen apple-app-site-association måste vara tillgänglig via HTTPS utan omdirigeringar. Servern måste returnera Content-Type: application/json. Viktigt: filen har inte .json-tillägg — iOS söker efter den strikt på sökvägen /.well-known/apple-app-site-association. Apple rekommenderar också att lägga till stöd för Universal Link i CDN och kontrollera att filen inte blockeras av robots.txt.

json
// apple-app-site-association —最小配置
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAMID.com.example.app",
                "paths": ["/product/*", "/profile/*", "/search"]
            }
        ]
    }
}

appID bildas som Team ID + Bundle ID (TEAMID.com.example.app). paths — en array av URL-mönster som appen ska bearbeta. Man kan använda *, ? och NOT-notation: ["NOT /admin/*", "/product/*"]. Sökvägar kontrolleras i den ordning de listas: den första träffen bestämmer beteendet. Om sökvägen inte matchar — öppnas länken i Safari.

Länkhantering (Link Handling)

Efter framgångsrik verifiering av associationen skickar iOS länken till appen. Hanteringen sker i AppDelegate via metoden application(_:continue:restorationHandler:) för NSUserActivity eller i SceneDelegate via scene(_:continue:). Utvecklaren får ett NSUserActivity-objekt med typen NSUserActivityTypeBrowsingWeb, extraherar URL:en och navigerar till motsvarande skärm.

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

    // Navigering till skärm enligt URL
    DeepLinkRouter.navigate(to: url)
    return true
}

DeepLinkRouter i exemplet ovan är en anpassad klass som tolkar URL:en och anropar lämplig navigeringskoordinator. För SwiftUI sker hanteringen via metoden onOpenURL eller modifieraren environment(\.openURL). Det är viktigt att inte bara hantera start i förgrunden (foreground), utan även fallet när appen inte är startad (cold start): Universal Link öppnar i detta fall appen via startalternativen.

Fallback till webbläsare (Browser Fallback)

Om appen inte är installerad öppnar iOS automatiskt Universal Link i Safari. Detta är den viktigaste skillnaden från Custom URL Scheme: användaren ser inget fel. Fallback är en vanlig webbsida på samma domän. Utvecklaren kan på denna sida placera en länk till App Store, produktinformation eller alternativt innehåll.

Viktigt: fallback kan inte anpassas på iOS-nivå. iOS öppnar helt enkelt URL:en i Safari. För att visa olika innehåll för användare med installerad och inte installerad app, använd Smart App Banner (en meta-tagg för Safari som föreslår att öppna appen) eller JavaScript-detektion av appinstallation. Apple tillhandahåller också SKAdNetwork för attribuering av installationer via Universal Link.

Universal Link och traditionell Deep Link (Custom URL Scheme) löser samma uppgift men skiljer sig fundamentalt i arkitektur och säkerhet. Custom URL Scheme — ett anpassat protokoll (myapp://) som registreras i Info.plist. Vilken app som helst kan registrera samma schema (myapp://), och iOS kan inte avgöra vilken som är "äkta". Detta kallas URL Scheme hijacking.

Universal Link löser hijacking-problemet genom domänverifiering. Endast domänägaren kan placera apple-app-site-association på sin server och bekräfta kopplingen till ett specifikt Bundle ID. Två appar kan inte registrera samma Universal Link: om en konflikt uppstår ger iOS prioritet till den senast installerade appen eller öppnar Safari.

En annan skillnad: Fallback. Custom URL Scheme har ingen fallback — om appen inte är installerad visar webbläsaren ett fel. Universal Link öppnar webbplatsen. Enhetlig URL innebär att länkens SEO-värde bevaras (länken indexeras av Google) och användaren med vilken enhet som helst får relevant innehåll. Universal Link är ett evolutionärt steg från deep link till unified link.

EgenskapCustom URL SchemeUniversal Link
Formatmyapp://pathhttps://domain/path
VerifieringNejapple-app-site-association
SäkerhetSårbar för hijackingEndast domänägare
FallbackFelWebbplats i Safari
iOS-versioniOS 3+iOS 9+

Konfiguration av Universal Link omfattar server- och klientsidan. Serverdelen — placering av filen apple-app-site-association på adressen https://domain/.well-known/apple-app-site-association. Klientdelen — registrering av domänen i Associated Domains i Xcode (Capabilities → Associated Domains → applinks:example.com). Därefter tar appen automatiskt emot alla Universal Links för den angivna domänen.

Konfigurationssteg:

  1. Skapa apple-app-site-association med korrekt appID (TeamID.BundleID) och paths
  2. Placera filen på servern på sökvägen /.well-known/ utan .json-tillägg
  3. Kontrollera tillgänglighet: curl https://domain/.well-known/apple-app-site-association
  4. Lägg till domänen i Associated Domains (Xcode Capabilities)
  5. Implementera hantering via NSUserActivity (AppDelegate eller SceneDelegate)
  6. Testa på en verklig enhet (simulatorn verifierar inte association)

Felsökning av Universal Link — en vanlig huvudvärk för iOS-utvecklare. Främsta orsaker till icke-fungerande länkar: filen apple-app-site-association inte tillgänglig via HTTPS, felaktigt appID, Content-Type inte application/json, omdirigering från sökvägen /.well-known, cachning av gammal version (återställning via Settings → Developer → Associated Domains Development). Apple tillhandahåller verktyget "Validation Checker" i Apple Developer Console för att testa association.

Branch och andra MMP-plattformar förenklar konfigurationen av Universal Link: de genererar apple-app-site-association automatiskt och hostar det på sin egen domän. Utvecklaren behöver bara lägga till Branch-domänen i Associated Domains och integrera SDK. Detta är särskilt bekvämt för startups som inte har egen serverinfrastruktur för att hosta AASA-filen.

Begränsningar och kompatibilitet

Universal Link har flera begränsningar. För det första: filen apple-app-site-association måste vara strikt tillgänglig via HTTPS (HTTP stöds inte). För det andra: länken måste leda till samma domän som anges i Associated Domains. Domänöverskridande Universal Links fungerar inte — för varje domän krävs en separat post i Capabilities och en separat AASA-fil. För det tredje: Universal Link fungerar inte i WKWebView — endast i Safari och systemkomponenter.

Kompatibilitet: iOS 9.0+ (Universal Link), watchOS 6.0+ (Handoff Universal Link), macOS 10.15+ (Catalyst och Mac-appar). I äldre versioner av iOS öppnas länken i Safari. Detta innebär att på iOS 8 (mindre än 1% av enheterna) kommer Universal Link inte att fungera. Det rekommenderas att även stödja Custom URL Scheme som fallback för äldre enheter, om publiken inkluderar användare med föråldrade versioner.

iOS 16+ förändringar: Apple förbättrade hanteringen av Universal Link för SwiftUI. En ny modifierare environment(\.openURL) med möjlighet till fördröjd bearbetning har tillkommit. iOS 16 tillåter också att öppna Universal Link i appen även via SFSafariViewController. För iOS 16-användare rekommenderas en fullständig övergång till SwiftUI-hantering av Universal Link, med AppDelegate-kod endast för bakåtkompatibilitet.

Vanliga frågor

Vad skiljer Universal Link från Custom URL Scheme?

Universal Link använder en standard HTTPS-URL och verifieras via en fil på servern. Custom URL Scheme använder ett anpassat protokoll (myapp://) utan verifiering, vilket gör det sårbart för kapning av en annan app som registrerat samma schema.

Var ska apple-app-site-association placeras?

Filen placeras i roten av HTTPS-servern på sökvägen /.well-known/apple-app-site-association (utan .json-tillägg). Servern måste returnera Content-Type: application/json. Viktigt: inga omdirigeringar, filen måste vara direkt tillgänglig.

Varför öppnar inte Universal Link appen?

Främsta orsaker: felaktigt Team ID eller Bundle ID i AASA-filen, filen inte tillgänglig via HTTPS, omdirigering, felaktigt Content-Type, cachning av gammal version. Kontrollera via Developer → Associated Domains Development och återställ cachen genom att starta om enheten.

Kan Universal Link användas utan webbplats?

Nej — Universal Link kräver en HTTPS-server där apple-app-site-association är placerad. Utan domän fungerar inte Universal Link. Alternativ: Custom URL Scheme (mindre säkert) eller tredjepartstjänster (Branch, Firebase) med egen domän.

Fungerar Universal Link på Android?

Nej — Universal Link är exklusiv Apple-teknik för iOS, iPadOS, watchOS och macOS. På Android kallas motsvarigheten App Link (Android 6.0+), som använder Digital Asset Links (assetlinks.json) istället för apple-app-site-association.

Sammanfattning

  • Universal Link — https-länk som öppnar appen på iOS 9+ eller webbplatsen i Safari som fallback
  • apple-app-site-association — JSON-fil på servern som verifierar domänens koppling till appen
  • Säkerhet — till skillnad från Custom URL Scheme är Universal Link skyddad mot kapning av tredjepartsappar
  • Enhetlig URL — en länk fungerar för användare med och utan installerad app
  • Handoff och Spotlight — Universal Link integreras med Apple Continuity-ekosystemet
  • Konfiguration omfattar serverdel (AASA-fil) och klientdel (Associated Domains + NSUserActivity)
  • Testning endast på verklig enhet — simulatorn verifierar inte domänassociation

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också