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, które mogą pomóc Ci zwiększyć zaangażowanie dzięki kontekstowym, kierowanym treściom.

Z tego przewodnika dowiesz się, jak działają precyzyjne linki oraz jak je tworzyć i testować w przypadku 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 wiarygodne wrażenia.

Jak działają precyzyjne linki

Precyzyjne linki to ogólna funkcja systemu Android obsługiwana na wszystkich wersjach i 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 wywoła intencję i spróbuje przekierować ją do aplikacji. Ponieważ wiele aplikacji może deklarować filtry intencji pasujące do danego identyfikatora URI, Android podejmuje te działania w tej kolejności, aby przekierować intencję:

  1. Otwórz domyślną aplikację użytkownika, która może obsługiwać identyfikator URI, jeśli została wyznaczona.
  2. Otwórz jedyną dostępną aplikację, która może obsłużyć ten URI.
  3. Umożliwia użytkownikowi wybranie aplikacji z okna wyboru.

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

Okno usuwania niejednoznaczności w Androidzie pozwala użytkownikowi zobaczyć wszystkie zainstalowane aplikacje, które zarejestrowały się do obsługi intencji precyzyjnego linku. Użytkownik może też wybrać aplikację jako domyślną dla tego typu linku. Gdy użytkownik ustawi aplikację domyślną, system nie będzie już wyświetlać okna dialogowego dla tego konkretnego zamiaru, a wybrana aplikacja będzie otwierać się automatycznie.

Okno dialogowe systemu Android z opcjami aplikacji dla linku.
Rysunek 1. Okno wyboru aplikacji

Działanie okna wyboru różni się w zależności od wersji Androida. Na przykład na Androidzie 12 i nowszych wersjach linki internetowe, które nie są zweryfikowanymi linkami do aplikacji, będą domyślnie otwierane w przeglądarce internetowej. W przypadku starszych wersji może się pojawić okno wyboru aplikacji, jeśli aplikacja może 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żytkowników bezpośrednio do określonych treści w aplikacji. Są 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 ujednoznaczniania, jeśli inna aplikacja zarejestruje ten sam schemat niestandardowy.
  • Linki internetowe: są to precyzyjne linki, które korzystają ze standardowych schematów httphttps. Są bardziej uniwersalne, ponieważ są standardowymi adresami URL, ale na Androidzie 12 i nowszych wersjach prawie zawsze wywołują okno wyboru, co oznacza, że domyślnie są obsługiwane przez przeglądarkę użytkownika, a nie przekierowywane do aplikacji.
  • Linki do 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 weryfikacji system automatycznie kieruje linki do tej domeny bezpośrednio do Twojej aplikacji, całkowicie pomijając okno wyboru aplikacji. Zapewnia to użytkownikom zaufane i bezproblemowe korzystanie z usługi.

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

Aby utworzyć link do treści aplikacji, dodaj do 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 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 akceptowanego przez działanie. Możesz na przykład mieć kilka działań, 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óre działanie system powinien otworzyć dla różnych ścieżek URI.

<category>

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

Uwzględnij też kategorię DEFAULT. Umożliwia to aplikacji reagowanie na intencje domyślne. Bez tego działanie można rozpocząć 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 precyzyjnego linkowania. Identyfikatory URI "example://gizmos""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>

Zwróć uwagę, że oba 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ę elementów schemehost), ponieważ wiele elementów <data> w tym samym filtrze intencji jest w rzeczywistości łączonych ze sobą, aby uwzględnić wszystkie odmiany ich połączonych atrybutów. Rozważmy 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 tylko https://www.example.comapp://open.my.app. W rzeczywistości obsługuje on te 2 znaki oraz te: app://www.example.comhttps://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 kierować do niej wszystkie intencje Intent, które mają pasujące identyfikatory URI.

Więcej informacji o definiowaniu filtrów intencji znajdziesz w artykule Umożliwianie innym aplikacjom uruchamiania aktywności.

Odczytywanie danych z przychodzących intencji

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 przychodzącym elementem Intent, wywołaj metody getData()getAction(). Możesz wywoływać te metody 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 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, postępuj zgodnie z tymi sprawdzonymi metodami:

  • 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ć zawartość aplikacji, nawet jeśli nigdy wcześniej jej nie otworzyli. Możesz wyświetlać prośby o ocenę podczas kolejnych interakcji lub gdy użytkownik otworzy 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 wejściu do niej za pomocą precyzyjnego linku.

Testowanie precyzyjnych linków

Za pomocą Android Debug Bridge i narzędzia menedżera aktywności (am) możesz sprawdzić, czy identyfikatory URI filtrów intencji określone dla precyzyjnych linków prowadzą do właściwej aktywności aplikacji. Polecenie adb możesz uruchomić na urządzeniu lub emulatorze.

Ogólna składnia testowania adresu URI filtra intencji za pomocą narzędzia adb jest następująca:

$ 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

Deklaracja w pliku manifestu i ustawiony przez Ciebie moduł obsługi intencji definiują połączenie między aplikacją a witryną oraz to, co należy zrobić z przychodzącymi linkami. Aby jednak system traktował Twoją aplikację jako domyślny moduł obsługi zestawu identyfikatorów URI, musisz też poprosić go 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: