Gdy kliknięty link lub żądanie programowe wywołuje intencję identyfikatora URI sieci, system Android próbuje wykonać kolejno te działania, dopóki żądanie nie zostanie zrealizowane:
- Otwórz preferowaną aplikację użytkownika, która może obsługiwać identyfikator URI, jeśli taka aplikacja jest wyznaczona.
- Otwórz jedyną dostępną aplikację, która może obsłużyć ten URI.
- Umożliwia użytkownikowi wybranie aplikacji z okna.
Aby utworzyć i przetestować linki do treści, wykonaj czynności opisane poniżej. Możesz też użyć Asystenta linków do aplikacji w Android Studio, aby dodać linki do aplikacji na Androida.
Uwaga: od Androida 12 (API na poziomie 31) ogólny zamiar internetowy jest rozpoznawany jako aktywność w aplikacji tylko wtedy, gdy aplikacja została zatwierdzona w przypadku konkretnej domeny zawartej w tym zamiarze internetowym. Jeśli aplikacja nie jest zatwierdzona w przypadku domeny, intencja internetowa zostanie przekierowana do domyślnej aplikacji 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, który zawiera te elementy i wartości atrybutów:
<action>
- Określ
ACTION_VIEW
działanie intencji, aby filtr intencji był dostępny z poziomu 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 atrybutandroid: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 aktywności, które akceptują podobne identyfikatory URI, ale różnią się tylko nazwą ścieżki. W takim przypadku użyj atrybutu
android:path
lub jego wariantówpathPattern
lubpathPrefix
, aby odróżnić, która aktywność powinna być otwierana przez system w przypadku różnych ścieżek URI. <category>
- Uwzględnij
BROWSABLE
kategorię. Jest to wymagane, aby filtr intencji był dostępny z przeglądarki internetowej. Bez niego kliknięcie linku w przeglądarce nie spowoduje otwarcia aplikacji.Uwzględnij też kategorię
DEFAULT
. Dzięki temu aplikacja może odpowiadać na intencje domyślne. Bez tego aktywność można uruchomić 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 precyzyjnego linkowania. Adresy 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 oba filtry intencji różnią się tylko elementem <data>
.
Chociaż w tym samym filtrze można umieścić wiele elementów <data>
, ważne jest, aby tworzyć osobne filtry, gdy chcesz zadeklarować unikalne adresy URL (np. konkretną kombinację elementów scheme
i host
), ponieważ wiele elementów <data>
w tym samym filtrze intencji jest w rzeczywistości łączonych w celu uwzględnienia wszystkich odmian 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 tylko https://www.example.com
i app://open.my.app
. W rzeczywistości obsługuje on te 2 znaki oraz te:app://www.example.com
i https://open.my.app
.
Ostrzeżenie: jeśli wiele aktywności zawiera filtry intencji, które prowadzą do tego samego zweryfikowanego linku do aplikacji na Androida, nie ma gwarancji, która aktywność obsłuży ten 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 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 Twojej 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ć. Wywołaj metody getData()
i getAction()
, aby pobrać dane i działanie powiązane z przychodzącym elementem Intent
. 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 elementu
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 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 w kolejnych interakcjach lub gdy użytkownik otworzy aplikację z launchera.
- 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 Activity Manager (am) możesz sprawdzić, czy identyfikatory URI filtrów intencji określone dla precyzyjnych linków prowadzą do właściwego działania 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 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
Deklaracja w manifeście i obsługa intencji skonfigurowane powyżej określają 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 program obsługi zestawu identyfikatorów URI, musisz też poprosić o zweryfikowanie tego połączenia. W następnej lekcji dowiesz się, jak wdrożyć tę weryfikację.
Więcej informacji o intencjach i linkach do aplikacji znajdziesz w tych materiałach:
- Intencje i filtry intencji
- Zezwalanie innym aplikacjom na rozpoczynanie Twojej aktywności
- Dodawanie linków aplikacji na Androida za pomocą Android Studio