Precyzyjne linki pozwalają kierować użytkowników bezpośrednio do aplikacji z przeglądarek internetowych, powiadomień, mediów społecznościowych, reklam i innych źródeł. Precyzyjne linki umożliwiają bezpośrednie przejścia z aplikacji do aplikacji i z internetu do aplikacji, co może pomóc w zwiększeniu zaangażowania dzięki kontekstowym, ukierunkowanym treściom.
Z tego przewodnika dowiesz się, jak działają precyzyjne linki oraz jak tworzyć i testować precyzyjne linki do swoich treści.
W przypadku precyzyjnych linków, które odwołują się do Twojej witryny lub domen, zalecamy używanie linków do aplikacji, które zapewniają użytkownikom bezproblemowe i bezpieczne korzystanie z usługi.
Jak działają precyzyjne linki
Precyzyjne linki to ogólna funkcja systemu Android, która jest obsługiwana we wszystkich wersjach i na wszystkich urządzeniach. Wykorzystuje ona system intencji Androida do kierowania precyzyjnych linków do zainteresowanych aplikacji. Aplikacje, które chcą obsługiwać określony identyfikator URI precyzyjnego linku, deklarują pasujący filtr intencji w plikach manifestu aplikacji.
Gdy użytkownik kliknie link, Android uruchamia intencję i próbuje przekierować ją do aplikacji. Ponieważ wiele aplikacji może deklarować filtry intencji pasujące do danego identyfikatora URI, Android wykonuje te działania w tej kolejności, aby przekierować intencję:
- Otwiera domyślną aplikację użytkownika, która może obsługiwać identyfikator URI, jeśli taka została wskazana.
- Otwiera jedyną dostępną aplikację, która może obsługiwać identyfikator URI.
- Umożliwia użytkownikowi wybranie aplikacji w oknie dialogowym z pytaniem o wybór.
Oznacza to, że nawet jeśli Twoje filtry intencji pasują do danego identyfikatora URI, nie ma gwarancji, że system przekieruje intencję precyzyjnego linku do Twojej aplikacji. Użytkownik odgrywa kluczową rolę w zarządzaniu tym, która aplikacja obsługuje intencję, co daje mu kontrolę i możliwość wyboru. Aby mieć większą kontrolę nad precyzyjnymi linkami do swojej witryny i domen, spróbuj użyć linków do aplikacji.
Okno dialogowe z pytaniem o wybór w Androidzie umożliwia użytkownikowi wyświetlenie wszystkich zainstalowanych aplikacji, które zarejestrowały się do obsługi intencji precyzyjnego linku. Użytkownik może też wybrać aplikację jako domyślną dla tego typu linków. Gdy użytkownik ustawi domyślną aplikację, system nie będzie już wyświetlać okna dialogowego dla tej konkretnej intencji, a wybrana aplikacja otworzy się automatycznie.

Rysunek 1. Okno dialogowe z pytaniem o wybór
Działanie okna dialogowego z pytaniem o wybór zmieniało się w kolejnych wersjach Androida. Na przykład w Androidzie 12 i nowszych wersjach linki internetowe, które nie są zweryfikowanymi linkami do aplikacji, będą domyślnie otwierane w przeglądarce internetowej, natomiast w poprzednich wersjach, jeśli aplikacja mogła obsługiwać link internetowy, mogło się pojawić okno dialogowe z pytaniem o wybór.
Uwaga: od Androida 12 (API na poziomie 31) ogólna intencja internetowa jest rozpoznawana jako aktywność w Twojej aplikacji tylko wtedy, gdy aplikacja jest zatwierdzona w przypadku konkretnej domeny zawartej w tej intencji internetowej. Jeśli Twoja aplikacja nie jest zatwierdzona w przypadku domeny, intencja internetowa jest rozpoznawana jako domyślna aplikacja przeglądarki użytkownika.
Rodzaje precyzyjnych linków
W Androidzie możesz obsługiwać 3 rodzaje precyzyjnych linków:
- Niestandardowe precyzyjne linki: są to precyzyjne linki, które używają niestandardowego schematu URI (np.
example://products/123), aby przekierować użytkownika bezpośrednio do określonej treści w aplikacji. Są one przydatne w przypadku nawigacji wewnętrznej lub linków ze źródeł, nad którymi masz kontrolę, ale nie są standardowymi linkami internetowymi i mogą nadal wywoływać okno dialogowe z pytaniem o wybór, jeśli inna aplikacja zarejestruje ten sam schemat niestandardowy. - Linki internetowe: są to precyzyjne linki, które używają standardowych
httpihttpsschematów. Są bardziej uniwersalne, ponieważ są standardowymi adresami URL, ale w Androidzie 12 i nowszych wersjach prawie zawsze będą wywoływać okno dialogowe z pytaniem o wybór, co oznacza, że domyślnie będą obsługiwane przez przeglądarkę internetową użytkownika, a nie przekierowywane do Twojej aplikacji. - Linki do aplikacji: dostępne od Androida 6.0 (API na poziomie 23), są to zweryfikowane linki internetowe. Dzięki procesowi powiązania z witryną możesz udowodnić systemowi Android, że jesteś właścicielem domeny. Po zweryfikowaniu system automatycznie przekierowuje linki do tej domeny bezpośrednio do Twojej aplikacji, pomijając okno dialogowe z pytaniem o wybór. Zapewnia to użytkownikom bezpieczne i bezproblemowe korzystanie z usługi.
Dodawanie filtrów intencji dla linków przychodzących
Aby utworzyć link do treści aplikacji, dodaj w manifeście filtr intencji, który zawiera te elementy i wartości atrybutów:
Określ działanie intencji ACTION_VIEW, aby filtr intencji był dostępny z wyszukiwarki Google.
Dodaj co najmniej 1 tag <data>, z których każdy reprezentuje format identyfikatora URI, który
jest rozpoznawany jako aktywność. Tag <data> musi zawierać co najmniej atrybut
android:scheme.
Możesz dodać więcej atrybutów, aby dokładniej określić typ identyfikatora URI akceptowanego przez aktywność. Możesz na przykład mieć kilka aktywności, które akceptują podobne identyfikatory URI, ale różnią się tylko nazwą ścieżki. W takim przypadku użyj atrybutu
android:path lub jego wariantów pathPattern lub pathPrefix, aby
odróżnić, którą aktywność system powinien otworzyć w przypadku różnych ścieżek identyfikatora URI.
Dodaj kategorię BROWSABLE. Jest ona wymagana, aby filtr intencji był dostępny z przeglądarki internetowej. Bez niej kliknięcie linku w przeglądarce nie może zostać rozpoznane jako Twoja aplikacja.
Dodaj też kategorię DEFAULT. Umożliwia to aplikacji reagowanie na intencje niejawne. Bez niej aktywność można uruchomić tylko wtedy, gdy intencja określa nazwę komponentu aplikacji.
Poniższy fragment kodu XML pokazuje, jak można określić filtr intencji w pliku manifestu na potrzeby precyzyjnych linków. Identyfikatory URI "example://gizmos" i
"http://www.example.com/gizmos" są rozpoznawane jako ta aktywność.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
Zwróć uwagę, że te 2 filtry intencji różnią się tylko elementem <data>. Chociaż
w tym samym filtrze można umieścić kilka elementów <data>, ważne jest,
aby tworzyć osobne filtry, gdy chcesz zadeklarować
unikalne adresy URL (np. konkretną kombinację scheme i host), ponieważ
wiele elementów <data> w tym samym filtrze intencji jest łączonych
w celu uwzględnienia wszystkich wariantów ich połączonych atrybutów. Na przykład:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
Może się wydawać, że obsługuje to tylko https://www.example.com i app://open.my.app. W rzeczywistości obsługuje jednak te 2 adresy oraz te: app://www.example.com i https://open.my.app.
Uwaga: jeśli kilka aktywności zawiera filtry intencji, które są rozpoznawane jako ten sam zweryfikowany link do aplikacji na Androida, nie ma gwarancji, która aktywność obsłuży link.
Gdy dodasz do manifestu aplikacji filtry intencji z identyfikatorami URI treści aktywności, Android będzie mógł w czasie działania aplikacji przekierowywać do niej wszystkie intencje Intent z pasującymi identyfikatorami URI.
Więcej informacji o definiowaniu filtrów intencji znajdziesz w artykule Zezwalanie innym aplikacjom na uruchamianie Twojej aktywności.
Odczytywanie danych z intencji przychodzących
Gdy system uruchomi Twoją aktywność za pomocą filtra intencji, możesz użyć danych
dostarczonych przez Intent, aby określić, co musisz wyrenderować. Aby pobrać dane i
działanie powiązane z intencją przychodzącą Intent, wywołaj metody
getData() i getAction(). Możesz wywołać te metody
w dowolnym momencie cyklu życia aktywności, ale zwykle należy to zrobić
podczas wczesnych wywołań zwrotnych, takich jak onCreate() lub onStart.
Oto fragment kodu, który pokazuje, jak pobrać dane z Intent:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
Java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
Aby poprawić komfort użytkowników, stosuj te sprawdzone metody:
- Precyzyjny link powinien prowadzić użytkowników bezpośrednio do treści, bez żadnych monitów, stron pełnoekranowych ani logowania. Upewnij się, że użytkownicy mogą zobaczyć treści aplikacji, nawet jeśli nigdy wcześniej jej nie otworzyli. Możesz wyświetlać monity użytkownikom podczas kolejnych interakcji lub gdy otwierają aplikację z Menu z aplikacjami.
- Postępuj zgodnie z wytycznymi dotyczącymi projektowania opisanymi w artykule Nawigacja za pomocą przycisków Wstecz i W górę, aby aplikacja spełniała oczekiwania użytkowników dotyczące nawigacji wstecznej po przejściu do niej za pomocą precyzyjnego linku.
Testowanie precyzyjnych linków
Aby sprawdzić, czy identyfikatory URI filtrów intencji określone na potrzeby precyzyjnych linków są rozpoznawane jako prawidłowa aktywność aplikacji, możesz użyć narzędzia Android Debug Bridge z narzędziem Activity Manager (am) do testowania, czy identyfikatory URI filtrów intencji określone na potrzeby precyzyjnych linków są rozpoznawane jako prawidłowa aktywność aplikacji. Polecenie adb możesz uruchomić na urządzeniu lub w emulatorze.
Ogólna składnia testowania identyfikatora URI filtra intencji za pomocą adb jest taka:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
Na przykład to polecenie próbuje wyświetlić aktywność aplikacji docelowej powiązaną z określonym identyfikatorem URI.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
Uwaga: gdy w trasie zdefiniujesz kolekcję typów prostych, np.
**@Serializable data class Product(val colors: List)**, automatycznie
wygenerowany format adresu URL precyzyjnego linku to **basePath?colors={value**}. Jeśli spróbujesz
określić identyfikator URI z kilkoma parametrami zapytania (np.
**basepath?colors=red&colors=blue**), musisz użyć znaku ucieczki dla znaku ampersand
(np. **basepath?colors=red\&colors=blue**).
Deklaracja manifestu i ustawiony przez Ciebie moduł obsługi intencji określają połączenie między Twoją aplikacją a witryną oraz to, co należy zrobić z linkami przychodzącymi. Aby jednak system traktował Twoją aplikację jako domyślny moduł obsługi zestawu identyfikatorów URI, musisz też poprosić system o zweryfikowanie tego połączenia. Więcej informacji o tym, jak wdrożyć tę weryfikację, znajdziesz w artykule Weryfikowanie linków do aplikacji.
Więcej informacji o intencjach i linkach do aplikacji znajdziesz w tych materiałach:
- Intencje i filtry intencji
- Zezwalanie innym aplikacjom na uruchamianie Twojej aktywności
- Dodawanie linków do aplikacji na Androida za pomocą Android Studio