URL Scheme: co to jest, jak działa i jest używane w programowaniu

Autor: IT Sectr Opublikowano: 2026-05-14 Czas czytania: 8 min

URL Scheme to niestandardowy protokół URI, który aplikacja mobilna rejestruje w systemie operacyjnym do otwierania przez linki w postaci myapp://path. Według RFC 3986, schemat URI określa składnię i semantykę wszystkich kolejnych komponentów adresu. Po przejściu na taki link system identyfikuje zarejestrowaną aplikację po unikalnym identyfikatorze i uruchamia ją z parametrami wyodrębnionymi z linku. Deep link oparty na URL Scheme pozostaje podstawowym mechanizmem nawigacji między aplikacjami na platformach mobilnych, pomimo pojawienia się bardziej nowoczesnych alternatyw.

Najważniejsze

  • URL Scheme — niestandardowy protokół linków w postaci myapp://path, który aplikacja rejestruje do otwierania z innych aplikacji lub przeglądarki.
  • Składnia obejmuje schemat, host, ścieżkę i parametry query według standardu RFC 3986, co zapewnia elastyczne przesyłanie danych między aplikacjami.
  • iOS używa CFBundleURLTypes w Info.plist i delegata AppDelegate do obsługi przychodzących URL Scheme z parametrami nawigacji.
  • Android stosuje Intent Filter w AndroidManifest.xml z określeniem action, category i data do routowania deep link do docelowej Activity.
  • Ograniczenie — URL Scheme nie działa przy braku aplikacji, co jest rozwiązywane przez Universal Links na iOS i App Links na Android.

Co to jest URL Scheme?

URL Scheme — to unikalny identyfikator protokołu, który aplikacja rejestruje w systemie operacyjnym do odbierania wywołań przez niestandardowe linki. Gdy użytkownik kliknie link w postaci myapp://profile/123, system określa aplikację, która zarejestrowała schemat myapp, i przekazuje jej sterowanie z pełnym URI. Taki mechanizm pozwala aplikacjom wymieniać się danymi i otwierać się nawzajem bez udziału infrastruktury serwerowej.

Koncepcja URL Scheme pochodzi bezpośrednio ze standardów internetowych RFC 3986, gdzie schemat URI jest pierwszym komponentem każdego uniwersalnego identyfikatora zasobu. W programowaniu mobilnym ta idea została zaadaptowana do komunikacji między aplikacjami, gdzie zamiast serwera HTTP działa sama aplikacja obsługująca link.

Przykłady znanych URL Scheme

Wiele popularnych aplikacji rejestruje własne URL Scheme do integracji z usługami zewnętrznymi. Na przykład Spotify używa schematu spotify://, Telegram — tg://, a Instagram — instagram://. Programiści często tworzą także schemat w postaci appname:// do wewnętrznej nawigacji i testowania ekranów.

URL Scheme są nadal szeroko stosowane w powiadomieniach push, kampaniach emailowych i kodach QR, gdzie wymagane jest natychmiastowe przejście do konkretnej sekcji aplikacji. Jednak począwszy od iOS 9 i Android 6 pojawiły się alternatywne mechanizmy, które stopniowo uzupełniają i zastępują surowe schematy.

Składnia URL Scheme: schemat, host i ścieżka

Struktura niestandardowego URI podlega ogólnej specyfikacji RFC 3986 i składa się z kilku komponentów. Schemat jest podawany jako pierwszy i oddzielany dwukropkiem od reszty adresu. Po schemacie mogą nastąpić host, port, ścieżka, parametry query i fragment, z których każdy jest opcjonalny.

Pełna składnia wygląda jako scheme://host/path?key=value#fragment. Schemat jest jedynym obowiązkowym elementem, pozostałe są określane przez potrzeby konkretnej implementacji. Podwójny ukośnik po schemacie historycznie pochodzi z HTTP i nie jest ściśle wymagany przez specyfikację, ale jest powszechnie stosowany jako konwencja.

Komponenty URI

Do wizualnego przedstawienia struktury URI używa się tabeli komponentów. Każdy element ma swoje przeznaczenie i poziom obowiązkowości.

KomponentPrzykładObowiązkowość
SchememyappTak
HostprofileNie
Path/user/42Nie
Query?id=42&tab=mainNie
Fragment#section2Nie

Programiści mogą dowolnie wybierać strukturę URI, co zapewnia elastyczność, ale stwarza problemy ze zgodnością między różnymi wersjami aplikacji. Zaleca się dokumentowanie formatu URL Scheme jako części publicznego API aplikacji i wersjonowanie go przy zmianach.

Jak działa URL Scheme w iOS

iOS wymaga jawnej rejestracji każdego URL Scheme w pliku Info.plist projektu. Programista dodaje tablicę CFBundleURLTypes, której każdy element zawiera identyfikator (CFBundleURLName) i listę obsługiwanych schematów (CFBundleURLSchemes). Po rejestracji system automatycznie kieruje wszystkie przychodzące wywołania na zarejestrowane schematy do aplikacji.

Obsługa przychodzącego URL Scheme odbywa się w delegacie aplikacji przez metodę application(_:open:options:). Ta metoda otrzymuje obiekt URL, z którego wyodrębniana jest ścieżka i parametry query w celu podjęcia decyzji o nawigacji. Obsługa musi zwrócić wartość Bool wskazującą na powodzenie operacji.

Obsługa w AppDelegate

Poniżej znajduje się przykład implementacji obsługi URL Scheme w języku Swift. Kod demonstruje wyodrębnianie hosta i parametrów query z przychodzącego URI za pomocą URLComponents.

swift
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
}

Metoda używa URLComponents do bezpiecznego parsowania parametrów query. To podejście jest preferowane nad ręcznym analizowaniem stringa, ponieważ automatycznie obsługuje kodowanie procentowe i dekodowanie znaków specjalnych w wartościach parametrów.

Jak działa URL Scheme w Android

Android używa systemu Intent Filter do routowania deep link na podstawie URL Scheme. Programista deklaruje filtr w AndroidManifest.xml wewnątrz tagu Activity, która ma obsługiwać link. Filtr zawiera action VIEW, kategorie BROWSABLE i DEFAULT, a także tag data z określeniem schematu, hosta i pathPrefix.

Gdy użytkownik kliknie link z niestandardowym schematem, system sprawdza Intent Filter wszystkich zainstalowanych aplikacji. Jeśli znaleziono kilka pasujących aplikacji, użytkownikowi wyświetlany jest dialog wyboru. Kategoria BROWSABLE zezwala na obsługę linku z przeglądarki.

Konfiguracja Intent Filter

Przykład deklaracji Intent Filter w AndroidManifest.xml do obsługi schematu myapp na Activity. Kombinacja action i category jest obowiązkowa dla prawidłowego routowania deep link.

xml
<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>

Po skonfigurowaniu filtra w Activity należy wywołać intent.getData() w celu uzyskania URI. Ważne jest sprawdzenie intent i danych na null, ponieważ Activity może zostać uruchomiona bez przychodzącego deep link, na przykład przy standardowym uruchomieniu z lauchera.

Przekazywanie parametrów przez URL Scheme

Parametry query w URL Scheme są przekazywane po znaku zapytania w formacie klucz=wartość, oddzielone ampersandem. Ten format jest identyczny z zapytaniami HTTP i łatwo obsługiwany przez standardowe narzędzia platformy. Parametry muszą być zakodowane za pomocą kodowania procentowego dla wszystkich znaków nie należących do dozwolonego zestawu URI.

Przykład pełnego linku z parametrami: myapp://profile?userId=42&source=email&ref=abc123. Po wyodrębnieniu URL aplikacja sekwencyjnie parsuje wszystkie query-items i na podstawie ich wartości podejmuje decyzję o nawigacji do docelowego ekranu.

Ograniczenie długości URI

Przy przesyłaniu złożonych danych ważne jest uwzględnienie ograniczenia długości URI. W iOS maksymalna długość URL Scheme jest ograniczona do 2 KB, po czym system obcina link. W Android limit wynosi około 8 KB, ale dokładna wartość zależy od wersji systemu i producenta urządzenia. Dla dużych ilości danych zaleca się przesyłanie tylko identyfikatora sesji przez URL Scheme, a pozostałe dane ładować z serwera.

Ograniczenia i alternatywy URL Scheme

Główną wadą URL Scheme jest niemożność obsłużenia linku, jeśli aplikacja nie jest zainstalowana na urządzeniu. Przeglądarka wyświetla błąd, a użytkownik traci kontekst przejścia. Aby rozwiązać ten problem, Apple wprowadziła Universal Links w iOS 9, a Google — App Links w Android 6. Oba mechanizmy rejestrują się przez domenę internetową powiązaną z aplikacją.

Universal Links i App Links działają jak zwykłe linki HTTPS, ale w przypadku zainstalowanej aplikacji otwierają ją bez dialogu wyboru. Jeśli aplikacja nie jest zainstalowana, link otwiera stronę internetową na tej samej domenie, zachowująć doświadczenie użytkownika. To czyni je preferowaną alternatywą dla środowiska produkcyjnego.

Mechanizmy fallback

Dla URL Scheme na iOS i Android nie ma wbudowanego mechanizmu fallback. Programiści stosują pośrednie rozwiącania serwerowe: link prowadzi do strony internetowej, która sprawdza instalację aplikacji przez JavaScript i przekierowuje albo do schematu, albo do sklepu z aplikacjami. Firebase Dynamic Links i Branch.io oferują gotowe rozwiącania tego problemu z obsługą deferred deep link, które automatycznie określają status instalacji i kierują użytkownika bez konieczności tworzenia własnego serwerowego pipeline.

Dodatkowa złożoność pojawia się przy użyciu URL Scheme w iOS 15+ i Android 12+, gdzie zaostrzono zasady prywatności. Safari blokuje próby otwarcia niezarejestrowanego schematu bez wcześniejszego potwierdzenia, a Android 12 ogranicza widoczność zainstalowanych aplikacji przez PackageManager. Te zmiany czynią użycie URL Scheme do komunikacji między aplikacjami mniej niezawodnym niż we wcześniejszych wersjach platform.

Często zadawane pytania

Czym URL Scheme różni się od Universal Links?

URL Scheme używa niestandardowego protokołu bez szyfrowania, a Universal Links działają przez HTTPS z weryfikacją domeny. Universal Links nie wywołują dialogu wyboru aplikacji i są prawidłowo obsługiwane przy braku aplikacji na urządzeniu.

Czy URL Scheme może zawierać znaki cyrylickie?

Tak, ale wszystkie znaki nie-ASCII muszą być zakodowane przez percent-encoding zgodnie z RFC 3986. Zaleca się unikanie cyrylicy w URL Scheme dla zapewnienia zgodności ze starszymi wersjami systemów i przeglądarek.

Ile URL Scheme może zarejestrować jedna aplikacja?

Nie ma ograniczeń co do liczby schematów ani w iOS, ani w Android. W praktyce aplikacje używają od jednego do pięciu schematów. Na przykład Telegram rejestruje schematy tg://, t.me/, telegram:// i telegram.me://.

Jak sprawdzić, czy urządzenie obsługuje mój URL Scheme?

W iOS używa się metody canOpenURL(_:), która zwraca true w przypadku istnienia zarejestrowanego schematu. W Android sprawdzenie wykonuje się przez PackageManager.queryIntentActivities(). Obie platformy wymagają wcześniejszego określenia schematu w konfiguracji.

Czy można przesyłać hasła przez URL Scheme?

Nie, URL Scheme nie szyfruje danych. Każda aplikacja, która zarejestrowała ten sam schemat, może przechwycić link. Dla bezpieczeństwa używaj Universal Links z HTTPS lub szyfrowania danych na poziomie protokołu.

Podsumowanie

  • URL Scheme — niestandardowy protokół URI do komunikacji między aplikacjami na platformach mobilnych według standardu RFC 3986.
  • Rejestracja schematu odbywa się w Info.plist dla iOS i w AndroidManifest.xml dla Android przez mechanizm Intent Filter.
  • Obsługa przychodzącego linku w iOS odbywa się przez delegata aplikacji, w Android — przez intent.getData() w docelowej Activity.
  • Parametry są przesyłane przez query-string z kodowaniem procentowym i ograniczeniem długości do 2 KB na iOS.
  • Ograniczenie — URL Scheme nie działa przy braku aplikacji; wymagane są Universal Links lub App Links dla prawidłowego fallback.
  • Alternatywy — Universal Links (iOS), App Links (Android) oraz komercyjne platformy Firebase Dynamic Links i Branch.io.
  • Bezpieczeństwo — URL Scheme nie szyfruje danych, dlatego nie nadaje się do przesyłania poufnych informacji.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również