Gdy kliknięty link lub żądanie programowe wywołuje zamiar URI w internecie, system Android próbuje wykonać w kolejności podane niżej czynności, aż do momentu powodzenia żądania:
- Otwórz preferowaną aplikację użytkownika, która może obsługiwać identyfikator URI, jeśli został on określony.
- Otwórz jedyną dostępną aplikację, która może obsłużyć adres URI.
- Zezwalanie użytkownikowi na wybranie aplikacji w oknie dialogowym.
Aby utworzyć i przetestować linki do swoich treści, wykonaj podane niżej czynnoś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ólny zamiar internetowy jest przekształcany w działanie w aplikacji tylko wtedy, gdy aplikacja została zatwierdzona do działania w konkretnej domenie zawartej w tym zamiarze internetowym. Jeśli aplikacja nie jest zatwierdzona w przypadku tej domeny, zamiar internetowy jest przekierowywany 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 zawierający te elementy i wartości atrybutów:
<action>
- Określ działanie intencji
ACTION_VIEW
, aby można było uzyskać dostęp do filtra intencji z poziomu wyszukiwarki Google. <data>
- Dodaj co najmniej 1 tag
<data>
, z których każdy reprezentuje format URI, który odwołuje się do aktywności. Tag<data>
musi zawierać co najmniej atrybutandroid:scheme
.Aby zawęzić typ URI akceptowany przez aktywność, możesz dodać więcej atrybutów. 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 atrybutu
android:path
lub jego wariantówpathPattern
lubpathPrefix
, aby określić, którą aktywność ma otworzyć system w przypadku 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
. Pozwoli to aplikacji na reagowanie na niejawne intencje. 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 manifeście na potrzeby precyzyjnych linków. Adresy URI “example://gizmos”
i “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 scheme
i host
), musisz utworzyć osobne filtry, ponieważ elementy <data>
w tym samym filtrze intencji są scalane, aby uwzględnić wszystkie warianty ich połączonych atrybutów. Rozważ 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 ona tylko https://www.example.com
i app://open.my.app
. W praktyce obsługuje on te 2 formaty oraz 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 do aplikacji na Androida, nie ma gwarancji, która aktywność obsługuje ten link.
Gdy dodasz do pliku manifestu aplikacji filtry intencji z identyfikatorami URI treści działania, Android będzie mógł przekierowywać do aplikacji wszystkie Intent
z pasującymi identyfikatorami URI 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 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 renderować. Aby pobrać dane i działanie powiązane z przychodzącym zdarzeniem Intent
, wywołaj metody getData()
i getAction()
. Te metody możesz wywoływać w dowolnym momencie cyklu życia aktywności, ale zazwyczaj powinieneś to robić podczas wczesnych wywołań zwrotnych, takich jak onCreate()
lub onStart()
.
Oto fragment kodu, który pokazuje, jak pobierać dane z poziomu 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 wyświetlać użytkownikom prośby o dodatkowe interakcje lub gdy otwierają aplikację z menu Start.
- Postępuj zgodnie ze wskazówkami dotyczącymi projektowania omówionymi 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
Możesz użyć mostu debugowania Androida z narzędziem menedżera aktywności (am), aby sprawdzić, czy adresy URI filtra intencji określone przez Ciebie w przypadku precyzyjnych linków odwołują się do właściwej aktywności w aplikacji. Polecenie adb możesz uruchomić na urządzeniu lub w emulatorze.
Ogólna składnia testowania URI filtra zamiaru za pomocą adb:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
Na przykład polecenie poniżej próbuje wyświetlić aktywność docelowej aplikacji powiązaną z wybranym 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 określają, co należy zrobić z linkami przychodzącymi. Aby jednak system traktował Twoją aplikację jako domyślny moduł obsługi dla zestawu identyfikatorów URI, musisz też poprosić o sprawdzenie tego połączenia. W następnym samouczku znajdziesz informacje o tym, jak przeprowadzić tę weryfikację.
Więcej informacji o intencjach i linkach do aplikacji znajdziesz w tych materiałach:
- Intencje i filtry intencji
- Zezwalanie innym aplikacjom na uruchamianie Twojej aktywności
- Dodawanie linków aplikacji na Androida za pomocą Android Studio