wanneer een geklikt link of programmatisch verzoek een web URI intent oproept, probeert het Android-systeem elk van de volgende acties, in volgorde, totdat het verzoek slaagt:
- Open de gewenste app van de gebruiker die de URI kan verwerken, als een is aangewezen.
- Open de enige beschikbare app die de URI kan verwerken.
- laat de gebruiker een app selecteren in een dialoogvenster.
Volg de onderstaande stappen om links naar uw inhoud te maken en te testen. U kunt ook gebruik maken van de app Links assistent in Android Studio om Android App Links toe te voegen.
intentiefilters toevoegen voor inkomende koppelingen
om een koppeling naar uw app-inhoud te maken, voegt u een intentiefilter toe dat deze elementen en attribuutwaarden in uw manifest bevat:
<action>
specificeer de intentieactieACTION_VIEW
zodat het intentiefilter vanuit Google Search kan worden bereikt.<data>
voeg een of meer<data>
tags toe, die elk een URI-indeling vertegenwoordigen die aan de activiteit wordt opgelost. De tag<data>
moet ten minste het attribuutandroid:scheme
bevatten.
u kunt meer attributen toevoegen om het type URI dat de activiteit accepteert verder te verfijnen. U kunt bijvoorbeeld meerdere activiteiten hebben die soortgelijke URI ‘ s accepteren, maar die gewoon verschillen op basis van de padnaam. Gebruik in dit geval het kenmerk android:path
of de varianten pathPattern
of pathPrefix
om te onderscheiden welke activiteit het systeem moet openen voor verschillende URI-paden.
<category>
omvat de categorieBROWSABLE
. Het is nodig om het intent filter toegankelijk te maken vanaf een webbrowser. Zonder Dit, klikken op een link in een browser kan niet oplossen naar uw app.
omvat ook de categorie DEFAULT
.Hierdoor kan uw app reageren op impliciete bedoelingen. Zonder dit, de activiteit kan worden gestart alleen als de bedoeling specificeert uw app component Naam.
het volgende XML-fragment laat zien hoe u een intentfilter kunt opgeven in uw manifest voor deep linking. De URI ‘ s "example://gizmos"
en"http://www.example.com/gizmos"
gaan beide over op deze activiteit.
<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>
merk op dat de twee intentiefilters alleen verschillen met het <data>
– element.Hoewel het mogelijk is om meerdere <data>
elementen in hetzelfde filter op te nemen,is het belangrijk dat u aparte filters maakt wanneer het uw bedoeling is om uniqueURLs te declareren (zoals een specifieke combinatie van scheme
en host
), omdat meerdere <data>
elementen in hetzelfde intentiefilter daadwerkelijk samengevoegd worden om rekening te houden met alle variaties van hun gecombineerde attributen. Denk bijvoorbeeld aan het volgende::
<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /></intent-filter>
het lijkt erop dat dit alleen https://www.example.com
enapp://open.my.app
ondersteunt. Echter, het ondersteunt deze twee, plus deze:app://www.example.com
en https://open.my.app
.
zodra u intentfilters met URI ’s voor activiteitsinhoud hebt toegevoegd aan uw appmanifest, kan Android elke Intent
die bijpassende URI’ s heeft tijdens runtime naar uw app routeren.Zie andere Apps toestaan om uw activiteit te starten voor meer informatie over het definiëren van intentiefilters.
gegevens lezen van inkomende intents
zodra het systeem uw activiteit start via een intentiefilter, kunt u de gegevens van Intent
gebruiken om te bepalen wat u moet renderen. Call the getData()
andgetAction()
methods to recry the data andaction associated with the incoming Intent
. U annuleert al deze methoden op elk moment tijdens de levenscyclus van de activiteit, maar in het algemeen dient u dit te doen tijdens vroege callbacks, zoals onCreate()
ofonStart()
.
hier is een fragment dat laat zien hoe gegevens uit eenIntent
:
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();}
volg deze best practices om de gebruikerservaring te verbeteren:
- de deep link moet gebruikers rechtstreeks naar de inhoud,zonder enige prompts, interstitiële pagina ‘ s, of logins. Zorg ervoor dat gebruikers de inhoud van de app kunnen zien, zelfs als ze de applicatie nooit eerder hebben geopend.Het is OK om gebruikers te vragen op de volgende interacties of wanneer ze de app openen van de Launcher.
- Volg de ontwerprichtlijnen beschreven in Navigatie met Back-up, zodat uw app overeenkomt met de verwachtingen van gebruikers voor achterwaartse navigatie nadat ze uw app via een diepe link hebben ingevoerd.
Test uw deep links
u kunt de Android DebugBridge gebruiken met de activity manager (am) tool om te testen of de intentie filterURIs die u hebt opgegeven voor deep linking resolve naar de juiste app-activiteit. Je kunt het ADB commando uitvoeren tegen een apparaat of een emulator.
de algemene syntaxis voor het testen van een intent filter URI met adb is:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
het commando hieronder probeert bijvoorbeeld een doel – app-activiteit te bekijken die is gekoppeld aan de opgegeven URI.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
de manifest declaration and intent handler die u hierboven hebt ingesteld, definieert de verbinding tussen uw app en een website en wat u moet doen met inkomende links. Als u echter wilt dat het systeem uw app behandelt als de standaardafhandeling voor een set URI ‘ s, moet u ook vragen dat het systeem deze verbinding verifieert. In de volgende les wordt uitgelegd hoe deze verificatie moet worden uitgevoerd.