Tworzenie precyzyjnych linków do zawartości aplikacji

Gdy kliknięty link lub żądanie automatyczne wywołuje intencję URI sieci, system Android ponawia w kolejności wszystkie poniższe działania, aż żądanie się powiedzie:

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

Aby utworzyć i przetestować linki do swoich treści, wykonaj podane niżej czynności. Możesz też użyć usługi Asystent linków aplikacji w Android Studio do dodania Linki aplikacji na Androida.

Uwaga: od Androida 12 (poziom interfejsu API 31) ogólny zamiar internetowy jest przekształcany w działanie w aplikacji tylko wtedy, gdy aplikacja została zatwierdzona dla konkretnej domeny zawartej w tym zamiarze. Jeśli Twoja aplikacja nie została zatwierdzona domena, intencja internetowa kieruje się do domyślnej przeglądarki użytkownika .

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 można było otworzyć filtr intencji z poziomu wyszukiwarki Google.
<data>
Dodaj co najmniej jeden element <data> , z których każdy reprezentuje format URI prowadzący do działania. Ma to być minimum Tag <data> musi zawierać android:scheme .

Możesz dodać więcej atrybutów, aby jeszcze bardziej sprecyzować typ identyfikatora URI akceptowany przez aktywność. Możesz mieć na przykład kilka aktywności, które akceptują podobne identyfikatory URI, ale różnią się one tylko nazwą ścieżki. W takim przypadku użyj parametru Atrybut android:path lub jej wariantach pathPattern lub pathPrefix, aby odróżnić system powinien otwierać system dla różnych ścieżek URI.

<category>
Uwzględnij kategorię BROWSABLE. Jest to wymagane, aby filtr intencji był dostępny z przeglądarki internetowej. 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 pośrednie. Bez tego aktywność może zostać uruchomiona tylko wtedy, gdy intencja określa nazwę komponentu aplikacji.

Poniższy fragment kodu XML pokazuje, jak określić filtr intencji w pliku manifestu precyzyjnych linków. Adresy URI “example://gizmos”“http://www.example.com/gizmos” odwołują się do tej samej 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 tym samym filtrze możesz uwzględnić wiele elementów <data>, jeśli chcesz zadeklarować unikalne adresy URL (np. określoną kombinację atrybutów schemehost), musisz utworzyć osobne filtry, ponieważ elementy <data> w tym samym filtrze intencji są scalane, aby uwzględnić wszystkie kombinacje ich 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 ona tylko https://www.example.comapp://open.my.app. W praktyce obsługuje on te 2 formaty oraz te:app://www.example.comhttps://open.my.app.

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

Po dodaniu do aplikacji filtrów intencji z identyfikatorami URI dotyczącymi treści aktywności w pliku manifestu, Android może kierować dowolne Intent który ma identyfikatory URI pasujące do aplikacji w czasie działania.

Więcej informacji o definiowaniu filtrów intencji znajdziesz w artykule Zezwalanie innym aplikacjom na uruchamianie 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 renderować. Aby pobrać dane i działanie powiązane z przychodzącym zdarzeniem Intent, wywołaj metody getData()getAction(). Dostępne opcje mogą wywoływać te metody w każdym momencie cyklu życia działania, ale należy zwykle robić to podczas wczesnych wywołań zwrotnych, 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, stosuj te sprawdzone metody:

  • Precyzyjny link powinien prowadzić użytkowników bezpośrednio do treści bez żadnych próśb, stron pośrednich ani logowania. Zadbaj o to, aby użytkownicy mogli zobaczyć zawartość aplikacji, nawet jeśli nigdy wcześniej jej nie otwierali. Możesz prosić użytkowników o zgodę przy kolejnych interakcjach lub po uruchomieniu aplikacji w Menu z aplikacjami.
  • Postępuj zgodnie ze wskazówkami dotyczącymi projektowania opisanymi w artykule Nawigacja z klawiszami Wstecz i W górę, aby aplikacja spełniała oczekiwania użytkowników dotyczące nawigacji w te strony po tym, jak wejdą do niej przez precyzyjny link.

Testowanie precyzyjnych linków

Narzędzie Debugowanie w systemie Android Użyj narzędzia menedżera aktywności (am), aby sprawdzić, czy filtr intencji Identyfikatory URI podane na potrzeby precyzyjnych linków prowadzą do prawidłowej aktywności w aplikacji. Polecenie adb możesz uruchomić na urządzeniu lub w emulatorze.

Ogólna składnia do testowania identyfikatora URI filtra intencji za pomocą narzędzia adb to:

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

Na przykład poniższe polecenie próbuje wyświetlić docelową aktywność w aplikacji, która jest powiązany z określonym identyfikatorem URI.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

Zadeklarowana deklaracja pliku manifestu i obsługa intencji określają połączenie między aplikacją a witryną oraz sposób postępowania z linkami przychodzącymi. Jednak w przypadku aby system traktował aplikację jako domyślny moduł obsługi zestawu identyfikatorów URI, musisz poproś też system o zweryfikowanie tego połączenia. W następnej lekcji wyjaśniamy, jak przeprowadzić weryfikację.

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