URL Scheme — ist ein benutzerdefiniertes URI-Protokoll, das eine mobile App im Betriebssystem registriert, um über Links wie myapp://path geöffnet zu werden. Gemäß RFC 3986 definiert das URI-Schema die Syntax und Semantik aller nachfolgenden Adresskomponenten. Beim Navigieren zu einem solchen Link identifiziert das System die registrierte Anwendung anhand ihrer eindeutigen Kennung und startet sie mit den aus dem Link extrahierten Parametern. Deep Link auf Basis von URL Scheme bleibt der grundlegende Mechanismus der anwendungsübergreifenden Navigation auf mobilen Plattformen, trotz des Aufkommens modernerer Alternativen.
Wichtige Erkenntnisse
URL Scheme — ist eine eindeutige Protokollkennung, die eine App im Betriebssystem registriert, um Aufrufe über benutzerdefinierte Links zu empfangen. Wenn ein Benutzer auf einen Link wie myapp://profile/123 klickt, identifiziert das System die App, die das Schema myapp registriert hat, und übergibt die Kontrolle mit der vollständigen URI an sie. Dieser Mechanismus ermöglicht es Apps, Daten auszutauschen und sich gegenseitig zu öffnen, ohne dass eine Serverinfrastruktur erforderlich ist.
Das Konzept von URL Scheme ist direkt von den Webstandards RFC 3986 übernommen, wo das URI-Schema die erste Komponente eines universellen Ressourcenbezeichners ist. In der mobilen Entwicklung wird diese Idee für die anwendungsübergreifende Kommunikation angepasst, bei der anstelle eines HTTP-Servers die App selbst als Link-Handler fungiert.
Viele beliebte Apps registrieren eigene URL Schemes für die Integration mit Drittanbieterdiensten. Beispielsweise verwendet Spotify das Schema spotify://, Telegram verwendet tg:// und Instagram verwendet instagram://. Entwickler erstellen auch häufig Schemas wie appname:// für die interne Navigation und End-to-End-Tests von Bildschirmen.
URL Schemes werden immer noch häufig in Push-Benachrichtigungen, E-Mail-Newslettern und QR-Codes verwendet, wo eine sofortige Navigation zu einem bestimmten App-Bereich erforderlich ist. Ab iOS 9 und Android 6 sind jedoch alternative Mechanismen entstanden, die einfache Schemas zunehmend ergänzen und ersetzen.
Die Struktur einer benutzerdefinierten URI folgt der allgemeinen RFC 3986-Spezifikation und besteht aus mehreren Komponenten. Das Schema wird zuerst angegeben und durch einen Doppelpunkt vom Rest der Adresse getrennt. Nach dem Schema können Host, Port, Pfad, Query-Parameter und Fragment folgen, die jeweils optional sind.
Die vollständige Syntax sieht wie folgt aus: scheme://host/path?key=value#fragment. Das Schema ist das einzige obligatorische Element; der Rest wird durch die Anforderungen der jeweiligen Implementierung bestimmt. Der Doppelslash nach dem Schema ist historisch von HTTP übernommen und laut Spezifikation nicht streng erforderlich, wird aber universell als Konvention verwendet.
Für eine visuelle Darstellung der URI-Struktur wird eine Komponententabelle verwendet. Jedes Element hat seinen Zweck und seine Verbindlichkeit.
| Komponente | Beispiel | Erforderlich |
|---|---|---|
| Scheme | myapp | Ja |
| Host | profile | Nein |
| Path | /user/42 | Nein |
| Query | ?id=42&tab=main | Nein |
| Fragment | #section2 | Nein |
Entwickler können die URI-Struktur frei wählen, was Flexibilität schafft, aber Kompatibilitätsprobleme zwischen verschiedenen Versionen der App verursacht. Es wird empfohlen, das URL Scheme-Format als Teil der öffentlichen API der App zu dokumentieren und bei Änderungen zu versionieren.
iOS erfordert die explizite Registrierung jedes URL Scheme in der Info.plist-Datei des Projekts. Der Entwickler fügt ein CFBundleURLTypes-Array hinzu, dessen jedes Element eine Kennung (CFBundleURLName) und eine Liste unterstützter Schemas (CFBundleURLSchemes) enthält. Nach der Registrierung leitet das System automatisch alle eingehenden Aufrufe auf registrierte Schemas an die App weiter.
Die Verarbeitung eines eingehenden URL Scheme erfolgt im App-Delegaten über die Methode application(_:open:options:). Diese Methode erhält ein URL-Objekt, aus dem Pfad und Query-Parameter für Navigationsentscheidungen extrahiert werden. Der Handler muss einen Bool-Wert zurückgeben, der den Erfolg der Operation angibt.
Nachfolgend ein Beispiel für die Implementierung eines URL Scheme-Handlers in Swift. Der Code demonstriert die Extraktion von Host und Query-Parametern aus einer eingehenden URI mit URLComponents.
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
}
Die Methode verwendet URLComponents für die sichere Analyse der Query-Parameter. Dieser Ansatz ist der manuellen String-Analyse vorzuziehen, da er automatisch die Prozentkodierung und Dekodierung von Sonderzeichen in Parameterwerten handhabt.
Android verwendet das Intent Filter-System, um Deep Links basierend auf URL Scheme zu leiten. Der Entwickler deklariert einen Filter in AndroidManifest.xml innerhalb des Activity-Tags, das den Link verarbeiten soll. Der Filter enthält die VIEW-Aktion, die Kategorien BROWSABLE und DEFAULT sowie ein data-Tag mit Angabe von Schema, Host und pathPrefix.
Wenn ein Benutzer auf einen Link mit einem benutzerdefinierten Schema klickt, überprüft das System den Intent Filter aller installierten Apps. Werden mehrere übereinstimmende Apps gefunden, wird dem Benutzer ein Auswahldialog angezeigt. Die Kategorie BROWSABLE ermöglicht die Verarbeitung des Links aus dem Browser.
Beispiel für die Deklaration eines Intent Filters in AndroidManifest.xml zur Verarbeitung des Schemas myapp auf einer Activity. Die Kombination von action und category ist für die korrekte Deep Link-Routing obligatorisch.
<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>
Nach der Konfiguration des Filters in der Activity muss intent.getData() aufgerufen werden, um die URI zu erhalten. Es ist wichtig, intent und Daten auf null zu prüfen, da die Activity ohne eingehenden Deep Link gestartet werden kann, beispielsweise beim Standardstart aus dem Launcher.
Query-Parameter in URL Scheme werden nach dem Fragezeichen im Format Schlüssel=Wert, getrennt durch kaufmännisches Und, übergeben. Dieses Format ist identisch mit HTTP-Anfragen und wird problemlos von den Standardtools der Plattform verarbeitet. Parameter müssen für alle Zeichen, die nicht zum zulässigen URI-Zeichensatz gehören, mit Prozentkodierung kodiert werden.
Beispiel für einen vollständigen Link mit Parametern: myapp://profile?userId=42&source=email&ref=abc123. Nach dem Extrahieren der URL parst die App nacheinander alle Query-Items und trifft basierend auf deren Werten eine Navigationsentscheidung zum Zielbildschirm.
Bei der Übergabe komplexer Daten ist die URI-Längenbegrenzung zu beachten. Unter iOS ist die maximale URL Scheme-Länge auf 2 KB begrenzt, danach kürzt das System den Link. Unter Android beträgt die Grenze etwa 8 KB, der genaue Wert hängt jedoch von der OS-Version und dem Gerätehersteller ab. Für große Datenmengen wird empfohlen, nur eine Sitzungskennung via URL Scheme zu übergeben und die restlichen Daten vom Server zu laden.
Der Hauptnachteil von URL Scheme ist die Unfähigkeit, einen Link zu verarbeiten, wenn die App nicht auf dem Gerät installiert ist. Der Browser zeigt einen Fehler an und der Benutzer verliert den Navigationskontext. Zur Lösung dieses Problems führte Apple Universal Links in iOS 9 und Google App Links in Android 6 ein. Beide Mechanismen werden über eine mit der App verbundene Webdomäne registriert.
Universal Links und App Links funktionieren wie normale HTTPS-Links, öffnen aber bei installierter App diese ohne Auswahldialog. Ist die App nicht installiert, öffnet der Link eine Webseite auf derselben Domäne, wodurch die Benutzererfahrung erhalten bleibt. Dies macht sie zur bevorzugten Alternative für Produktionsumgebungen.
Für URL Scheme unter iOS und Android gibt es keinen integrierten Fallback-Mechanismus. Entwickler verwenden Zwischenserver-Lösungen: Der Link führt zu einer Webseite, die per JavaScript prüft, ob die App installiert ist, und entweder zum Schema oder zum App Store weiterleitet. Firebase Dynamic Links und Branch.io bieten fertige Lösungen für dieses Problem mit Unterstützung für deferred Deep Links, die automatisch den Installationsstatus ermitteln und den Benutzer leiten, ohne dass eine benutzerdefinierte Server-Pipeline entwickelt werden muss.
Zusätzliche Komplexität entsteht bei der Verwendung von URL Scheme unter iOS 15+ und Android 12+, wo die Datenschutzbestimmungen verschärft wurden. Safari blockiert Versuche, ein nicht registriertes Schema ohne vorherige Bestätigung zu öffnen, und Android 12 schränkt die Sichtbarkeit installierter Apps über PackageManager ein. Diese Änderungen machen die Verwendung von URL Scheme für die anwendungsübergreifende Kommunikation weniger zuverlässig als in früheren Plattformversionen.
Häufig gestellte Fragen
URL Scheme verwendet ein benutzerdefiniertes Protokoll ohne Verschlüsselung, während Universal Links über HTTPS mit Domain-Verifizierung funktionieren. Universal Links lösen keinen App-Auswahldialog aus und werden korrekt verarbeitet, wenn die App nicht auf dem Gerät installiert ist.
Ja, aber alle Nicht-ASCII-Zeichen müssen gemäß RFC 3986 mit Prozentkodierung kodiert werden. Es wird empfohlen, kyrillische Zeichen in URL Scheme zu vermeiden, um die Kompatibilität mit älteren OS-Versionen und Browsern zu gewährleisten.
Es gibt keine Begrenzung der Anzahl von Schemas weder in iOS noch in Android. In der Praxis verwenden Apps ein bis fünf Schemas. Beispielsweise registriert Telegram die Schemas tg://, t.me/, telegram:// und telegram.me://.
In iOS wird die Methode canOpenURL(_:) verwendet, die true zurückgibt, wenn das Schema registriert ist. In Android erfolgt die Prüfung über PackageManager.queryIntentActivities(). Beide Plattformen erfordern die vorherige Angabe des Schemas in der Konfiguration.
Nein, URL Scheme verschlüsselt keine Daten. Jede App, die dasselbe Schema registriert, kann den Link abfangen. Verwenden Sie aus Sicherheitsgründen Universal Links mit HTTPS oder Ende-zu-Ende-Verschlüsselung auf Protokollebene.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch