App Link to mechanizm Android (Android 6.0+), który automatycznie otwiera linki internetowe w zainstalowanej aplikacji, pomijając okno wyboru. Termin został wprowadzony przez Google w 2015 roku wraz z Android 6.0 Marshmallow. Według Android Developers, App Link wykorzystuje Digital Asset Links — kryptograficzną weryfikację poprzez plik na serwerze, potwierdzającą, że domena należy do developera aplikacji.
Najważniejsze
App Link (Android App Link) — to standardowy link HTTPS, który po kliknięciu na urządzeniu z Androidem automatycznie otwiera zainstalowaną aplikację bez wyświetlania standardowego okna wyboru między przeglądarką a aplikacją. Google wprowadził App Link w Android 6.0 (API 23) jako rozwiązanie problemu «okna wyboru», które obniżało konwersję deep link z powodu dodatkowego kliknięcia i dezorientacji użytkownika.
Kluczowa innowacja: weryfikacja. Android sprawdza, czy domena rzeczywiście należy do developera aplikacji, poprzez Digital Asset Links API. Google Play Store weryfikuje App Link przy publikacji i może odrzucić aktualizację, jeśli weryfikacja nie zostanie przeprowadzona. To czyni App Link bezpieczniejszym niż Custom URL Scheme: żadna inna aplikacja nie może przechwycić linku do Twojej domeny.
Digital Asset Links — to otwarty protokół, którego Google używa nie tylko dla App Link, ale także do łączenia stron internetowych z aplikacjami w wynikach wyszukiwania, Google Assistant i Smart Lock for Passwords. Protokół opiera się na kryptograficznej weryfikacji: w assetlinks.json podawany jest odcisk SHA256 certyfikatu podpisu aplikacji, co uniemożliwia fałszerstwo.
Proces działania App Link składa się z trzech etapów: weryfikacja Digital Asset Links, przetwarzanie przez Intent Filter i automatyczne przekierowanie. Każdy etap jest obowiązkowy. Jeśli weryfikacja nie zostanie przeprowadzona, Android wyświetla okno wyboru — taki deep link działa jak zwykły, ale bez zalety automatycznego przekierowania.
Asset Links — plik JSON umieszczany na serwerze pod adresem https://domena/.well-known/assetlinks.json. Plik zawiera tablicę obiektów z polami: relation (tablica stringów opisujących typ połączenia), target (obiekt z namespace i package_name aplikacji, a także sha256_cert_fingerprints — tablica odcisków SHA256 certyfikatu podpisu).
// assetlinks.json — minimalna konfiguracja App Link
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
]
}
}]
Odcisk SHA256 uzyskuje się z certyfikatu, którym podpisana jest aplikacja. Dla kompilacji debug używany jest standardowy certyfikat debug Androida, dla release — certyfikat z Google Play Console lub własny. Ważne: przy zmianie certyfikatu podpisu (np. przy przejściu na App Signing by Google Play) należy zaktualizować assetlinks.json na serwerze, w przeciwnym razie App Link przestanie działać.
Android sprawdza App Link przy pierwszym kliknięciu linku. System pobiera assetlinks.json z serwera, porównuje package_name i odcisk SHA256 z certyfikatem zainstalowanej aplikacji. Jeśli dane są zgodne, Android oznacza Intent Filter jako zweryfikowany, a wszystkie kolejne linki do tej domeny otwierają się automatycznie, bez okna wyboru.
// AndroidManifest.xml — Intent Filter dla App Link
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<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:scheme="https"
android:host="example.com"
android:pathPrefix="/product" />
</intent-filter>
</activity>
autoVerify="true" — obowiązkowy atrybut, który nakazuje Androidowi sprawdzenie assetlinks.json. Bez tego atrybutu Intent Filter nie zostanie zweryfikowany, a App Link nie zostanie aktywowany. Android obsługuje wiele Intent Filter w jednej Activity — dla różnych hostów. System sprawdza każdy host osobno. Weryfikacja wykonywana jest asynchronicznie i może zająć do 20 sekund przy pierwszym przejściu.
Po pomyślnej weryfikacji Android automatycznie otwiera aplikację przy kliknięciu dowolnego linku pasującego do zweryfikowanego Intent Filter. Użytkownik nie widzi okna wyboru — aplikacja otwiera się natychmiast. Jeśli aplikacja nie jest zainstalowana, link otwiera się w przeglądarce (jak zwykła strona internetowa). To idealne doświadczenie użytkownika: bezproblemowe przejście bez zbędnych działań.
Ważne: automatyczne przekierowanie działa tylko dla schematu HTTPS. App Link nie obsługuje HTTP (niezabezpieczony protokół). Jeśli użytkownik ręcznie otworzy link HTTP (np. z SMS), Android nie wykonuje weryfikacji i wyświetla okno wyboru. Zaleca się używanie HTTPS dla wszystkich linków prowadzących do aplikacji i skonfigurowanie przekierowania HTTP → HTTPS na serwerze.
App Link to ewolucja Deep Link na Androidzie, a nie zamiennik. Różnica między nimi jest fundamentalna. Zwykły Deep Link (Custom URL Scheme) działa przez Intent Filter z niestandardowym schematem (myapp://) i bez autoVerify. Android nie sprawdza, czy aplikacja rzeczywiście jest związana z tym schematem — każda aplikacja może zarejestrować myapp:// i przechwytywać linki.
App Link rozwiązuje trzy problemy Deep Link. Po pierwsze: bezpieczeństwo — weryfikacja przez Digital Asset Links wyklucza przechwytywanie linków. Po drugie: doświadczenie użytkownika — brak okna wyboru zwiększa konwersję do docelowej akcji o 20–40%. Po trzecie: indeksacja — Google indeksuje linki HTTPS App Link i może wyświetlać je w wynikach wyszukiwania jako linki do treści wewnątrz aplikacji.
Zgodność: App Link działa na Android 6.0+ (99% urządzeń). Dla Android 5.x (Lollipop) używany jest zwykły Deep Link z oknem wyboru. Dlatego zaleca się obsługę obu mechanizmów: App Link dla nowoczesnych urządzeń i Custom URL Scheme jako fallback dla starszych wersji. Intent Filter z autoVerify="true" nie psuje wstecznej kompatybilności — na Android < 6 atrybut jest ignorowany.
| Cecha | Deep Link | App Link |
|---|---|---|
| Schemat | Niestandardowy (myapp://) | HTTPS (https://domena) |
| Weryfikacja | Nie | assetlinks.json |
| Okno wyboru | Wyświetlane | Automatyczne przekierowanie |
| Wersja Android | API 1+ | API 23+ (6.0+) |
| Indeksacja Google | Nie | Tak (URL HTTPS) |
Konfiguracja App Link wymaga trzech kroków: konfiguracja Intent Filter w manifeście, umieszczenie assetlinks.json na serwerze i sprawdzenie weryfikacji. Pierwszy krok — dodać w AndroidManifest.xml Intent Filter z android:autoVerify="true". Ważne jest podanie schematu HTTPS, hosta i ścieżek, które aplikacja ma obsługiwać. Ścieżki mogą zawierać wildcard (*) dla podfolderów.
Drugi krok — utworzenie assetlinks.json. Plik można wygenerować przez Android Studio (Tools → App Links Assistant). Asystent pomaga również w debugowaniu i testowaniu. Plik umieszczany jest na serwerze pod ścieżką /.well-known/assetlinks.json. Serwer musi zwracać Content-Type: application/json i być dostępny przez HTTPS bez przekierowań. Google Play Console również pokazuje status weryfikacji App Link w sekcji Publishing.
Testowanie — trzeci krok. Użyj adb do sprawdzenia: polecenie adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/42" otwiera aplikację. Jeśli zamiast aplikacji otwiera się przeglądarka — sprawdź assetlinks.json i autoVerify. Android Studio App Links Assistant zawiera wbudowany tester: pokazuje status weryfikacji dla każdej domeny i ścieżki. Do automatycznego testowania używaj Android Testing Library z Intent Matcher.
Android 12 (API 31) wprowadził zmiany w obsłudze App Link. Dodano nową weryfikację specyficzną dla domeny: system sprawdza każdy link osobno, a nie cały Intent Filter. Zwiększa to bezpieczeństwo, ale wymaga aktualizacji pliku assetlinks.json przy dodawaniu nowych ścieżek. Android 12 wprowadził również Android App Links Assistant w zestawie z ADB — polecenia do zarządzania weryfikacją przez shell.
Wiele domen — typowy scenariusz produkcyjny. Aplikacja może obsługiwać linki z example.com, m.example.com i example.org. Dla każdej domeny potrzebny jest osobny assetlinks.json na odpowiednim serwerze. W manifeście dodaje się wiele Intent Filter — po jednym na domenę. Wszystkie domeny muszą być dostępne przez HTTPS i przechodzić weryfikację niezależnie.
App Link i Jetpack Navigation — zalecany sposób obsługi App Link w nowoczesnych aplikacjach Android. Jetpack Navigation obsługuje deklaratywne deep link w nav_graph.xml lub przez NavDeepLinkRequest. Upraszcza to nawigację: developer opisuje, który ekran otwiera się pod określonym URL, a komponent Navigation sam przetwarza Intent i przywraca stos nawigacji. Google zaleca używanie właśnie Jetpack Navigation dla App Link.
// Obsługa App Link przez Jetpack Navigation
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent) {
intent.data?.let { uri ->
navController.handleDeepLink(NavDeepLinkRequest
.Builder
.fromUri(uri)
.build()
)
}
}
}
Google Play Store sprawdza App Link przy publikacji. Jeśli w manifeście podano Intent Filter z autoVerify, ale assetlinks.json jest niedostępny lub nieprawidłowy, Google Play może odrzucić aktualizację z ostrzeżeniem. W konsoli developera (Policy and Programs → App Links) wyświetlany jest status weryfikacji każdej domeny. Przed publikacją koniecznie sprawdź status — naprawa po odrzuceniu aktualizacji opóźnia wydanie.
Często zadawane pytania
App Link — to Deep Link z weryfikacją przez Digital Asset Links. Główne różnice: App Link używa schematu HTTPS zamiast niestandardowego, nie wyświetla okna wyboru i jest indeksowany przez Google. Zwykły Deep Link działa na wszystkich wersjach Androida, ale wymaga ręcznego wyboru aplikacji.
Plik umieszczany jest w katalogu głównym serwera HTTPS pod ścieżką /.well-known/assetlinks.json. Serwer musi zwracać Content-Type: application/json. Plik należy aktualizować przy zmianie certyfikatu podpisu lub dodawaniu nowych domen.
Główne przyczyny: brak android:autoVerify="true" w Intent Filter, assetlinks.json niedostępny przez HTTPS, nieprawidłowy odcisk SHA256, inny certyfikat podpisu (debug vs release). Sprawdź przez adb shell dumpsync domain_verification status weryfikacji.
Nie — App Link wymaga serwera HTTPS z dostępnym assetlinks.json. Jeśli nie masz domeny, użyj Firebase Hosting lub GitHub Pages do hostowania pliku. Alternatywa: Custom URL Scheme (bez weryfikacji) lub Firebase Dynamic Links.
Nie — App Link jest obsługiwany na Android 6.0 (API 23) i nowszych. Na Android 5 Intent Filter z android:autoVerify="true" ignoruje ten atrybut i działa jak zwykły Deep Link z oknem wyboru. Zaleca się obsługę obu mechanizmów dla wstecznej kompatybilności.
Podsumowanie
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.
Przeczytaj również