Na Androidzie precyzyjny link to link, który prowadzi bezpośrednio do miejsce docelowe w aplikacji.
Komponent Nawigacja umożliwia tworzenie 2 różnych typów precyzyjnych linków: jawne i domyślnie.
Tworzenie wyraźnego precyzyjnego linku
Precyzyjny link to pojedyncze wystąpienie
precyzyjnego linku z końcówką PendingIntent
kierować użytkowników do określonego miejsca w aplikacji. Możesz zobaczyć
w formie konkretnego precyzyjnego linku w powiadomieniu lub w widżecie aplikacji,
na przykład.
Gdy użytkownik otworzy aplikację za pomocą wyraźnego precyzyjnego linku, zwrotny stos zadań
został usunięty i zastąpiony miejscem docelowym precyzyjnego linku. Kiedy
zagnieżdżania wykresów,
miejsce docelowe początkowe z każdego poziomu zagnieżdżenia, czyli miejsca początkowego,
z każdego elementu <navigation>
w hierarchii, jest również dodawany do stosu.
Oznacza to, że gdy użytkownik naciśnie przycisk Wstecz w precyzyjnym linku
miejsca docelowe, przechodzą z powrotem w górę stosu nawigacji tak, jakby
od miejsca wejścia do aplikacji.
NavDeepLinkBuilder
do utworzenia PendingIntent
,
jak widać w przykładzie poniżej. Pamiętaj, że jeśli podany kontekst nie jest
Activity
, konstruktor używa
PackageManager.getLaunchIntentForPackage()
.
jako domyślne działanie do uruchomienia, jeśli jest dostępne.
Kotlin
val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .createPendingIntent()
Java
PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .createPendingIntent();
Domyślnie NavDeepLinkBuilder
uruchamia Twój bezpośredni precyzyjny link w witrynie
domyślne uruchomienie (Activity
) zadeklarowane w pliku manifestu aplikacji. Jeśli
NavHost
jest częścią innej aktywności, musisz określić jej komponent
w kreatorze precyzyjnych linków:
Kotlin
val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(DestinationActivity::class.java) .createPendingIntent()
Java
PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(DestinationActivity.class) .createPendingIntent();
Jeśli masz ComponentName
,
możesz przekazać ją bezpośrednio do konstruktora:
Kotlin
val componentName = ... val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(componentName) .createPendingIntent()
Java
ComponentName componentName = ...; PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(componentName) .createPendingIntent();
Jeśli masz już konto NavController
,
możesz też utworzyć precyzyjny link, używając
NavController.createDeepLink()
Tworzenie niejawnego precyzyjnego linku
Precyzyjny link oznacza konkretne miejsce docelowe w aplikacji. Po wywołaniu precyzyjnego linku, np. gdy użytkownik kliknie link – Android może otworzyć Twoją aplikację na odpowiedniej miejsce docelowe.
Precyzyjne linki można dopasowywać według identyfikatora URI, działań intencji i typów MIME. Dostępne opcje określić wiele typów dopasowania dla jednego precyzyjnego linku. Pamiętaj jednak, że identyfikator URI dopasowywanie argumentów jest w pierwszej kolejności, po nich następuje działanie, a na końcu MIME typu.
Oto przykładowy precyzyjny link zawierający identyfikator URI, działanie i typ MIME:
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
tools:layout="@layout/a">
<deepLink app:uri="www.example.com"
app:action="android.intent.action.MY_ACTION"
app:mimeType="type/subtype"/>
</fragment>
Za pomocą Edytora nawigacji możesz utworzyć niejawny precyzyjny link do miejsce docelowe w następujący sposób:
- Na karcie Design (Projekt) w edytorze nawigacji wybierz miejsce docelowe dla precyzyjny link.
- Kliknij + w sekcji Precyzyjne linki w panelu Atrybuty.
W wyświetlonym oknie Dodaj precyzyjny link wpisz informacje o precyzyjny link.
Uwaga:
- Identyfikatory URI bez schematu są przyjmowane jako http lub https. Przykład:
www.google.com
pasuje zarówno dohttp://www.google.com
, jak i dohttps://www.google.com
- Zmienne parametrów ścieżki w formacie
{placeholder_name}
pasują do co najmniej jednego znaków. np.http://www.example.com/users/{id}
wskazuje dopasowanie dohttp://www.example.com/users/4
Komponent Nawigacja próbuje przeanalizuje wartości zmiennych do odpowiednich typów, dopasowując obiekt zastępczy nazwy zdefiniowanych argumentów zdefiniowanych dla miejsca docelowego precyzyjnego linku. Jeśli nie ma argumentu z ta sama nazwa jest zdefiniowana, dla argumentu używany jest domyślny typString
. Za pomocą symbolu .* możesz dopasować 0 lub więcej znaków. - Obiekty zastępcze parametrów zapytania można stosować zamiast nich lub w połączeniu z
parametrów ścieżki. Przykład:
Dopasowania:
http://www.example.com/users/{id}?myarg={myarg}
http://www.example.com/users/4?myarg=28
- Zmienne parametrów zapytania dla zmiennych zdefiniowanych jako domyślne lub
Wartości dopuszczone do wartości null nie muszą być zgodne. Przykład:
Dopasowania:
http://www.example.com/users/{id}?arg1={arg1}&arg2={arg2}
http://www.example.com/users/4?arg2=28
lubhttp://www.example.com/users/4?arg1=7
Nie dotyczy to ścieżki . Na przykład:http://www.example.com/users?arg1=7&arg2=28
nie pasuje do powyższego wzorca, ponieważ wymagany parametr ścieżki to nie podano. - Zbędne parametry zapytania nie mają wpływu na dopasowywanie identyfikatora URI precyzyjnego linku. Dla:
przykład,
http://www.example.com/users/{id}
wskazuje dopasowanie dohttp://www.example.com/users/4?extraneousParam=7
, mimo że ElementextraneousParam
nie jest zdefiniowany we wzorcu identyfikatora URI.
- Identyfikatory URI bez schematu są przyjmowane jako http lub https. Przykład:
(Opcjonalnie) Zaznacz Automatyczna weryfikacja, aby wymagać od Google weryfikacji Twojej tożsamości właściciela identyfikatora URI. Więcej informacji: Weryfikowanie linków aplikacji na Androida
Kliknij Dodaj. Ikona linku nad wybranym miejscem docelowym, aby wskazać, że precyzyjny link.
Kliknij kartę Kod, aby przełączyć się na widok XML. Zagnieżdżony typ
<deepLink>
do miejsca docelowego dodano element:<deepLink app:uri="https://www.google.com" />
Aby włączyć niejawne precyzyjne linki, musisz dodać też do funkcji
manifest.xml
. Dodaj pojedynczy element <nav-graph>
do aktywności, która
wskazuje istniejący wykres nawigacyjny, jak w tym przykładzie:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <application ... > <activity name=".MainActivity" ...> ... <nav-graph android:value="@navigation/nav_graph" /> ... </activity> </application> </manifest>
Podczas tworzenia projektu komponent Nawigacja zastępuje komponent <nav-graph>
element z wygenerowanymi elementami <intent-filter>
, które pasują do wszystkich precyzyjnych linków
na wykresie nawigacyjnym.
Gdy aktywujesz niejawny precyzyjny link, stan stosu wstecznego zależy od tego,
czy niejawna Intent
została uruchomiona z
Intent.FLAG_ACTIVITY_NEW_TASK
.
flaga:
- Jeśli flaga jest ustawiona, wsteczny stos zadań jest wyczyszczony i zastępowany
miejsce docelowe precyzyjnego linku. Podobnie jak w przypadku precyzyjnych linków, gdy
zagnieżdżanie wykresów,
miejsce docelowe początkowe z każdego poziomu zagnieżdżenia, czyli punktu początkowego
miejsce docelowe z każdego elementu
<navigation>
w hierarchii – jest również dodawane do stosunkowo dobrze. Oznacza to, że gdy użytkownik naciśnie przycisk Wstecz na głębokim na stronie docelowej linku, przechodzą z powrotem w górę stosu nawigacji, tak jak chociażby do aplikacji. - Jeśli flaga nie jest ustawiona, pozostajesz przy stosie zadań poprzedniej aplikacji. w którym został aktywowany niejawny precyzyjny link. W tym przypadku przycisk Wstecz Powrót do poprzedniej aplikacji, a przycisk w górę rozpoczyna działanie aplikacji w hierarchicznym miejscu docelowym na wykresie nawigacyjnym.
Obsługa precyzyjnych linków
Zdecydowanie zalecamy używanie wartości domyślnej
launchMode
z standard
podczas korzystania z Nawigacji. W przypadku korzystania z trybu uruchamiania aplikacji standard
Nawigacja
automatycznie obsługuje precyzyjne linki, wywołując
handleDeepLink()
.
do przetwarzania wszelkich jawnych lub pośrednich precyzyjnych linków w Intent
. Pamiętaj jednak:
nie dzieje się to automatycznie, jeśli Activity
jest używany ponownie podczas korzystania
alternatywny element launchMode
, np. singleTop
. W tym przypadku konieczne jest
ręcznie wywołać handleDeepLink()
w onNewIntent()
, jak pokazano w
następujący przykład:
Kotlin
override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) navController.handleDeepLink(intent) }
Java
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); navController.handleDeepLink(intent); }
Dodatkowe materiały
Więcej informacji o nawigacji znajdziesz w tych materiałach.