Tworzenie precyzyjnych linków

Precyzyjne linki umożliwiają kierowanie użytkowników bezpośrednio do aplikacji z przeglądarek internetowych, powiadomień, mediów społecznościowych, reklam i innych źródeł. Precyzyjne linki zapewniają 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 płynne i bezpieczne korzystanie z aplikacji.

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ę:

  1. Otwiera domyślną aplikację użytkownika, która może obsługiwać identyfikator URI, jeśli taka została wskazana.
  2. Otwiera jedyną dostępną aplikację, która może obsługiwać identyfikator URI.
  3. Umożliwia użytkownikowi wybranie aplikacji w oknie wyboru aplikacji.

Oznacza to, że nawet jeśli 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, użyj linków do aplikacji.

Okno wyboru aplikacji 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.

Okno dialogowe systemu Android z opcjami aplikacji dla linku.
Rysunek 1. Okno uściślania

Zachowanie okna wyboru aplikacji 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 wyboru aplikacji.

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 wyboru aplikacji, jeśli inna aplikacja zarejestruje ten sam schemat niestandardowy.
  • Linki internetowe: są to precyzyjne linki, które używają standardowych http i https schematów. Są bardziej uniwersalne, ponieważ są standardowymi adresami URL, ale w Androidzie 12 i nowszych wersjach prawie zawsze wywołują okno wyboru aplikacji, 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 wyboru aplikacji. Zapewnia to użytkownikom bezpieczne i płynne korzystanie z aplikacji.

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:

<action>

Określ działanie intencji ACTION_VIEW, aby filtr intencji był dostępny z wyszukiwarki Google.

<data>

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ę ścieżką. 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.

<category>

Uwzględnij 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.

Uwzględnij 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 manifeście 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>

Zauważ, że 2 filtry intencji różnią się tylko elementem <data>. Chociaż w tym samym filtrze można uwzględnić wiele 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 scalanych , aby uwzględnić wszystkie warianty 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. Obsługuje jednak te 2 adresy, a także te: app://www.example.com i https://open.my.app.

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ć. Wywołaj metody getData() i getAction(), aby pobrać dane i działanie powiązane z przychodzącą Intent. 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 poziomu programu uruchamiającego.
  • Postępuj zgodnie z wytycznymi dotyczącymi projektowania opisanymi w artykule Nawigacja za pomocą przycisków Wstecz i W górę tak aby aplikacja spełniała oczekiwania użytkowników dotyczące nawigacji wstecznej po wejś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 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

Od Androida 17 możesz też użyć flagi --debug-link z poleceniem am start, aby zdiagnozować, jak system rozpoznaje adres URL, i sprawdzić pasujące filtry intencji lub reguły dynamicznych linków do aplikacji. Więcej informacji znajdziesz w artykule Diagnozowanie rozpoznawania linków za pomocą flagi debug-link.

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ć weryfikację, znajdziesz w artykule Weryfikowanie linków do aplikacji.

Więcej informacji o intencjach i linkach do aplikacji znajdziesz w tych materiałach: