Tworzenie precyzyjnych linków do zawartości aplikacji

Gdy kliknięty link lub żądanie zautomatyzowane wywołuje intencję identyfikatora URI internetowego, system Android próbuje w kolejności wykonać każde z tych działań, aż żądanie się powiedzie:

  1. Otwórz preferowaną aplikację użytkownika, która może obsługiwać identyfikator URI, jeśli został on określony.
  2. Otwórz jedyną dostępną aplikację, która może obsługiwać identyfikator 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ż dodać linki do aplikacji na Androida za pomocą Asystenta linków aplikacji w Android Studio.

Uwaga: od Androida 12 (poziom interfejsu API 31) ogólna intencja internetowa odpowiada za działanie w aplikacji tylko wtedy, gdy zostanie ona zatwierdzona dla określonej domeny zawartej w tej intencji. Jeśli aplikacja nie jest zatwierdzona dla domeny, intencja internetowa jest przekierowywana 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 filtr intencji zawierający w pliku manifestu te elementy i wartości atrybutów:

<action>
Określ działanie intencji ACTION_VIEW, aby umożliwić dostęp do filtra intencji z wyszukiwarki Google.
<data>
Dodaj co najmniej 1 tag <data>, z których każdy reprezentuje format URI wskazujący aktywność. Co najmniej tag <data> musi zawierać atrybut android:scheme.

Możesz dodać więcej atrybutów, aby jeszcze bardziej sprecyzować typ identyfikatora URI akceptowany przez aktywność. Możesz na przykład mieć wiele działań, które akceptują podobne identyfikatory URI, ale różnią się tylko nazwą ścieżki. W takim przypadku użyj atrybutu android:path albo jego wersji pathPattern lub pathPrefix, aby odróżnić aktywność, którą system powinien otworzyć dla różnych ścieżek URI.

<category>
Uwzględnij kategorię BROWSABLE. Jest on wymagany, aby filtr intencji był dostępny w przeglądarce. 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.

Ten fragment kodu XML pokazuje, jak określić w pliku manifestu filtr intencji na potrzeby 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żna uwzględnić wiele elementów <data>, musisz utworzyć osobne filtry, gdy chcesz zadeklarować unikalne adresy URL (np. konkretną kombinację elementów scheme i host), ponieważ kilka elementów <data> w tym samym filtrze intencji zostaje scalonych ze sobą, aby uwzględnić wszystkie odmiany 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 Ci się wydawać, że obsługuje ona tylko atrybuty https://www.example.com i app://open.my.app. 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, które kierują do tego samego zweryfikowanego linku aplikacji na Androida, nie ma gwarancji, która aktywność obsługuje ten link.

Gdy dodasz do pliku manifestu w aplikacji filtry intencji z identyfikatorami URI treści o aktywności, Android będzie w stanie kierować do Twojej aplikacji dowolne Intent, które mają pasujące identyfikatory URI, do Twojej aplikacji w czasie działania.

Więcej informacji o definiowaniu filtrów intencji znajdziesz w artykule Zezwalanie innym aplikacjom na rozpoczynanie Twojej aktywności.

Odczytywanie danych z przychodzących intencji

Gdy system rozpocznie aktywność za pomocą filtra intencji, możesz wykorzystać dane dostarczone przez funkcję Intent, aby określić, co jest potrzebne do renderowania. Aby pobrać dane i działanie powiązane z przychodzącym zdarzeniem Intent, wywołaj metody getData()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();
}

Postępuj zgodnie z tymi sprawdzonymi metodami, aby zwiększyć komfort użytkowników:

  • Precyzyjny link powinien prowadzić użytkowników bezpośrednio do treści bez żadnych próśb, stron pełnoekranowych ani logowania. Zadbaj o to, aby użytkownicy mogli zobaczyć zawartość aplikacji, nawet jeśli nigdy wcześniej jej nie otwierali. Można pytać użytkowników przy kolejnych interakcjach lub po uruchomieniu aplikacji z Menu z aplikacjami.
  • Postępuj zgodnie ze wskazówkami dotyczącymi projektowania opisanymi w artykule Nawigacja z kopią zapasową i kopią zapasową, aby Twoja aplikacja spełniała oczekiwania użytkowników w zakresie nawigacji wstecznej po przejściu do aplikacji za pomocą precyzyjnego linku.

Testowanie precyzyjnych linków

Za pomocą narzędzia Android DebugBridgemożesz użyć narzędzia Menedżer aktywności (am), aby sprawdzić, czy identyfikatory URI filtra intencji określone 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ązana 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 określają, co należy zrobić z linkami przychodzącymi. Jeśli jednak chcesz, aby system traktował Twoją aplikację jako domyślny moduł obsługi zestawu identyfikatorów URI, musisz również poprosić system o zweryfikowanie tego połączenia. W następnym samouczku znajdziesz informacje o tym, jak przeprowadzić tę weryfikację.

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