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:
- Otwórz preferowaną aplikację użytkownika, która może obsługiwać identyfikator URI (jeśli został on wyznaczony).
- Otwórz jedyną dostępną aplikację, która może obsługiwać identyfikator URI.
- 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 intencja internetowa przechodzi do aktywności w aplikacji tylko wtedy, gdy jest ona zatwierdzona konkretną domenę zawartą w danej intencji internetowej. Jeśli Twoja aplikacja nie została zatwierdzona w domenie, intencja internetowa przekierowuje do domyślnej przeglądarki użytkownika .
Dodawanie filtrów intencji dla linków przychodzących
Aby utworzyć link do treści aplikacji, dodaj filtr intencji, który: zawiera te elementy i wartości atrybutów w pliku manifestu:
<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ść. Dla: na przykład możesz mieć wiele działań, które akceptują podobne identyfikatory URI, ale różnią się na podstawie nazwy ścieżki. W takim przypadku użyj parametru Atrybut
android:path
lub jej wariantachpathPattern
lubpathPrefix
, aby odróżnić system powinien otworzyć się dla różnych ścieżek URI. <category>
- Uwzględnij
BROWSABLE
. Jest wymagany, aby filtr intencji był dostępny w internecie przeglądarki. Bez tego kliknięcie linku w przeglądarce nie będzie mogło otworzyć Twojej aplikacji.Uwzględnij też kategorię
DEFAULT
. Dzięki temu aplikacja może reagować na intencje niejawne. Bez tego można rozpocząć aktywność 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. Identyfikatory URI “example://gizmos”
i
“http://www.example.com/gizmos”
dotyczą 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>
.
W jednym filtrze można uwzględnić wiele elementów <data>
,
ważne jest, aby utworzyć osobne filtry, jeśli chcesz zadeklarować niepowtarzalne
adresów URL (np. konkretna kombinacja scheme
i host
), ponieważ
wiele elementów <data>
w tym samym filtrze intencji jest w rzeczywistości scalonych
uwzględniające wszystkie odmiany 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 ona tylko wartości https://www.example.com
i
app://open.my.app
Program obsługuje jednak te 2 dodatkowe funkcje:
app://www.example.com
i https://open.my.app
.
Uwaga: jeśli wiele aktywności zawiera filtry intencji kierowane na to samo zweryfikowanego linku aplikacji na Androida, nie ma gwarancji, która aktywność obsługuje 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: Zezwalanie innym aplikacjom na rozpoczynanie Twojej aktywności
Odczytywanie danych z intencji przychodzących
Gdy system rozpocznie aktywność za pomocą filtra intencji,
użyj danych dostarczanych przez Intent
, by określić, co musisz wyrenderować. Zadzwoń do nas
getData()
i
getAction()
metod pobierania danych oraz
działanie powiązane z przychodzącym Intent
. 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(); }
Postępuj zgodnie z tymi sprawdzonymi metodami, aby zwiększyć komfort użytkowników:
- Precyzyjny link powinien przekierowywać użytkowników bezpośrednio do treści, bez żadnych promptów, stron pełnoekranowych ani logowania. Upewnij się, że użytkownicy mogą nie mogą zobaczyć zawartości 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 Nawigacja z włączonym kopią zapasową i w górę aby Twoja aplikacja odpowiadała czego oczekujemy od nawigacji wstecz do Twojej aplikacji za pomocą precyzyjnego linku.
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. Ty możesz uruchomić polecenie adb na urządzeniu lub w emulatorze.
Ogólna składnia 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
Deklaracja w pliku manifestu i moduł obsługi intencji ustawione powyżej określają połączenie między Twoją aplikacją i stronę internetową i co zrobić 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 aplikacji znajdziesz w tych materiałach:
- Filtry intencji i zamiarów
- Zezwalanie innym aplikacjom na rozpoczynanie Twojej aktywności
- Dodawanie linków aplikacji na Androida za pomocą Android Studio