när en klickad länk eller programmatisk begäran åberopar en webb-URI-avsikt försöker Android-systemet var och en av följande åtgärder i ordningsföljd tills begäran lyckas:
- öppna användarens föredragna app som kan hantera URI, om en är utsedd.
- öppna den enda tillgängliga appen som kan hantera URI.
- Tillåt användaren att välja en app från en dialogruta.
Följ stegen nedan för att skapa och testa länkar till ditt innehåll. Du kan också använda Applänkassistenten i Android Studio för att lägga till Android-applänkar.
Lägg till intent-filter för inkommande länkar
om du vill skapa en länk till appinnehållet lägger du till ett intent-filter som innehåller dessa element och attributvärden i ditt manifest:
<action>
ange åtgärdenACTION_VIEW
intent så att intent-filtret kan nås från Google-sökning.<data>
Lägg till en eller flera<data>
– taggar, som var och en representerar ett URI-format som löser aktiviteten. Minst måste<data>
– taggen innehålla attributetandroid:scheme
.
du kan lägga till fler attribut för att ytterligare förfina den typ av URI som aktiviteten accepterar. Du kan till exempel ha flera aktiviteter som accepterar liknande URI: er, men som skiljer sig helt enkelt baserat på sökvägsnamnet. Använd i så fall attributet android:path
eller varianterna pathPattern
eller pathPrefix
för att skilja vilken aktivitet systemet ska öppna för olika URI-sökvägar.
<category>
inkludera kategorinBROWSABLE
. Det krävs för att intent-filtret ska vara tillgängligt från en webbläsare. Utan det kan inte klicka på en länk i en webbläsare lösa till din app.
inkluderar även kategorin DEFAULT
.Detta gör att din app kan svara på implicita avsikter. Utan detta kan aktiviteten startasendast om avsikten anger ditt appkomponentnamn.
följande XML-utdrag visar hur du kan ange ett intent-filter i ditt manifest för djuplänkning. Uri: erna "example://gizmos"
och"http://www.example.com/gizmos"
löser båda denna 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>
Observera att de två avsiktsfiltren endast skiljer sig åt med elementet <data>
.Även om det är möjligt att inkludera flera <data>
– element i samma filter är det viktigt att du skapar separata filter när din avsikt är att deklarera uniqueURLs (till exempel en specifik kombination av scheme
och host
), eftersom flera <data>
– element i samma intent-filter faktiskt slås samman för att redogöra för alla variationer av deras kombinerade attribut. Tänk till exempel på följande:
<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /></intent-filter>
det kan tyckas som om detta bara stöder https://www.example.com
ochapp://open.my.app
. Men det stöder faktiskt de två, plus dessa:app://www.example.com
och https://open.my.app
.
när du har lagt till avsiktsfilter med URI: er för aktivitetsinnehåll i din appmanifest kan Android dirigera alla Intent
som har matchande URI: er till din app vid körning.
mer information om hur du definierar avsiktsfilter finns i Tillåt andra appar att starta din aktivitet.
Läs data från inkommande intentioner
när systemet startar din aktivitet genom ett intent-filter kan du använda data som tillhandahålls av Intent
för att bestämma vad du behöver göra. Ring metoderna getData()
ochgetAction()
för att hämta data ochåtgärd som är associerad med inkommande Intent
. Du kan ringa dessa metoder när som helst under aktivitetens livscykel, men du bör i allmänhet göra det under tidiga återuppringningar som onCreate()
elleronStart()
.
här är ett utdrag som visar hur du hämtar data från 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ölj dessa bästa metoder för att förbättra användarens upplevelse:
- den djupa länken ska ta användarna direkt till innehållet, utan några uppmaningar, interstitiella sidor eller inloggningar. Se till att användare kanse appinnehållet även om de aldrig tidigare öppnat programmet.Det är okej att uppmana användare på efterföljande interaktioner eller när de öppnar appenfrån startprogrammet.
- följ designguiden som beskrivs i navigering med bakåt och uppåt så att din app matchar användarnas förväntningar på bakåtnavigering efter att de har angett din app via en djup länk.
testa dina djupa länkar
du kan använda Android DebugBridge med activity manager (am) – verktyget för att testa att den avsiktsfilteruris du angav för djuplänkning löser till rätt appaktivitet. Du kan köra adb-kommandot mot en enhet eller en emulator.
den allmänna syntaxen för att testa en intent filter URI med adb är:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
kommandot nedan försöker till exempel visa en målappaktivitet somär associerad med den angivna URI.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
manifest-deklarationen och avsiktshanteraren som du anger ovan definierar anslutningen mellan din app och en webbplats och vad du ska göra med inkommande länkar. Men för att systemet ska behandla din app som standardhanterare för en uppsättning URI: er måste du också begära att systemet verifierar den här anslutningen. Nästa lektion förklarar hur man implementerar denna verifiering.