Tworzenie precyzyjnych linków

Precyzyjne linki umożliwiają kierowanie użytkowników bezpośrednio do aplikacji z przeglądarek, powiadomień, mediów społecznościowych, reklam i innych źródeł. Precyzyjne linki umożliwiają bezpośrednie przechodzenie z aplikacji do aplikacji i z witryny 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 je tworzyć i testować.

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 działanie.

Jak działa precyzyjne linkowanie

Precyzyjne linkowanie to ogólna funkcja systemu Android, która jest obsługiwana we wszystkich wersjach na wszystkich urządzeniach. Wykorzystuje system intencji Androida do kierowania precyzyjnych linków do odpowiednich aplikacji. Aplikacje, które chcą obsługiwać określony identyfikator URI precyzyjnego linku, deklarują pasujący filtr intencji w plikach manifestu aplikacji.

W czasie działania, gdy użytkownik kliknie link, Android wywołuje 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 podanej kolejności, aby przekierować intencję:

  1. Otwórz domyślną aplikację użytkownika, która może obsłużyć identyfikator URI, jeśli została wyznaczona.
  2. Otwórz jedyną dostępną aplikację, która może obsłużyć identyfikator URI.
  3. Zezwól użytkownikowi na wybranie aplikacji w oknie uściślania.

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 własnej witryny i domen, używaj linków do aplikacji.

Okno uściślania na Androidzie pozwala użytkownikowi zobaczyć wszystkie aplikacje instalowane, które zostały zarejestrowane do obsługi intencji precyzyjnego linku. Użytkownik może też wybrać aplikację jako domyślną dla tego typu linku. Gdy użytkownik ustawi domyślną aplikację, system nie będzie już wyświetlać okna dla tej konkretnej intencji, a wybrana aplikacja otworzy się automatycznie.

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

Działanie okna uściślania zmieniało się w różnych wersjach Androida. Na przykład na Androidzie 12 i nowszych linki internetowe, które nie są zweryfikowanymi linkami do aplikacji, są zwykle domyślnie otwierane w przeglądarce, podczas gdy w starszych wersjach mogło pojawić się okno wyboru aplikacji, jeśli aplikacja mogła obsłużyć link internetowy.

Rodzaje precyzyjnych linków

