Az URL Scheme egy egyedi URI-protokoll, amelyet a mobilalkalmazás regisztrál az operációs rendszerben a myapp://path formátumú hivatkozásokon keresztüli megnyitáshoz. A RFC 3986 szerint az URI séma meghatározza a cím összes további összetevőjének szintaxisát és szemantikáját. Egy ilyen hivatkozásra kattintva a rendszer azonosítja a regisztrált alkalmazást az egyedi azonosító alapján, és elindítja a hivatkozásból kinyert paraméterekkel. A Deep link URL Scheme alapján továbbra is az alkalmazások közötti navigáció alapvető mechanizmusa marad a mobil platformokon, a modernebb alternatívák megjelenése ellenére.
Főbb pontok
URL Scheme — egy egyedi protokollazonosító, amelyet az alkalmazás regisztrál az operációs rendszerben, hogy egyedi hivatkozásokon keresztül hívásokat fogadhasson. Amikor a felhasználó egy myapp://profile/123 formátumú hivatkozásra kattint, a rendszer azonosítja a myapp sémát regisztráló alkalmazást, és átadja neki a vezérlést a teljes URI-val. Ez a mechanizmus lehetővé teszi az alkalmazások számára, hogy adatokat cseréljenek és megnyissák egymást szerverinfrastruktúra nélkül.
Az URL Scheme koncepciója közvetlenül a RFC 3986 webes szabványokból származik, ahol az URI séma minden univerzális erőforrás-azonosító első összetevője. A mobilfejlesztésben ezt az ötletet az alkalmazások közötti kommunikációhoz adaptálták, ahol a HTTP szerver helyett maga a hivatkozást feldolgozó alkalmazás működik.
Számos népszerű alkalmazás regisztrálja saját URL Scheme-jét külső szolgáltatásokkal való integrációhoz. Például a Spotify a spotify:// sémát, a Telegram a tg://, az Instagram pedig az instagram:// sémát használja. A fejlesztők gyakran hoznak létre appname:// formátumú sémát belső navigációhoz és képernyők teszteléséhez.
Az URL Scheme-eket még mindig széles körben használják push értesítésekben, e-mail kampányokban és QR kódokban, ahol az alkalmazás egy adott szakaszába történő azonnali átlépés szükséges. Az iOS 9 és Android 6 óta azonban alternatív mechanizmusok jelentek meg, amelyek fokozatosan kiegészítik és felváltják a puszta sémákat.
Az egyedi URI szerkezete az általános RFC 3986 specifikációnak felel meg, és több összetevőből áll. A séma kerül megadásra elsőként, és kettőspont választja el a cím többi részétől. A séma után host, port, elérési út, query-paraméterek és fragment következhet, amelyek mindegyike opcionális.
A teljes szintaxis a következőképpen néz ki: scheme://host/path?key=value#fragment. A séma az egyetlen kötelező elem, a többit az adott implementáció igényei határozzák meg. A séma utáni dupla perjel történetileg a HTTP-ből származik, és a specifikáció szerint nem szigorúan kötelező, de konvencióként mindenhol használatos.
Az URI szerkezetének vizuális megjelenítéséhez egy összetevőtáblázatot használunk. Minden elemnek megvan a maga célja és kötelező szintje.
| Összetevő | Példa | Kötelezőség |
|---|---|---|
| Scheme | myapp | Igen |
| Host | profile | Nem |
| Path | /user/42 | Nem |
| Query | ?id=42&tab=main | Nem |
| Fragment | #section2 | Nem |
A fejlesztők szabadon választhatják meg az URI szerkezetét, ami rugalmasságot biztosít, de kompatibilitási problémákat okoz az alkalmazás különböző verziói között. Javasolt az URL Scheme formátumot az alkalmazás nyilvános API-jának részeként dokumentálni és változtatáskor verziózni.
Az iOS megköveteli minden URL Scheme explicit regisztrációját a projekt Info.plist fájljában. A fejlesztő hozzáad egy CFBundleURLTypes tömböt, amelynek minden eleme tartalmaz egy azonosítót (CFBundleURLName) és a támogatott sémák listáját (CFBundleURLSchemes). Regisztráció után a rendszer automatikusan a regisztrált sémákra érkező összes hívást az alkalmazáshoz irányítja.
A beérkező URL Scheme feldolgozása az alkalmazás delegáltjában történik a application(_:open:options:) metóduson keresztül. Ez a metódus egy URL objektumot kap, amelyből az elérési út és a query-paraméterek kerülnek kinyerésre a navigációs döntés meghozatalához. A feldolgozásnak egy Bool értéket kell visszaadnia, amely jelzi a művelet sikerességét.
Az alábbiakban egy URL Scheme-kezelő implementációjának példája látható Swift nyelven. A kód bemutatja a host és a query-paraméterek kinyerését a beérkező URI-ból az URLComponents segítségével.
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
}
A metódus az URLComponents-et használja a query-paraméterek biztonságos elemzéséhez. Ez a megközelítés előnyösebb a karakterlánc manuális elemzésénél, mivel automatikusan kezeli a százalékos kódolást és a speciális karakterek dekódolását a paraméterértékekben.
Az Android az Intent Filter rendszert használja a deep link-ek URL Scheme alapján történő irányításához. A fejlesztő deklarálja a szűrőt az AndroidManifest.xml-ben annak az Activity-nek a tag-jén belül, amelynek a hivatkozást kell feldolgoznia. A szűrő tartalmazza az action VIEW-t, a BROWSABLE és DEFAULT kategóriákat, valamint a data tag-et a séma, host és pathPrefix megadásával.
Amikor a felhasználó egy egyedi sémával rendelkező hivatkozásra kattint, a rendszer ellenőrzi az összes telepített alkalmazás Intent Filter-ét. Ha több megfelelő alkalmazást talál, a felhasználó számára egy választási párbeszédablak jelenik meg. A BROWSABLE kategória lehetővé teszi a hivatkozás feldolgozását a böngészőből.
Példa az Intent Filter deklarálására az AndroidManifest.xml-ben a myapp séma Activity-n történő feldolgozásához. Az action és category kombinációja kötelező a deep link helyes irányításához.
<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>
A szűrő beállítása után az Activity-ben meg kell hívni az intent.getData()-t az URI megszerzéséhez. Fontos ellenőrizni az intent-et és az adatokat null-ra, mivel az Activity beérkező deep link nélkül is elindulhat, például a launcher-ből történő szabványos indításkor.
A query-paraméterek az URL Scheme-ben a kérdőjel után kerülnek átadásra kulcs=érték formátumban, ampersanddal elválasztva. Ez a formátum megegyezik a HTTP kérésekkel, és könnyen feldolgozható a platform szabványos eszközeivel. A paramétereket százalékos kódolással kell kódolni az URI megengedett készletébe nem tartozó összes karakter esetében.
Példa egy teljes hivatkozásra paraméterekkel: myapp://profile?userId=42&source=email&ref=abc123. Az URL kinyerése után az alkalmazás egymás után feldolgozza az összes query-items-t, és azok értékei alapján navigációs döntést hoz a célképernyőre.
Összetett adatok átadásakor fontos figyelembe venni az URI hosszának korlátozását. iOS-ben az URL Scheme maximális hossza 2 KB-ra korlátozódik, ami után a rendszer levágja a hivatkozást. Androidban a határ körülbelül 8 KB, de a pontos érték az operációs rendszer verziójától és a készülék gyártójától függ. Nagy adatmennyiségek esetén javasolt csak a munkamenet-azonosító átadása URL Scheme segítségével, a többi adatot pedig a szerverről betölteni.
Az URL Scheme fő hátránya — a hivatkozás feldolgozásának képtelensége, ha az alkalmazás nincs telepítve a készülékre. A böngésző hibát jelez, és a felhasználó elveszíti az átmenet kontextusát. A probléma megoldására az Apple bevezette az Universal Links szolgáltatást iOS 9-ben, a Google pedig az App Links szolgáltatást Android 6-ban. Mindkét mechanizmus az alkalmazáshoz kapcsolt webdomainen keresztül regisztrálódik.
Az Universal Links és az App Links úgy működnek, mint a szokásos HTTPS hivatkozások, de ha az alkalmazás telepítve van, kiválasztási párbeszéd nélkül nyitják meg azt. Ha az alkalmazás nincs telepítve, a hivatkozás ugyanazon a doménen nyit meg egy weboldalt, megőrizve a felhasználói élményt. Ez teszi őket előnyös alternatívává a production környezetben.
Az URL Scheme-hez iOS-en és Androidon nincs beépített fallback mechanizmus. A fejlesztők köztes szerver megoldásokat használnak: a hivatkozás egy weboldalra vezet, amely JavaScript segítségével ellenőrzi az alkalmazás telepítését, és vagy a sémára, vagy az alkalmazásboltba irányít át. A Firebase Dynamic Links és a Branch.io kész megoldásokat kínálnak erre a problémára deferred deep link támogatással, amelyek automatikusan meghatározzák a telepítési állapotot, és átirányítják a felhasználót anélkül, hogy saját szerver pipeline-t kellene fejleszteni.
További bonyodalom merül fel az URL Scheme használatakor iOS 15+ és Android 12+ esetén, ahol szigorították az adatvédelmi szabályokat. A Safari blokkolja a nem regisztrált séma megnyitására tett kísérleteket előzetes megerősítés nélkül, az Android 12 pedig korlátozza a telepített alkalmazások láthatóságát a PackageManageren keresztül. Ezek a változtatások kevésbé megbízhatóvá teszik az URL Scheme használatát az alkalmazások közötti interakcióhoz, mint a platformok korábbi verzióiban.
Gyakran Ismételt Kérdések
Az URL Scheme egyedi protokollt használ titkosítás nélkül, míg az Universal Links HTTPS-en keresztül működik domain ellenőrzéssel. Az Universal Links nem hív fel alkalmazásválasztó párbeszédablakot, és helyesen kerül feldolgozásra, ha az alkalmazás nincs jelen a készüléken.
Igen, de az összes nem ASCII karaktert percent-encoding segítségével kell kódolni az RFC 3986 szerint. Javasolt kerülni a cirill betűket az URL Scheme-ben a régebbi operációs rendszer- és böngészőverziókkal való kompatibilitás biztosítása érdekében.
Nincs korlátozás a sémák számában sem iOS-ben, sem Androidban. A gyakorlatban az alkalmazások egy-öt sémát használnak. Például a Telegram regisztrálja a tg://, t.me/, telegram:// és telegram.me:// sémákat.
iOS-ben a canOpenURL(_:) metódust használjuk, amely true értéket ad vissza, ha létezik regisztrált séma. Androidban az ellenőrzés a PackageManager.queryIntentActivities() segítségével történik. Mindkét platform megköveteli a séma előzetes megadását a konfigurációban.
Nem, az URL Scheme nem titkosítja az adatokat. Bármely alkalmazás, amely regisztrálta ugyanazt a sémát, el tudja kapni a hivatkozást. Biztonság érdekében használjon Universal Links-et HTTPS-sel vagy adattitkosítást protokoll szinten.
Összegzés
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.
Olvassa el is