Universaalilinkit ja sovelluslinkit

Kirjoittanut Natalia Moskaleva 23. tammikuuta 2026

<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Universaalilinkit ja sovelluslinkit</span>

Tässä artikkelissa käymme läpi, mitä universaalilinkit (Universal Links) ja sovelluslinkit (App Links) ovat, mihin niitä käytetään sekä miten ne otetaan käyttöön.

Ennen sitä on kuitenkin hyvä tutustua niiden taustalla olevaan käsitteeseen eli syvälinkitykseen (deep linking). Universaalilinkit ja sovelluslinkit perustuvat syvälinkitykseen, ja ne on kehitetty ratkaisemaan alkuperäisten syvälinkitysratkaisujen rajoituksia.

Mitä syvälinkitys tarkoittaa?

Syvälinkitys (deep linking) on tekniikka, jolla käyttäjä voidaan ohjata suoraan verkkosivuston tai mobiilisovelluksen tiettyyn näkymään sen sijaan, että hän saapuisi aina etusivulle.

Esimerkiksi viestisovelluksessa syvälinkki voi avata suoraan tietyn keskustelun, verkkokaupassa ostoskorin tai matkailusovelluksessa tietyn matkasuunnitelman. Käyttäjän ei siis tarvitse etsiä haluamaansa sisältöä itse, vaan linkki vie hänet suoraan oikeaan paikkaan.

Syvälinkitys mobiilisovelluksissa

Mobiilisovelluksissa syvälinkitys perustuu URI-tunnisteisiin (Uniform Resource Identifier, URI), joilla sovellus voidaan avata suoraan tietystä näkymästä. Toisin kuin tavallinen sovelluskuvake, syvälinkki ei ainoastaan käynnistä sovellusta, vaan ohjaa käyttäjän haluttuun sisältöön.

Syvälinkkejä käytetään esimerkiksi ilmoituksissa, sähköposteissa ja pikakuvakkeissa, jotta käyttäjä pääsee yhdellä napautuksella suoraan oikeaan toimintoon.

Verkkosivuilla tämä toimii luonnostaan HTTP-protokollan ja URL-osoitteiden ansiosta. Mobiilisovelluksissa kehittäjän on sen sijaan määritettävä erikseen, miten sovellus käsittelee sille osoitetut URI-tunnisteet.

Mukautetut URI-rakenteet

Alun perin syvälinkitys toteutettiin mobiilisovelluksissa mukautettuilla URI-rakenteilla (Custom URI Schemes).

Tällöin sovellus rekisteröi oman URI-tunnisteensa, jonka kautta siihen voitiin avata tietty sisältö. Esimerkiksi matkailusovellus voisi käyttää rakennetta:

mytravelsapp://destination/paris

Kun käyttäjä avaa tällaisen linkin, käyttöjärjestelmä yrittää käynnistää kyseisen sovelluksen ja siirtyä määritettyyn näkymään.

Mukautettuihin URI-rakenteisiin liittyy kuitenkin useita ongelmia. Ensinnäkin käyttäjäkokemus kärsii, jos sovellusta ei ole asennettu laitteelle. Tällöin linkki ei yleensä johda mihinkään, eikä käyttäjä saa ohjausta esimerkiksi verkkosivulle tai sovelluskauppaan.

Toiseksi mukautetut URI-rakenteet voivat aiheuttaa URI-törmäyksiä (URI collisions). Käyttöjärjestelmä ei estä useita sovelluksia rekisteröimästä samaa URI-rakennetta, jolloin haitallinen sovellus voi esiintyä toisena sovelluksena. Tämä voi aiheuttaa tietoturvariskejä esimerkiksi kirjautumis- tai valtuutusprosessien yhteydessä.

Universaalilinkit ja sovelluslinkit astuvat kuvaan

Vastauksena näihin haasteisiin Apple ja Google kehittivät uuden sukupolven syvälinkitysratkaisut.

Apple käyttää iOS-laitteissa universaalilinkkejä (Universal Links), kun taas Androidin kohdalla vastaava tekniikka tunnetaan sovelluslinkkeinä (App Links).

Keskeinen ero näkyy jo linkkien rakenteessa.

Mukautettu URI-rakenne:

mytravelsapp://destination/paris

Universaalilinkki tai sovelluslinkki:

https://www.mytravels.com/destination/paris

Jälkimmäinen näyttää tavalliselta verkkolinkiltä, mutta osaa avata sisällön suoraan mobiilisovelluksessa. Kuvitellaan esimerkiksi, että ylläpidät matkailusivustoa, jolla on myös mobiilisovellus. Sivustolla oleva matkasuunnitelma voisi löytyä osoitteesta: https://mytravels.com/itinerary/helsinki-kauppatori

Jos käyttäjällä on sovellus asennettuna, linkki avautuu automaattisesti kyseiseen näkymään sovelluksessa. Jos sovellusta ei ole asennettu, sama linkki avautuu normaalisti verkkoselaimessa.

Käyttäjän näkökulmasta kokemus on saumaton, sillä hänen ei tarvitse tietää, avautuuko sisältö selaimessa vai sovelluksessa. Juuri tämä tekee universaalilinkeistä ja sovelluslinkeistä huomattavasti käyttäjäystävällisemmän ja turvallisemman ratkaisun kuin perinteiset mukautetut URI-rakenteet.


Mitä universaalilinkit ovat?

Apple julkaisi universaalilinkit (Universal Links) vuonna 2015 osana iOS 9 -käyttöjärjestelmää. Ne perustuvat tavallisiin HTTPS-osoitteisiin (esimerkiksi https://mytravels.com), mutta niiden erityispiirteenä on kyky avata sama sisältö joko mobiilisovelluksessa tai vastaavalla verkkosivulla.

Kun käyttäjä napauttaa universaalilinkkiä, iOS tarkistaa ensin, onko linkki liitetty kyseiseen verkkotunnukseen. Sen jälkeen käyttöjärjestelmä selvittää, onko vastaava sovellus asennettu laitteelle. Jos sovellus löytyy, linkki avautuu suoraan oikeaan näkymään sovelluksessa. Muussa tapauksessa sisältö avautuu laitteen oletusselaimessa verkkosivuna.

Tämän ansiosta ohjelmistokehittäjän ei tarvitse luoda erillisiä linkkejä sovellukselle ja verkkosivustolle. Sama HTTPS-linkki toimii molemmissa tilanteissa: se avaa sovelluksen, jos se on asennettu, ja muussa tapauksessa ohjaa käyttäjän verkkosivulle. Verkkosivulta käyttäjä voidaan tarvittaessa ohjata edelleen App Storeen lataamaan sovellus.

Toimiakseen verkkotunnuksella on oltava toimiva verkkosivusto tai vähintään verkkopalvelin, jolle käyttäjä voidaan ohjata, jos sovellusta ei ole asennettu.

Mitä sovelluslinkit ovat?

Google esitteli sovelluslinkit (App Links) Android Marshmallow'n yhteydessä vastauksena Applen universaalilinkeille.

Toimintaperiaate on käytännössä sama. Kun käyttäjä avaa HTTPS-linkin, Android tarkistaa, onko linkki yhdistetty asennettuun sovellukseen. Jos sovellus löytyy, sisältö avautuu suoraan siinä. Muussa tapauksessa linkki avautuu verkkoselaimessa.

Toisin kuin Androidin perinteiset syvälinkit, sovelluslinkit eivät näytä käyttäjälle valintaikkunaa, jossa pyydetään valitsemaan sovellus tai selain linkin avaamista varten. Jos linkki on määritetty oikein, se avautuu automaattisesti oikeassa sovelluksessa.

Universaalilinkkien tavoin myös sovelluslinkit yhdistävät verkkosivuston ja mobiilisovelluksen saumattomaksi kokonaisuudeksi. Käyttäjä voi käyttää samaa linkkiä riippumatta siitä, onko sovellus asennettu vai ei. Tämä parantaa käyttökokemusta ja yksinkertaistaa linkkien hallintaa. Myös tässä tapauksessa tarvitaan toimiva verkkopalvelu, joka näyttää sisällön silloin, kun sovellusta ei ole asennettu.

Universaalilinkkien käyttöönotto

Universaalilinkkien käyttöönotto edellyttää, että mobiilisovelluksen ja verkkosivuston välille muodostetaan kaksisuuntainen luottamussuhde.

Käytännössä tämä tarkoittaa kahta vaihetta:

  • Verkkosivustolle lisätään Associated Domain -määritystiedosto
  • Mobiilisovellukseen määritetään vastaava Associated Domains -oikeus (entitlement).

Näin iOS voi varmistaa, että sovellus ja verkkotunnus kuuluvat samalle ylläpitäjälle ja että sovellus saa avata kyseisen verkkotunnuksen linkkejä.

Universaalilinkkien käyttöönotto edellyttää myös maksullista Apple Developer -tiliä, sillä määritykset liitetään organisaation Apple Developer Team ID -tunnukseen.

Yleisellä tasolla käyttöönotto etenee seuraavasti:

 

1. Määritä verkkosivusto julkaisemaan AASA-tiedosto

Universaalilinkkien käyttöönotto alkaa AASA-tiedoston (apple-app-site-association) lisäämisellä verkkosivustolle.
AASA-tiedosto yhdistää verkkotunnuksen mobiilisovellukseen ja toimii iOS:lle todisteena siitä, että sama organisaatio hallinnoi sekä verkkosivustoa että sovellusta. Koska tiedosto voidaan sijoittaa vain kyseisen verkkotunnuksen palvelimelle, se estää muita sovelluksia esiintymästä verkkotunnuksesi omistajana. Kun käyttäjä asentaa sovelluksen, iOS lataa AASA-tiedoston automaattisesti ja tarkistaa, että siinä määritetyt verkkotunnukset vastaavat sovelluksen asetuksia.

a. Luo AASA-tiedosto

AASA-tiedosto sisältää JSON-rakenteen, jossa määritellään:

  • Mitkä sovellukset liittyvät verkkotunnukseen
  • Mitkä URL-osoitteet avataan universaalilinkkeinä
  • Mitkä osoitteet halutaan tarvittaessa jättää universaalilinkkien ulkopuolelle.

Esimerkki AASA-tiedostosta:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "P56KU6NT8A.com.mytravelapp",
        "components": [
          {
            "/": "/trip/*",
            "comment": "Matches any URL with a path that starts with /trip/."
          }
        ]
      }
    ]
  }
}

