når et klikket link eller en programmatisk anmodning påberåber sig en URI-hensigt, prøver Android-systemet hver af følgende handlinger i rækkefølge, indtil anmodningen lykkes:
- Åbn brugerens foretrukne app, der kan håndtere URI, hvis en er udpeget.
- Åbn den eneste tilgængelige app, der kan håndtere URI.
- Tillad brugeren at vælge en app fra en dialog.
Følg nedenstående trin for at oprette og teste links til dit indhold. Du kan også bruge app Links Assistant i Android Studio til at tilføje Android App Links.
Tilføj intent-filtre til indgående links
hvis du vil oprette et link til dit appindhold, skal du tilføje et intent-filter, der indeholder disse elementer og attributværdier i dit manifest:
<action>
Angiv handlingenACTION_VIEW
intent, så intent-filteret kan nås fra Google-søgning.<data>
Tilføj et eller flere<data>
tags, som hver repræsenterer et Uri-format, der løser aktiviteten. Tagget<data>
skal som minimum indeholde attributtenandroid:scheme
.
du kan tilføje flere attributter for yderligere at forfine den type URI, som aktiviteten accepterer. For eksempel kan du have flere aktiviteter, der accepterer lignende Uri ‘ er, men som adskiller sig simpelthen baseret på stiens navn. I dette tilfælde skal du bruge attributten android:path
eller dens pathPattern
eller pathPrefix
varianter til at differentiere, hvilken aktivitet systemet skal åbne for forskellige URI-stier.
<category>
Inkluder kategorienBROWSABLE
. Det er nødvendigt for at intent-filteret skal være tilgængeligt fra en internetudbyder. Uden det, kan klikke på et link i en bro.ser ikke løse til din app.
inkluderer også kategorien DEFAULT
.Dette gør det muligt for din app at reagere på implicitte hensigter. Uden dette kan aktiviteten starteskun hvis hensigten angiver dit appkomponentnavn.
følgende uddrag viser, hvordan du kan angive et intentionsfilter i dit manifest for dyb linkning. Uri ‘ erne "example://gizmos"
og"http://www.example.com/gizmos"
løser begge denne aktivitet.
<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>
Bemærk, at de to hensigtsfiltre kun adskiller sig med <data>
elementet.Selv om det er muligt at inkludere flere <data>
elementer i det samme filter,er det vigtigt, at du opretter separate filtre, når din hensigt er at erklære unikkeurls (f.eks. en specifik kombination af scheme
og host
), fordi flere <data>
elementer i det samme intentionsfilter faktisk flettes sammen for at tage højde for alle variationer af deres kombinerede attributter. Overvej for eksempel følgende:
<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /></intent-filter>
det kan virke som om dette kun understøtter https://www.example.com
ogapp://open.my.app
. Det understøtter dog faktisk disse to plus disse:app://www.example.com
og https://open.my.app
.
når du har tilføjet intent-filtre med URI ‘er til aktivitetsindhold til din appmanifest, kan Android dirigere alle Intent
, der har matchende Uri’ er til din app ved kørsel.
hvis du vil vide mere om at definere hensigtsfiltre, skal du se Tillad andre Apps at starte din aktivitet.
Læs data fra indgående hensigter
når systemet starter din aktivitet gennem et intentionsfilter, kan du bruge data leveret af Intent
til at bestemme, hvad du skal gengive. Ring til getData()
oggetAction()
metoder til at hente dataene oghandling forbundet med den indkommende Intent
. Du kan til enhver tid annullere disse metoder i løbet af aktivitetens livscyklus, men du skal generelt gøre det under tidlige tilbagekald som onCreate()
elleronStart()
.
her er et uddrag, der viser, hvordan man henter data fra enIntent
:
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();}
Følg disse bedste fremgangsmåder for at forbedre brugerens oplevelse:
- det dybe link skal føre brugerne direkte til indholdet uden nogen prompter,interstitielle sider eller logins. Sørg for, at brugerne kanse appindholdet, selvom de aldrig tidligere har åbnet applikationen.Det er okay at bede brugerne om efterfølgende interaktioner, eller når de åbner appen fra launcheren.
- Følg designvejledningen beskrevet i Navigation med Back and Up, så din app matcher brugernes forventninger til baglæns navigation, når de indtaster din app via et dybt link.
Test dine dybe links
du kan bruge Android DebugBridge med activity manager (am) – værktøjet til at teste, at den intent filterURIs, du har angivet for deep linking, løser den korrekte appaktivitet. Dukan køre ADB-kommandoen mod en enhed eller en emulator.
den generelle syntaks til test af et intent filter URI med adb er:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
for eksempel forsøger kommandoen nedenfor at se en målappaktivitet derer forbundet med den angivne URI.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
den manifest erklæring og hensigt handleren du angiver ovenfor definere forbindelsen mellem din app og en hjemmeside, og hvad de skal gøre med indgående links. For at få systemet til at behandle din app som standardhåndterer for et sæt Uri ‘ er, skal du dog også anmode om, at systemet bekræfter denne forbindelse. Den næste lektion forklarer, hvordan man implementerer denne verifikation.