Tworzenie precyzyjnych linków do zawartości aplikacji

Gdy kliknięty link lub żądanie zautomatyzowane wywołuje intencję identyfikatora URI, system Android próbuje w podanej kolejności wykonywać wszystkie te działania, aż żądanie zostanie zrealizowane:

  1. Otwórz preferowaną przez użytkownika aplikację, która może obsługiwać identyfikator URI (jeśli został wyznaczony).
  2. Otwórz jedyną dostępną aplikację, która obsługuje ten identyfikator URI.
  3. Zezwalaj użytkownikowi na wybór aplikacji w oknie.

Wykonaj poniższe czynności, aby utworzyć i przetestować linki do swoich treści. Linki aplikacji na Androida możesz też dodawać za pomocą Asystenta linków aplikacji w Android Studio.

Uwaga: od Androida 12 (poziom interfejsu API 31) ogólna intencja internetowa prowadzi do działania w aplikacji tylko wtedy, gdy zostanie zatwierdzona dla określonej domeny zawartej w tej intencji internetowej. Jeśli Twoja aplikacja nie zostanie zatwierdzona w danej domenie, intencja internetowa zostanie przypisana do domyślnej przeglądarki użytkownika.

Dodaj filtry intencji dla linków przychodzących

Aby utworzyć link do treści aplikacji, dodaj filtr intencji, który będzie zawierał te elementy i wartości atrybutów w pliku manifestu:

<action>
Określ działanie intencji ACTION_VIEW, aby umożliwić dostęp do filtra intencji z poziomu wyszukiwarki Google.
<data>
Dodaj co najmniej 1 tag <data>, z których każdy reprezentuje format URI odpowiadający aktywności. Tag <data> musi zawierać przynajmniej atrybut android:scheme.

Możesz dodać więcej atrybutów, aby dodatkowo doprecyzować typ identyfikatora URI akceptowany przez działanie. Na przykład możesz mieć wiele działań, które akceptują podobne identyfikatory URI, ale różnią się tylko nazwą ścieżki. W takim przypadku użyj atrybutu android:path lub jego wersji pathPattern lub pathPrefix, aby rozróżnić działanie, które system powinien otwierać w przypadku różnych ścieżek URI.

<category>
Uwzględnij kategorię BROWSABLE. Jest on wymagany, aby filtr intencji był dostępny w przeglądarce. Bez tego kliknięcie linku w przeglądarce nie spowoduje otwarcia Twojej aplikacji.

Uwzględnij też kategorię DEFAULT. Dzięki temu aplikacja może reagować na intencje niejawne. Bez tego działanie może być uruchomione tylko wtedy, gdy intencja zawiera nazwę komponentu aplikacji.

Poniższy fragment kodu XML pokazuje, jak możesz określić filtr intencji w pliku manifestu na potrzeby precyzyjnych linków. Identyfikatory URI “example://gizmos” i “http://www.example.com/gizmos” są przypisane 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 2 filtry intencji różnią się tylko elementem <data>. Chociaż w jednym filtrze można uwzględnić wiele elementów <data>, ważne jest utworzenie osobnych filtrów, gdy chcesz zadeklarować unikalne adresy URL (np. określone połączenie scheme i host), ponieważ wiele elementów <data> w jednym filtrze intencji jest scalonych, by uwzględnić wszystkie odmiany połączonych atrybutów. Weź pod uwagę na przykład te kwestie:

<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.com i app://open.my.app. Obsługuje jednak te 2 opcje, a także te: app://www.example.com i https://open.my.app.

Uwaga: jeśli wiele aktywności zawiera filtry intencji, które odwołują się do tego samego zweryfikowanego linku aplikacji na Androida, nie ma gwarancji, która aktywność obsługuje link.

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

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

Odczytywanie danych z intencji przychodzących

Gdy system rozpocznie działanie za pomocą filtra intencji, możesz użyć danych dostarczanych przez funkcję Intent, aby określić, co należy wyrenderować. Wywołaj metody getData() i getAction(), aby pobrać dane i działanie powiązane z przychodzącym Intent. Te metody możesz wywołać w dowolnym momencie w trakcie cyklu życia aktywności, ale zazwyczaj należy to zrobić podczas wczesnych wywołań zwrotnych, np. onCreate() lub onStart().

Ten fragment kodu 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();
}

Postępuj zgodnie z tymi sprawdzonymi metodami, aby zadbać o wrażenia użytkowników:

  • 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 widzą zawartość aplikacji, nawet jeśli nigdy jej nie otwierali. Można prosić użytkowników o kolejne interakcje lub gdy otwierają aplikację z Menu z aplikacjami.
  • Postępuj zgodnie ze wskazówkami dotyczącymi projektowania opisanymi w sekcji Nawigacja z użyciem przechodzenia wstecz i w górę, aby aplikacja spełniła oczekiwania użytkowników dotyczące nawigacji wstecznej po przejściu do aplikacji za pomocą precyzyjnego linku.

Przetestuj precyzyjne linki

Możesz użyć narzędzia Android DebugBridge w połączeniu z narzędziem Menedżer aktywności (am), aby sprawdzić, czy filtry intencji określone na potrzeby precyzyjnych linków odpowiadają prawidłowej aktywności w aplikacji. Polecenie adb możesz uruchomić na urządzeniu lub w emulatorze.

Ogólna składnia testowania identyfikatora URI filtra intencji z adb to:

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

Na przykład podane poniżej polecenie próbuje wyświetlić docelową aktywność w aplikacji 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 powyżej moduł obsługi intencji określają połączenie między aplikacją a witryną oraz sposób działania z linkami przychodzącymi. Aby jednak system traktował aplikację jako domyślny moduł obsługi zestawu identyfikatorów URI, musisz też poprosić system o zweryfikowanie tego połączenia. Z następnej lekcji dowiesz się, jak przeprowadzić weryfikację.

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