Intégrer les actions dans les applications avec les segments d'application Android (obsolète)

Pour de nombreux intents, la meilleure réponse d'une application est une réponse intégrée rapide ou une simple confirmation qu'une action a été effectuée. Vous pouvez remplir ces intents avec un segment d'application Android plutôt qu'un lien profond pour fournir à un utilisateur des informations directement dans l'Assistant Google.

Exemple

<alt="screenshot a="" an="" invoice."="" l10n-attrs-original-order="Screenshot,on,a,mobile,phone,showing,an" mobile="" on="" phone="" showing="">
Figure 1 : Lancer un segment d'application à l'aide de GET_INVOICE
</alt="screenshot>

Google affiche automatiquement le nom de l'application et le logo de la fiche Play Store dans l'en-tête du segment d'application, ainsi que le bouton Ouvrir l'application en pied de page. L'utilisateur peut cliquer sur un segment d'application pour suivre un lien profond dans l'application si une interaction supplémentaire ou d'autres informations sont nécessaires.

Par exemple, à l'aide de l'intent intégré actions.intent.GET_INVOICE, votre application bancaire peut implémenter un segment d'application personnalisé affiché par l'Assistant lorsque l'utilisateur prononce la phrase d'appel Vérifier mes prochaines factures. Dans le segment d'application, vous pouvez afficher en temps réel les données de la facture de l'utilisateur.

Les segments d'application Android fonctionnent mieux lorsqu'un utilisateur demande une information courte pouvant être affichée en une ou deux lignes de texte. Utilisez plutôt les liens profonds lorsque l'utilisateur souhaite effectuer une tâche dans votre application ou démarrer une tâche nécessitant une interaction plus poussée.

L'intégration des segments d'application est également disponible pour les intents personnalisés.

Implémenter des segments d'application

Vous pouvez implémenter des segments d'application avec les fonctionnalités actions.xml ou shortcuts.xml.

Sélectionnez l'un des boutons suivants pour choisir la méthode d'implémentation à utiliser.

Pour intégrer des actions dans les applications à vos segments d'application, procédez comme suit :

  1. Pour implémenter un segment d'application Android, suivez la procédure décrite dans le guide de démarrage des segments d'application.
  2. Dans le fichier shortcuts.xml, ajoutez un élément <slice> à votre élément "capability". Dans l'élément <slice>, ajoutez les balises <url-template> et <parameter> pour l'élément "capability".

Lorsqu'un segment d'application est utilisé dans le traitement, url-template fait référence à l'URI du segment d'application, comme décrit dans le SliceProvider. Le url-template doit être de type content://{slice_authority}/..., où slice_authority est l'autorité définie dans le fichier AndroidManifest.xml.

L'aperçu suivant montre comment spécifier un segment d'application en tant que traitement de l'intent intégré CREATE_TAXI_RESERVATION dans votre fichier shortcuts.xml :

<!-- shortcuts.xml -->
<capability android:name="actions.intent.CREATE_TAXI_RESERVATION">
  <slice>
    <url-template
      android:name="content://com.example/get_ride{?pickup,dropoff}" />
      <parameter
            android:name="taxiReservation.pickupLocation.name"
            android:key="pickup" />
      <parameter
            android:name="taxiReservation.dropoffLocation.name"
            android:key="dropoff" />
  </slice>
</capability>

Pour une capacité donnée, vous pouvez spécifier plusieurs blocs <slice> ou utiliser une combinaison de blocs <slice> et <intent> pour le traitement. Cette approche vous permet de proposer une expérience personnalisée en fonction de différentes combinaisons de paramètres spécifiées par l'utilisateur.

Par exemple, si l'utilisateur ne spécifie pas de lieu de dépôt dans sa requête, vous pouvez le rediriger vers l'activité de votre application qui présente les options permettant de définir les lieux de retrait et de dépôt. Pour en savoir plus sur l'ajout d'intents de remplacement, consultez la section Créer shortcuts.xml.

Notez que, comme pour plusieurs blocs <intent>, plusieurs blocs <slice> ou une combinaison de blocs <slice> et <intent> sont exécutés dans l'ordre dans lequel ils sont déclarés. Seul le premier bloc correspondant à toutes les exigences d'une requête utilisateur donnée s'exécute.

Autorisations liées aux segments d'application

Vous devez autoriser le segment d'application à accéder à l'Assistant Google au démarrage. Les autorisations du segment d'application sont hiérarchiques. L'Assistant obtient donc l'autorisation pour tous les URI de segment d'application tant que vous lui accordez une autorisation sur un URI de niveau supérieur (par exemple, content://com.example.slice.provider/).

L'extrait de code suivant vous montre comment procéder :

Kotlin

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        grantSlicePermissions()
    }
    private fun grantSlicePermissions() {
        val context = applicationContext
        val sliceProviderUri = Uri.Builder()
            .scheme(ContentResolver.SCHEME_CONTENT)
            .authority(SLICE_AUTHORITY)
            .build()
        val assistantPackage = getAssistantPackage(context) ?: return
        SliceManager.getInstance(context)
            .grantSlicePermission(assistantPackage, sliceProviderUri)
    }
    private fun getAssistantPackage(context: Context): String? {
        val packageManager = context.packageManager
        val resolveInfoList = packageManager.queryIntentServices(
            Intent(VoiceInteractionService.SERVICE_INTERFACE), 0
        )
        return if (resolveInfoList.isEmpty()) {
            null
        } else resolveInfoList[0].serviceInfo.packageName
    }
    companion object {
        private const val SLICE_AUTHORITY = "..."
    }
}
  

Java

public class MyApplication extends Application {
    private static final String SLICE_AUTHORITY = "...";
    @Override
    public void onCreate() {
        super.onCreate();
        grantSlicePermissions();
    }
    private void grantSlicePermissions() {
        Context context = getApplicationContext();
        Uri sliceProviderUri =
            new Uri.Builder()
                .scheme(ContentResolver.SCHEME_CONTENT)
                .authority(SLICE_AUTHORITY)
                .build();
        String assistantPackage = getAssistantPackage(context);
        if (assistantPackage == null) {
            return;
        }
        SliceManager.getInstance(context)
            .grantSlicePermission(assistantPackage, sliceProviderUri);
    }
    private String getAssistantPackage(Context context) {
        PackageManager packageManager = context.getPackageManager();
        List resolveInfoList = packageManager.queryIntentServices(
            new Intent(VoiceInteractionService.SERVICE_INTERFACE), 0);
        if (resolveInfoList.isEmpty()) {
            return null;
        }
        return resolveInfoList.get(0).serviceInfo.packageName;
    }
}

Journalisation des segments d'application

Pour déclencher des actions dans l'application, Google consigne les données suivantes concernant votre segment d'application (en particulier à partir de l'objet SliceMetadata) :

Nous ne consignons pas les informations SliceMetadata suivantes :

L'Assistant Google ne dispose donc d'aucune information concernant les sélections des utilisateurs par rapport à un segment d'application précis.

Consignes relatives à la qualité pour l'intégration des segments d'application

Cette section présente les exigences clés et les bonnes pratiques liées à l'intégration d'actions dans les applications avec des segments d'application.

Exigences générales

  • Veillez à définir une action prioritaire pour chaque segment d'application.
  • Lors du chargement du contenu du segment d'application, assurez-vous de définir le champ isLoading dans l'API des segments d'application sur "Vrai" si le segment d'application renvoyé est un segment de chargement (et "Faux" dans le cas contraire).
  • Pour signaler des conditions d'erreur, utilisez la méthode setIsError() afin d'indiquer à Google que le contenu des segments d'application ne s'est pas chargé correctement ou que la requête de l'utilisateur ne peut pas être traitée.

Contenu des segments d'application

  • (Obligatoire) Ne diffusez aucune annonce dans vos segments d'application.
  • (Obligatoire) N'ajoutez pas d'informations en en-tête ou en pied de page à vos segments d'application. Google les fournit automatiquement.
  • Assurez-vous que le contenu des segments d'application reste entièrement axé sur le traitement de l'intent. N'essayez pas de traiter plusieurs intents avec un seul segment d'application et n'ajoutez pas de contenu non pertinent.

Gérer l'authentification

  • (Obligatoire) Lorsque l'authentification de l'utilisateur est nécessaire pour terminer un parcours utilisateur, renvoyez un segment d'application expliquant que l'utilisateur doit continuer dans l'application. L'authentification utilisateur intégrée à l'Assistant Google n'est pas compatible avec les actions dans les applications.
  • Si les utilisateurs autorisent votre application à afficher des données à l'aide de segments d'application, vous pouvez renvoyer un segment d'application de type "Erreur" au moment de l'exécution pour les utilisateurs non autorisés.

Liens profonds

  • (Obligatoire) Utilisez un lien profond pour rediriger l'utilisateur vers le bon écran de votre application plutôt que vers l'écran d'accueil.
  • (Obligatoire) Dans le fichier shortcuts.xml, proposez toujours le traitement des liens profonds de remplacement en plus du traitement de segments d'application pour un intent intégré spécifique. Il existe une exception à cette règle si aucun mappage de paramètres n'est défini pour cette action dans l'application, auquel cas seul le traitement des segments d'application est nécessaire.