Kentän appID arvo muodostuu kahdesta osasta:

  • Team ID, joka löytyy Apple Developer -tilin Membership Details -osiosta
  • Bundle Identifier, joka löytyy Xcode-projektin General-välilehdeltä.

Yllä olevassa esimerkissä P56KU6NT8A on Team ID ja com.mytravelapp Bundle Identifier.

Kentässä components määritellään, mitä URL-polkuja sovellus käsittelee universaalilinkkeinä. Samalla voidaan esimerkiksi sulkea tietyt URL-osoitteet universaalilinkkien ulkopuolelle.

b. Julkaise AASA-tiedosto

AASA-tiedosto tulee sijoittaa verkkosivuston .well-known-hakemistoon. Tiedoston osoitteen tulee olla seuraavan rakenteen mukainen:

https://esimerkki.fi/.well-known/apple-app-site-association

Tiedosto on julkaistava HTTPS-yhteyden kautta, palvelimella on oltava voimassa oleva TLS-varmenne eikä tiedostossa saa olla uudelleenohjausta (redirect).


2. Lisää Associated Domains -oikeus sovellukseen

Seuraavaksi mobiilisovellus määritetään tunnistamaan verkkotunnus, jonka universaalilinkkejä se saa avata.

a. Rekisteröi sovellus Apple Developer -palveluun. Sovelluksen tulee olla rekisteröity Apple Developer -tilille.

b. Ota Associated Domains käyttöön Xcodessa. Avaa Xcodessa projektin Signing & Capabilities -välilehti ja lisää sovellukselle Associated Domains -ominaisuus (Capability).

c. Lisää verkkotunnus. Valitse Domains-taulukosta Add (+) ja lisää verkkotunnus muodossa: applinks:mytravels.com

applinks-xcode

Etuliite applinks: kertoo, että verkkotunnusta käytetään universaalilinkkeihin. Lisää ainoastaan verkkotunnus (sekä tarvittaessa subdomain), älä koko URL-osoitetta.

3. Määritä sovellus käsittelemään universaalilinkit

Kun käyttäjä avaa universaalilinkin, iOS käynnistää sovelluksen ja välittää sille tiedon avatusta URL-osoitteesta. Sovelluksen tehtävänä on tulkita linkki ja ohjata käyttäjä oikeaan näkymään.

