Optimiser le contenu contextuel pour l'Assistant

Android 6.0 Marshmallow introduit une nouvelle façon d'interagir avec les applications via l'Assistant telles que Google l'Assistant Google. L'assistant est une fenêtre de niveau supérieur que les utilisateurs peuvent afficher pour obtenir des actions pertinentes pour l'activité en cours. Ces actions peuvent inclure des liens profonds vers d'autres applications sur l'appareil.

Les utilisateurs activent l'Assistant en appuyant de manière prolongée sur le bouton d'accueil ou en disant un keyphrase. En réponse, le système ouvre une fenêtre de premier niveau qui affiche des informations contextuelles les actions pertinentes.

Une application d'assistant, comme l'Assistant Google, implémente la fenêtre de superposition de l'assistant via une fonctionnalité appelée Now on Tap, qui fonctionne avec la fonctionnalité de niveau plate-forme Android. Le système permet à l'utilisateur de sélectionner une application d'assistance, qui obtient des informations contextuelles de votre application à l'aide de API Assist d'Android

Ce guide explique comment les applications Android utilisent l'API Assist d'Android pour améliorer l'Assistant l'expérience utilisateur. Pour savoir comment créer une application multimédia afin que l'Assistant puisse la lancer et la contrôler, consultez Assistant Google et applications multimédias.

Utiliser les assistants

La figure 1 illustre une interaction type d'un utilisateur avec l'assistant. Lorsque l'utilisateur appuie de manière prolongée le bouton "Accueil", les rappels de l'API Assist sont appelés dans l'application source (étape 1). L'assistant affiche la fenêtre en superposition (étapes 2 et 3), puis l'utilisateur sélectionne l'action à effectuer. L'Assistant exécute l'action sélectionnée, par exemple en déclenchant un intent avec un lien profond vers l'application de restaurant (destination) (étape 4).

Figure 1. Exemple d'interaction avec l'Assistant avec la fonctionnalité Google on Tap de l'appli Google

Les utilisateurs peuvent configurer l'assistant en sélectionnant Settings > Apps > Default Apps > Assist & voice input (Paramètres > Applications > Applications par défaut > Assistance et saisie vocale). Les utilisateurs peuvent modifier les options du système, contenu de l'écran sous forme de texte et accéder à une capture d'écran, comme illustré dans la figure 2.

Figure 2. Aide et paramètres de saisie vocale

Application source

Pour vous assurer que votre application fonctionne avec l'assistant en tant que source d'information pour l'utilisateur, il vous suffit de suivre les bonnes pratiques d'accessibilité pratiques. Cette section explique comment fournir des informations supplémentaires afin d'améliorer l'expérience utilisateur de l'assistant, ainsi que les scénarios qui nécessitent un traitement spécial, comme les vues personnalisées.

Partager des informations supplémentaires avec l'Assistant

En plus du texte et de la capture d'écran, votre application peut partager d'autres informations avec l'assistant. Par exemple, votre musique l'application peut choisir de transmettre les informations actuelles de l'album afin que l'Assistant puisse suggérer des actions plus intelligentes adaptées à l'activité en cours. Notez que les API Assist ne proposent pas de commandes multimédias. Pour ajouter des commandes multimédias, consultez Assistant Google et applications multimédias

Pour fournir des informations supplémentaires à l'Assistant, votre application fournit contexte global de l'application en enregistrant un écouteur d'applications. fournit des informations spécifiques à l'activité avec des rappels d'activité, comme indiqué dans Figure 3:

Figure 3. Schéma séquentiel du cycle de vie de l'API Assist

Pour fournir un contexte global, l'application crée une implémentation de Application.OnProvideAssistDataListener et l'enregistre avec registerOnProvideAssistDataListener(). Pour fournir des informations contextuelles spécifiques à une activité, l'activité remplace onProvideAssistData() et onProvideAssistContent(). Les deux méthodes d'activité sont appelées après le paramètre global facultatif est invoqué. Comme les rappels s'exécutent sur le thread principal, ils doivent effectuer rapidement. Les rappels ne sont appelés que lorsque l'activité est en cours d'exécution (running).

Fournir des éléments de contexte

Lorsque l'utilisateur active l'assistant, onProvideAssistData() est appelé pour créer un ACTION_ASSIST avec tout le contexte de l'intent l'application actuelle représentée sous la forme d'une instance de AssistStructure. Vous pouvez remplacer cette méthode pour placer tous les éléments de votre choix dans le groupe EXTRA_ASSIST_CONTEXT de l'intent d'assistance.

Décrire du contenu

Votre application peut implémenter onProvideAssistContent() pour améliorer l'expérience utilisateur de l'Assistant en fournissant des références liées au contenu de l'activité en cours. Vous pouvez décrire le contenu de l'application à l'aide des vocabulaire commun défini par Schema.org via un objet JSON-LD. Dans l'exemple ci-dessous, une application musicale fournit des données structurées pour décrire l'album musical que l'utilisateur est actuellement en cours d'affichage:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

Vous pouvez également améliorer l'expérience utilisateur avec des implémentations personnalisées onProvideAssistContent(), qui offre les avantages suivants:

Remarque : Les applications qui utilisent une implémentation de sélection de texte personnalisée auront probablement besoin pour implémenter onProvideAssistContent(). et appelez setClipData().

Implémentation par défaut

Si ni onProvideAssistData(), ni onProvideAssistContent() est implémenté, le système continue de transmettre l'appel les informations collectées automatiquement à l'assistant, sauf si est signalée comme sécurisée. Comme le montre la figure 3, le système utilise les implémentations par défaut de onProvideStructure() et onProvideVirtualStructure() pour de collecter du texte et d'afficher des informations sur la hiérarchie. Si votre vue implémente des modèles dessin textuel, remplacez onProvideStructure() pour fournir l'assistant avec le texte présenté à l'utilisateur en appelant setText(CharSequence).

Dans la plupart des cas, la prise en charge de l'accessibilité permet pour obtenir les informations dont il a besoin. Pour implémenter la prise en charge de l'accessibilité, suivez les bonnes pratiques décrites dans Faire en sorte que les applications soient accessibles, y compris les suivantes :

Sans les vues provenant des assistants

Pour gérer les informations sensibles, votre application peut exclure la vue actuelle de l'Assistant en définissant le paramètre de mise en page FLAG_SECURE de WindowManager. Vous devez définir FLAG_SECURE explicitement pour chaque fenêtre créée par l'activité, y compris les boîtes de dialogue. Votre application peut également utiliser setSecure() pour exclure une surface de l'assistant. Il n'y a aucun mécanisme global (au niveau de l'application) pour exclure toutes les vues de l'assistant. Remarque que FLAG_SECURE n'entraîne pas l'arrêt des rappels de l'API Assist le déclenchement. L'activité qui utilise FLAG_SECURE peut toujours explicitement Fournir des informations à une application d'assistance à l'aide des rappels décrits précédemment ce guide.

Remarque : Pour les comptes d'entreprise (Android for Work), l'administrateur peut désactiver la collecte des données de l'assistant pour le profil professionnel à l'aide de la méthode setScreenCaptureDisabled() de l'API DevicePolicyManager.

Interactions vocales

Les rappels de l'API Assist sont également invoqués expression clé de sécurité. Pour en savoir plus, consultez les Voix Actions.

Considérations relatives à l'ordre de plan

Un assistant utilise une fenêtre légère superposée activité en cours. Comme l'utilisateur peut activer l'assistant à tout moment, ne créez pas de d'alerte système qui interfèrent avec la fenêtre en superposition, comme illustré dans Figure 4.

Figure 4. Ordre Z de la couche d'assistance

Si votre application utilise d'alerte système, supprimez-les rapidement, car vous les laissez dégrade l'expérience utilisateur.

Application de destination

Les applications compatibles avec l'Assistant exploitent généralement les liens profonds pour trouver des applications de destination. Pour que votre application soit une application de destination potentielle, envisagez d'ajouter la prise en charge des liens profonds. La mise en correspondance entre le contexte utilisateur actuel et les liens profonds ou d'autres actions potentielles affichées dans (illustrée à l'étape 3 de la figure 1) est spécifique à l'implémentation de l'Assistant Google. Pour Par exemple, l'application Assistant Google utilise des liens profonds et des liens vers une application pour : générer du trafic vers les applications de destination.

Implémenter votre propre Assistant

Si vous le souhaitez, vous pouvez implémenter votre propre assistant. Comme le montre la Figure 2, l'utilisateur peut sélectionner l'application d'assistance active. La l'application d'assistance doit fournir une implémentation de VoiceInteractionSessionService et VoiceInteractionSession, comme indiqué dans la section VoiceInteraction exemple. Elle nécessite également l'autorisation BIND_VOICE_INTERACTION. L'Assistant peut alors reçoivent la hiérarchie des textes et des vues représentées par une instance de AssistStructure dans onHandleAssist(). Il reçoit la capture d'écran via onHandleScreenshot().