Na Androidzie możesz obsługiwać 3 rodzaje precyzyjnych linków:

  • Niestandardowe precyzyjne linki: to precyzyjne linki, które używają niestandardowego schematu URI (np. example://products/123), aby kierować użytkownika bezpośrednio do określonej treści w aplikacji. Są one przydatne do nawigacji wewnętrznej lub linków ze źródeł, które kontrolujesz, ale nie są standardowymi linkami internetowymi i mogą nadal wywoływać okno uściślania, jeśli inna aplikacja zarejestruje ten sam schemat niestandardowy.
  • Linki internetowe: to precyzyjne linki, które używają standardowych schematów http i https. Są bardziej wszechstronne, ponieważ są standardowymi adresami URL, ale na Androidzie 12 i nowszych wersjach prawie zawsze wywołują okno uściślania, co oznacza, że domyślnie są obsługiwane przez przeglądarkę użytkownika, a nie przekierowywane do aplikacji.
  • Linki aplikacji: dostępne od Androida 6.0 (poziom interfejsu API 23) są to zweryfikowane linki internetowe. W procesie powiązania witryny możesz udowodnić systemowi Android, że jesteś właścicielem domeny. Po zweryfikowaniu system automatycznie przekierowuje linki do tej domeny bezpośrednio do aplikacji, całkowicie pomijając okno wyboru aplikacji. Dzięki temu użytkownicy mogą korzystać z usługi w sposób bezpieczny i bezproblemowy.

Dodawanie filtrów intencji dla linków przychodzących

Aby utworzyć link do treści aplikacji, dodaj do pliku manifestu filtr intencji zawierający 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 prowadzi do aktywności. Tag <data> musi zawierać co najmniej atrybut android:scheme.

Możesz dodać więcej atrybutów, aby dokładniej określić typ identyfikatora URI, który akceptuje aktywność. Możesz mieć na przykład wiele 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 określić, którą aktywność system powinien otworzyć w przypadku różnych ścieżek URI.

<category>

Uwzględnij kategorię BROWSABLE. Jest to wymagane, aby filtr intencji był dostępny z poziomu przeglądarki. Bez tego kliknięcie linku w przeglądarce nie spowoduje otwarcia aplikacji.

Uwzględnij też kategorię DEFAULT. Dzięki temu aplikacja może reagować na intencje niejawne. Bez tego aktywność można rozpocząć tylko wtedy, gdy intencja określa nazwę komponentu aplikacji.

Poniższy fragment kodu XML pokazuje, jak określić filtr intencji w manifeście na potrzeby precyzyjnych linków. Identyfikatory URI "example://gizmos" i "http://www.example.com/gizmos" prowadzą do tej aktywności.

<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 te 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 utworzyć 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 odmiany ich połączonych atrybutów. Rozważmy na przykład taką sytuację:

<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ługiwane są tylko https://www.example.com i app://open.my.app. W rzeczywistości obsługuje jednak te 2 oraz te: app://www.example.com i https://open.my.app.

Gdy dodasz do pliku manifestu aplikacji filtry intencji z identyfikatorami URI treści aktywności, Android będzie mógł w czasie działania przekierowywać do aplikacji wszystkie obiekty Intent, które mają pasujące identyfikatory URI.

Więcej informacji o definiowaniu filtrów intencji znajdziesz w artykule Zezwalanie innym aplikacjom na uruchamianie aktywności.

Odczytywanie danych z przychodzących intencji

Gdy system uruchomi aktywność za pomocą filtra intencji, możesz użyć danych dostarczonych przez Intent, aby określić, co chcesz wyrenderować. Wywołaj metody getData() i getAction(), aby pobrać dane i działanie powiązane z przychodzącym obiektem Intent. Te metody możesz wywoływać w dowolnym momencie cyklu życia aktywności, ale zwykle należy to robić podczas wczesnych wywołań zwrotnych, takich jak onCreate() lub onStart.

Oto fragment kodu, który pokazuje, jak pobrać dane z obiektu 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 zwiększyć wygodę użytkowników, stosuj te sprawdzone metody:

  • Precyzyjny link powinien prowadzić użytkowników bezpośrednio do treści, bez żadnych próśb, stron pełnoekranowych ani logowania. Upewnij się, że użytkownicy mogą zobaczyć zawartość aplikacji, nawet jeśli nigdy wcześniej jej nie otwierali. Możesz wyświetlać użytkownikom prośby podczas kolejnych interakcji lub gdy otwierają aplikację z Menu z aplikacjami.
  • Postępuj zgodnie ze wskazówkami 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 wstecz po wejściu do aplikacji za pomocą precyzyjnego linku.

Testowanie precyzyjnych linków

Możesz użyć narzędzia Android Debug Bridge z narzędziem Activity Manager (am), aby sprawdzić, czy identyfikatory URI filtra intencji określone na potrzeby precyzyjnych linków prowadzą do właściwej aktywności w aplikacji. Polecenie adb możesz uruchomić na urządzeniu lub emulatorze.

Ogólna składnia testowania identyfikatora URI filtra intencji za pomocą adb:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

Na przykład poniższe 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żywać flagi --debug-link z am start, aby diagnozować, jak system rozpoznaje adres URL, i sprawdzać pasujące filtry intencji lub reguły dynamicznych linków do aplikacji. Więcej informacji znajdziesz w artykule Diagnozowanie rozwiązywania linków za pomocą flagi debug-link.

Deklaracja w pliku manifestu i ustawiony moduł obsługi intencji określają połączenie między aplikacją a witryną oraz sposób postępowania 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. W artykule Weryfikowanie linków aplikacji znajdziesz informacje o tym, jak przeprowadzić tę weryfikację.

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