Toteutustapa riippuu käytetystä sovelluskehyksestä. SwiftUI-sovelluksissa universaalilinkit voidaan käsitellä onOpenURL-metodilla. Kun sovellus avataan universaalilinkin kautta, onOpenURL-metodi saa avatun URL-osoitteen käsiteltäväkseen riippumatta siitä, onko sovellus parhaillaan käynnissä, taustalla vai kokonaan suljettuna.

struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("Welcome to My Travel App")
        }
        .onOpenURL { url in
            print("Opened URL:", url.absoluteString)
        }
    }
}

UIKit-sovelluksissa vastaava toiminnallisuus toteutetaan UISceneDelegate-luokan metodeilla. Sovellus vastaanottaa universaalilinkin joko käynnistyksen yhteydessä tai silloin, kun käyttäjä avaa linkin sovelluksen ollessa jo käynnissä.

func scene(
  _ scene: UIScene, willConnectTo session: UISceneSession,
  options connectionOptions: UIScene.ConnectionOptions
) {


  // Get URL components from the incoming user activity.
  guard let userActivity = connectionOptions.userActivities.first,
    userActivity.activityType == NSUserActivityTypeBrowsingWeb,
    let incomingURL = userActivity.webpageURL,
    let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true)
  else {
    return
  }

  // Check for specific URL components that you need.
  // ...
}

Jonka jälkeen:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  for context in URLContexts {
    let url = context.url
    // handleLink(url)
  }
}

Tarkemmat ohjeet löydät Applen virallisesta dokumentaatiosta.


Sovelluslinkkien käyttöönotto

Androidin sovelluslinkkien käyttöönotto on hyvin samankaltainen prosessi, mutta kokonaisuutena hieman yksinkertaisempi.
Yleisellä tasolla käyttöönotto koostuu kahdesta vaiheesta.

1. Määritä sovellus käsittelemään sovelluslinkit

Ensimmäiseksi sovellukselle määritetään, mitä verkkotunnuksia ja URL-osoitteita sen tulee käsitellä.

Tämä tehdään Android-sovelluksen AndroidManifest.xml-tiedostossa lisäämällä sovellukselle tarvittavat intent filter -määritykset. Ne kertovat käyttöjärjestelmälle, että tiettyyn verkkotunnukseen kuuluvat HTTPS-linkit voidaan avata suoraan kyseisessä sovelluksessa.

Samalla kannattaa ottaa käyttöön autoVerify-ominaisuus, jonka ansiosta Android tarkistaa automaattisesti, että sovellus on oikeutettu käsittelemään kyseisen verkkotunnuksen linkkejä.

<activity android:name=".MainActivity">
    <!-- ... other activity attributes ... -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="mytravels.com"
            android:scheme="http" />
        <data
            android:host="mytravels.com"
            android:scheme="https" />
    </intent-filter>
</activity>

 

Lisäksi sovelluksen tulee osata lukea saapuvan URL-osoitteen tiedot ja ohjata käyttäjä oikeaan sisältöön.
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_destination);

    Intent intent = getIntent();
    Uri data = intent.getData();
    if (data != null) {
        // Extract data from the URI and navigate to the corresponding content
        // Example: Retrieve destination ID and display details
    }
}

2. Vahvista verkkotunnuksen omistajuus

Sovelluslinkit perustuvat Androidin Digital Asset Links -järjestelmään.

Sen avulla käyttöjärjestelmä voi varmistaa, että sovelluksen kehittäjä hallinnoi myös verkkotunnusta, jonka linkkejä sovellus avaa.

Tätä varten verkkosivustolle lisätään assetlinks.json-tiedosto, joka julkaistaan verkkotunnuksen .well-known-hakemistossa.

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mytravels",
    "sha256_cert_fingerprints":
    ["1B:9A:6C:2E:33:E5:3E:AE:32:EC:40:97:11:BF:87:76:EE:56:78:EC:2A:3A:62:C9:A4:BC:D0:C2:7A:BC:11:4D"]
  }
}]

Tiedostossa määritellään muun muassa:

  • Sovelluksen package name
  • Sovelluksen allekirjoitusvarmenteen SHA-256-sormenjälki (SHA-256 certificate fingerprint).

Kun Android onnistuu vahvistamaan tämän yhteyden, kyseisen verkkotunnuksen linkit avautuvat automaattisesti sovelluksessa ilman erillisiä valintaikkunoita.

keytool -list -v -keystore my-release-key.keystore

 Lisätietoja sovelluslinkkien käyttöönotosta löydät oAndroidin virallisesta App Links -dokumentaatiosta

Yhteenveto

Kehitätpä sovellusta iOS- tai Android-alustalle, universaalilinkit ja sovelluslinkit parantavat käyttökokemusta merkittävästi. Käyttäjä voi avata saman HTTPS-linkin riippumatta siitä, käyttääkö hän mobiilisovellusta vai verkkoselainta.

Myös tietoturvan näkökulmasta molemmat ratkaisut ovat huomattavasti perinteisiä syvälinkkejä turvallisempia. Koska linkit perustuvat verkkotunnuksen omistajuuden todentamiseen, ulkopuoliset sovellukset eivät voi esiintyä aidon sovelluksen nimissä samalla tavalla kuin mukautettuja URI-rakenteita käytettäessä.

Universaalilinkit ja sovelluslinkit ovat yleistyneet nopeasti myös sähköisessä tunnistautumisessa.

Toivomme, että tämä artikkeli auttoi ymmärtämään, mitä universaalilinkit ja sovelluslinkit ovat, miten ne toimivat ja mitä niiden käyttöönotto edellyttää.

Koodaamisen iloa!

 

Usein kysyttyä universaali- ja sovelluslinkeistä

Mitä eroa on universaalilinkeillä ja sovelluslinkeillä?

Universaalilinkit (Universal Links) ovat Applen iOS-käyttöjärjestelmän ratkaisu, kun taas sovelluslinkit (App Links) ovat Androidin vastaava teknologia. Molempien tarkoituksena on avata HTTPS-linkki suoraan mobiilisovelluksessa, jos sovellus on asennettu laitteelle. Muussa tapauksessa sama linkki avautuu normaalisti verkkoselaimessa. 

Miten universaalilinkit eroavat perinteisistä syvälinkeistä?

Perinteiset syvälinkit perustuvat yleensä sovelluksen omaan URI-rakenteeseen (esimerkiksi myapp://). Universaalilinkit ja sovelluslinkit sen sijaan käyttävät tavallisia HTTPS-linkkejä. Tämä tekee niistä sekä turvallisempia että käyttäjäystävällisempiä, sillä sama linkki toimii sekä mobiilisovelluksessa että verkkosivustolla. 

Miksi universaalilinkit ovat turvallisempia kuin mukautetut URI-rakenteet?

Universaalilinkit ja sovelluslinkit perustuvat verkkotunnuksen omistajuuden todentamiseen. Käyttöjärjestelmä varmistaa, että sovellus on todella oikeutettu avaamaan kyseisen verkkotunnuksen linkkejä. Tämä estää tilanteet, joissa toinen sovellus yrittäisi esiintyä aidon sovelluksen nimissä käyttämällä samaa URI-rakennetta. 

Milloin universaalilinkkejä kannattaa käyttää?

Universaalilinkit ja sovelluslinkit sopivat erityisesti tilanteisiin, joissa käyttäjän on siirryttävä turvallisesti verkkopalvelun ja mobiilisovelluksen välillä. Niitä käytetään esimerkiksi sähköisessä tunnistautumisessa, maksamisessa, käyttäjätilien vahvistamisessa, salasanan palautuksessa sekä sovellusten välisessä tiedonsiirrossa.

Miksi universaalilinkit ovat tärkeitä sähköisessä tunnistautumisessa?

Monissa sähköisen tunnistautumisen ratkaisuissa käyttäjä siirtyy asiointipalvelun ja tunnistautumissovelluksen välillä. Universaalilinkit ja sovelluslinkit mahdollistavat tämän siirtymän turvallisesti ja ilman, että käyttäjän tarvitsee itse vaihtaa sovellusten välillä. Esimerkiksi monet pankkien tunnistautumissovelukset sekä MobilePay hyödyntävät universaalilinkkejä siirryttäessä sovelluksesta toiseen.

Tarvitsenko erilliset linkit verkkosivustolle ja mobiilisovellukselle?

Et tarvitse. Yksi universaalilinkki tai sovelluslinkki riittää. Jos sovellus on asennettu, linkki avautuu siinä. Muussa tapauksessa sama HTTPS-linkki avautuu verkkoselaimessa. Tämä yksinkertaistaa linkkien hallintaa ja tarjoaa yhtenäisen käyttökokemuksen kaikille käyttäjille.