Recherche…


Introduction

Les liens profonds sont des URL qui permettent aux utilisateurs d'accéder directement à un contenu spécifique de votre application. Vous pouvez configurer des liens profonds en ajoutant des filtres d'intention et en extrayant des données des intentions entrantes afin de diriger les utilisateurs vers le bon écran de votre application.

Paramètres

<data> Attribut Détails
schème La partie schéma d'un URI (sensible à la casse). Exemples: http , https , ftp
hôte La partie hôte d'un URI (sensible à la casse). Exemples: google.com , example.org
Port La partie port d'un URI. Exemples: 80 , 443
chemin La partie chemin d'un URI. Doit commencer par / . Exemples: / , /about
pathPrefix Un préfixe pour la partie chemin d'un URI. Exemples: /item , /article
pathPattern Un modèle à faire correspondre à la partie chemin d'un URI. Exemples: /item/.* , /article/[0-9]*
mimeType Un type de mime correspondant. Exemples: image/jpeg , audio/*

Remarques

Le <intent-filter>

Cette combinaison d'éléments <action> et <category> est ce qui indique au système Android qu'une activité spécifique doit être lancée lorsque l'utilisateur clique sur un lien dans une autre application.

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data ... />

</intent-filter>

Plusieurs balises <data>

L'ensemble des liens profonds pris en charge par votre <intent-filter> est le produit croisé de tous les éléments <data> que vous définissez dans ce filtre d'intention. Les exemples de domaines multiples, de chemins multiples et de schémas multiples en sont la preuve.

Ressources

Lien profond simple

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >
    
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="http"
              android:host="www.example.com" />

    </intent-filter>

</activity>

Cela acceptera tout lien commençant par http://www.example.com comme un lien profond pour démarrer votre MainActivity .

Plusieurs chemins sur un seul domaine

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >
    
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="http"
              android:host="www.example.com" />

        <data android:path="/" />
        <data android:path="/about" />
        <data android:path="/map" />

    </intent-filter>

</activity>

Cela lancera votre MainActivity lorsque l'utilisateur MainActivity l'un de ces liens:

  • http://www.example.com/
  • http://www.example.com/about
  • http://www.example.com/map

Plusieurs domaines et plusieurs chemins

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    
        <data android:scheme="http"
              android:host="www.example.com" />
    
        <data android:scheme="http"
              android:host="www.example2.com" />
    
        <data android:path="/" />
        <data android:path="/map" />
    
    </intent-filter>

</activity>

Cela lancera votre MainActivity lorsque l'utilisateur cliquera sur l'un de ces liens:

  • http://www.example.com/
  • http://www.example2.com/
  • http://www.example.com/map
  • http://www.example2.com/map

Les deux http et https pour le même domaine

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    
        <data android:scheme="http" />
        <data android:scheme="https" />
    
        <data android:host="www.example.com" />
    
        <data android:path="/" />
        <data android:path="/map" />
    
    </intent-filter>

</activity>

Cela lancera votre MainActivity lorsque l'utilisateur cliquera sur l'un de ces liens:

  • http://www.example.com/
  • https://www.example.com/
  • http://www.example.com/map
  • https://www.example.com/map

Récupération des paramètres de requête

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        Intent intent = getIntent();
        Uri data = intent.getData();

        if (data != null) {
            String param1 = data.getQueryParameter("param1");
            String param2 = data.getQueryParameter("param2");
        }
    }

}

Si l'utilisateur clique sur un lien vers http://www.example.com/map?param1=FOO&param2=BAR , alors param1 ici aura la valeur "FOO" et param2 aura la valeur "BAR" .

Utiliser pathPrefix

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    
        <data android:scheme="http"
              android:host="www.example.com"
              android:path="/item" />
    
    </intent-filter>

</activity>

Cela lancera votre mainActivity lorsque l'utilisateur cliquera sur un lien commençant par http://www.example.com/item , tel que:

  • https://www.example.com/item
  • http://www.example.com/item/1234
  • https://www.example.com/item/xyz/details


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow