Když kliknete na odkaz nebo programový požadavek vyvolá web URI záměr, Android systém se snaží každý z následujících akcí, v pořadí, dokud neproběhne úspěšně:
- Otevřete uživatele preferované aplikace, která může zvládnout URI, pokud je určen.
- otevřete jedinou dostupnou aplikaci, která zvládne URI.
- umožňuje uživateli vybrat aplikaci z dialogu.
podle níže uvedených kroků vytvořte a otestujte odkazy na svůj obsah. Můžete také použít App Links Assistant v Android Studio přidat Android App odkazy.
Přidat intent filtry pro příchozí odkazy
vytvořit odkaz na váš obsah aplikace, přidat záměr filtr, který obsahuje tyto prvky a hodnoty atributů v souboru manifest:
<action>
nastavíACTION_VIEW
záměr akce tak, aby záměr filtr může být dosaženo z Vyhledávání Google.<data>
přidejte jednu nebo více značek<data>
, z nichž každá představuje formát URI, který řeší aktivitu. Značka<data>
musí minimálně obsahovat atributandroid:scheme
.
můžete přidat další atributy pro další upřesnění typu URI, který aktivita přijímá. Například můžete mít více aktivit, které přijímají podobné Uri, ale které se liší jednoduše na základě názvu cesty. V tomto případě použijte atribut android:path
nebo jeho varianty pathPattern
nebo pathPrefix
k rozlišení aktivity, kterou by měl systém otevřít pro různé cesty URI.
<category>
zahrňte kategoriiBROWSABLE
. Je nutné, aby byl filtr záměru přístupný z webbrowseru. Bez něj nelze kliknutím na odkaz v prohlížeči vyřešit vaši aplikaci.
zahrnuje také kategorii DEFAULT
.To umožňuje vaší aplikaci reagovat na implicitní záměry. Bez toho může být aktivita spuštěnapouze pokud záměr určuje název komponenty aplikace.
následující úryvek XML ukazuje, jak můžete určit filtr záměru ve vašem manifestu pro hluboké propojení. Uri "example://gizmos"
a"http://www.example.com/gizmos"
se rozhodnou pro tuto aktivitu.
<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>
Všimněte si, že dva filtry záměru se liší pouze prvkem <data>
.I když je možné zahrnout více <data>
prvky ve stejném filtru,je důležité, aby si vytvořit samostatné filtry, když je váš záměr je, aby prohlásil uniqueURLs (jako zvláštní kombinace scheme
a host
), becausemultiple <data>
prvky ve stejném záměru filtru jsou vlastně spojil togetherto účet pro všechny varianty jejich společné atributy. Zvažte například následující:
<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /></intent-filter>
mohlo by se zdát, že to podporuje pouze https://www.example.com
aapp://open.my.app
. Ve skutečnosti však podporuje tyto dva, plus tyto:app://www.example.com
a https://open.my.app
.
jakmile do appmanifestu přidáte filtry záměru s URI pro obsah aktivity, Android je schopen směrovat jakýkoli Intent
, který má odpovídající URI do vaší aplikace za běhu.
Chcete-li se dozvědět více o definování filtrů záměru, viz povolit dalším aplikacím zahájit vaši aktivitu.
čtení dat z příchozích záměrů
jakmile systém spustí vaši aktivitu pomocí filtru záměrů, můžete pomocí dat poskytnutých Intent
určit, co potřebujete k vykreslení. Zavolejte metody getData()
agetAction()
a načtěte data a akce spojené s příchozím Intent
. Tyto metody můžete volat kdykoli během životního cyklu aktivity, ale obvykle byste tak měli učinit během časných zpětných volání, jako je onCreate()
neboonStart()
.
Tady je úryvek, který ukazuje, jak načíst data zIntent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data}
Java
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();}
Postupujte podle těchto osvědčených postupů pro zlepšení uživatelské zkušenosti:
- hluboký odkaz by měla mít uživatelé přímo k obsahu,a to bez jakékoliv výzvy, vsunuté stránky, nebo přihlášení. Ujistěte se, že uživatelé mohouvidět obsah aplikace, i když aplikaci nikdy předtím neotevřeli.Je v pořádku vyzvat uživatele k následným interakcím nebo při otevření Appz spouštěče.
- Postupujte podle design pokyny popsané v Navigaci Zpět a tak, že vaše aplikace odpovídá očekávání uživatelů pro zpětné navigace po zadání vaší aplikace prostřednictvím přímého odkazu.
Otestujte si své hluboké vazby
můžete použít Android DebugBridge s činností manager (am) nástroj k testování, že záměr filterURIs jste zadali pro hluboké propojení vyřešit správnou činnost aplikace. Youmůže spustit příkaz adb proti zařízení nebo emulátoru.
obecná syntaxe pro testování záměr filtr URI s adb je:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
například, níže uvedený příkaz se pokusí zobrazit cíl app činnosti, který je spojen s zadaný identifikátor URI.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
popisovač manifestu a záměru, který jste nastavili výše, definuje spojení mezi aplikací a webem a co dělat s příchozími odkazy. Aby však systém považoval vaši aplikaci za výchozí obslužnou rutinu pro sadu Uri, musíte také požádat, aby systém toto připojení ověřil. Další lekce vysvětluje, jak implementovat toto ověření.