![](https://developer.android.com/static/guide/app-actions/images/Fitness4-widget.png?authuser=6&hl=fr)
GET_EXERCISE_OBSERVATION
.
Pour de nombreux intents, la meilleure solution consiste à fournir à l'utilisateur une réponse simple, une brève confirmation ou une expérience interactive rapide. Vous pouvez afficher un widget d'application Android dans l'Assistant Google pour traiter ce type d'intents.
Ce guide explique comment traiter les requêtes des utilisateurs de l'Assistant à l'aide de widgets et comment améliorer votre expérience de widget pour l'Assistant avec la bibliothèque d'extensions de widgets des actions dans les applications.
Avantages
Les widgets sont des vues d'application miniatures qui peuvent être intégrées à des surfaces Android, telles que le lanceur d'applications ou l'écran de verrouillage. Avec les actions dans les applications, vous augmentez l'impact de vos widgets en les rendant éligibles à l'affichage dans l'Assistant :
- Découverte:affichez des widgets de manière proactive en réponse aux requêtes en langage naturel des utilisateurs.
- Engagement:affichez les widgets en mode mains libres, par exemple lorsque l'Assistant fournit des résultats personnels sur l'écran de verrouillage et sur Android Auto.
- Fidélisation:autorisez les utilisateurs à épingler les widgets affichés dans l'Assistant à leur lanceur. La fonctionnalité d'épinglage nécessite la bibliothèque d'extensions de widgets.
Affichage des widgets par l'Assistant
Les utilisateurs peuvent appeler des widgets de deux manières :
- Demander explicitement un widget par son nom.
- Énoncer à l'Assistant une requête qui déclenche un intent intégré ou un intent personnalisé configuré pour le traitement des widgets
Appel explicite
Pour appeler explicitement des widgets pour une application installée, les utilisateurs peuvent poser des questions à l'Assistant, par exemple :
- "Hey Google, affiche le widget Exempled'Appli."
- "Widgets Exempled'Appli".
L'Assistant affiche ces widgets avec l'introduction générique : "Exempled'Appli dit : voici un widget." Bien que l'Assistant renvoie de manière native les widgets demandés de cette manière sans aucune action requise de la part du développeur de l'application, cette méthode d'appel nécessite que l'utilisateur ait une connaissance explicite du widget pour le demander. Pour simplifier la découverte des widgets, utilisez la méthode de traitement des intents décrite dans la section suivante.
Traitement de l'intent
Facilitez la recherche de vos widgets en les utilisant pour répondre aux requêtes en langage naturel que les utilisateurs effectuent sur l'Assistant. Par exemple, vous pouvez renvoyer un widget chaque fois qu'un utilisateur déclenche l'intent intégré GET_EXERCISE_OBSERVATION
dans votre application de fitness en demandant "Hey Google, combien de kilomètres ai-je parcourus cette semaine sur ExampleApp ?". En plus de simplifier la découverte, intégrer des widgets aux actions dans l'application offre les avantages suivants :
- Accès aux paramètres:l'Assistant fournit à votre widget les paramètres d'intent extraits de la requête utilisateur, ce qui permet des réponses sur mesure.
- Présentations vocales personnalisées:vous pouvez fournir une chaîne de synthèse vocale que l'Assistant doit prononcer lors de l'affichage de votre widget.
- Épinglage de widget:l'Assistant affiche un bouton Ajouter ce widget à côté de votre widget, ce qui permet aux utilisateurs d'épingler facilement vos widgets à leur lanceur.
Implémenter le traitement des widgets
Pour implémenter le traitement de widgets pour vos intents, procédez comme suit :
- Mettez en œuvre un widget Android en suivant la procédure décrite dans Créer un widget simple.
- Dans le fichier de ressources
shortcuts.xml
de votre application, ajoutez à votre fonctionnalité un élément<app-widget>
contenant des détails de traitement et des tags d'intent intégré<parameter>
. Mettez à jour votre widget pour gérer les paramètres. - Ajoutez la bibliothèque d'extensions de widgets requise, qui permet à l'Assistant de transmettre des noms et des paramètres d'intent intégré à vos widgets. Elle permet également d'utiliser des introductions vocales personnalisées et la fonctionnalité d'épinglage de widgets.
La section suivante décrit le schéma <app-widget>
pour shortcuts.xml
.
Schéma du widget
Les éléments <app-widget>
sont définis comme des traitements dans les éléments <capability>
de shortcuts.xml
. Ils nécessitent les attributs suivants, sauf indication contraire :
Balise "shortcuts.xml" | Contenue dans | Attributs |
---|---|---|
<app-widget> |
<capability> |
|
<parameter> |
<app-widget> |
|
<extra> |
<app-widget> |
|
Description du schéma du widget
<app-widget>
Élément de traitement du widget de premier niveau.
Attributs :
android:identifier
: identifiant de ce traitement. Cette valeur doit être unique parmi les éléments de traitement<app-widget>
et<intent>
définis dans un élément<capability>
.android:targetClass
: nom de classe complet duAppWidgetProvider
pour gérer l'intent.
<parameter>
Met en correspondance un paramètre d'intent intégré avec une valeur d'intent <parameter>
. Vous pouvez définir zéro ou plusieurs paramètres pour chaque élément <app-widget>
. Lors du traitement, l'Assistant transmet les paramètres en mettant à jour les extras de l'instance de widget en tant que paires clé/valeur, au format suivant:
- Clé :
android:key
défini pour le paramètre. - Valeur: valeur que l'intent intégré extrait de la saisie vocale d'un utilisateur.
Pour accéder à ces extras, appelez getAppWidgetOptions()
sur l'objet AppWidgetManager
associé, qui renvoie un Bundle
contenant le nom de l'intent intégré de déclenchement et ses paramètres. Pour en savoir plus, consultez la section Extraire les valeurs des paramètres.
Pour en savoir plus sur la mise en correspondance des paramètres d'intent intégré, consultez la page Données et correspondance des paramètres.
<extra>
Balise facultative déclarant qu'une introduction personnalisée à la synthèse vocale est utilisée pour ce widget. Cette balise nécessite les valeurs d'attribut suivantes :
android:name
:"hasTts"
android:value
:"true"
Exemple de code
L'exemple suivant issu d'un fichier shortcuts.xml
illustre une configuration de traitement de widget pour une fonctionnalité d'intent intégré GET_EXERCISE_OBSERVATION
:
<capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
<app-widget
android:identifier="GET_EXERCISE_OBSERVATION_1"
android:targetClass="com.exampleapp.providers.exampleAppWidgetProvider"
android:targetPackage="com.exampleapp">
<parameter
android:name="exerciseObservation.aboutExercise.name"
android:key="exercisename">
</parameter>
<extra android:name="hasTts" android:value="true"/>
</app-widget>
</capability>
Vous pouvez spécifier plusieurs éléments <app-widget>
ou utiliser une combinaison d'éléments <app-widget>
et <intent>
par fonctionnalité. Cette approche vous permet de personnaliser l'expérience en fonction de différentes combinaisons de paramètres fournies par les utilisateurs. 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 la définition des intents de remplacement, consultez la section Intents de remplacement.
Extraire les valeurs des paramètres
Dans l'exemple de classe AppWidgetProvider
suivant, la fonction privée updateAppWidget()
permet d'extraire le nom et les paramètres de l'intent intégré à partir des options du widget Bundle
:
Kotlin
package com.example.exampleapp //... Other module imports import com.google.assistant.appactions.widgets.AppActionsWidgetExtension /** * Implementation of App Widget functionality. */ class MyAppWidget : AppWidgetProvider() { override fun onUpdate( context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray ) { // There might be multiple widgets active, so update all of them for (appWidgetId in appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId) } } private fun updateAppWidget( context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int ) { val widgetText: CharSequence = context.getString(R.string.appwidget_text) // Construct the RemoteViews object val views = RemoteViews(context.packageName, R.layout.my_app_widget) views.setTextViewText(R.id.appwidget_text, widgetText) // Extract the name and parameters of the BII from the widget options val optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId) val bii = optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII) // "actions.intent.CREATE_TAXI_RESERVATION" val params = optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS) if (params != null && params.containsKey("dropoff")) { val dropoffLocation = params.getString("dropoff") // Build your RemoteViews with the extracted BII parameter // ... } appWidgetManager.updateAppWidget(appWidgetId, views) } }
Java
package com.example.exampleapp; //... Other module imports import com.google.assistant.appactions.widgets.AppActionsWidgetExtension; /** * Implementation of App Widget functionality. */ public class MyAppWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // There might be multiple widgets active, so update all of them for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } } private static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { CharSequence widgetText = context.getString(R.string.appwidget_text); // Construct the RemoteViews object RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_app_widget); views.setTextViewText(R.id.appwidget_text, widgetText); // Extract the name and parameters of the BII from the widget options Bundle optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId); String bii = optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII); // "actions.intent.CREATE_TAXI_RESERVATION" Bundle params = optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS); if (params != null && params.containsKey(("dropoff"))){ String dropoffLocation = params.getString("dropoff"); // Build your RemoteViews with the extracted BII parameter // ... } appWidgetManager.updateAppWidget(appWidgetId, views); } }
Bibliothèque d'extensions de widgets
La bibliothèque d'extensions de widgets pour les actions dans les applications améliore vos widgets pour les expériences vocales avec l'Assistant. Cette bibliothèque permet à vos widgets de recevoir des informations de traitement importantes de l'intent intégré de déclenchement, y compris le nom de l'intent intégré et tous les paramètres d'intent extraits de la requête utilisateur.
Cette bibliothèque Maven vous permet de fournir une présentation de synthèse vocale personnalisée pour chaque widget, ce qui permet à l'Assistant d'annoncer un résumé du contenu affiché visuellement pour les utilisateurs. Elle permet également d'épingler le widget au lanceur d'applications, ce qui permet aux utilisateurs d'enregistrer facilement les widgets affichés dans l'Assistant sur leur écran de lancement.
Pour commencer, ajoutez la bibliothèque à la section des dépendances du fichier build.gradle
de votre module d'application :
dependencies {
//...
implementation "com.google.assistant.appactions:widgets:0.0.1"
}
Introductions personnalisées
Après avoir importé la bibliothèque d'extensions de widgets, vous pouvez fournir des introductions vocales personnalisées pour vos widgets. Pour ajouter votre définition au fichier AppWidgetProvider
du widget, ouvrez la classe dans votre IDE et importez la bibliothèque d'extensions de widgets :
Kotlin
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension
Java
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;
Kotlin
package com.example.exampleapp //... Other module imports import com.google.assistant.appactions.widgets.AppActionsWidgetExtension /** * Implementation of App Widget functionality. */ object MyAppWidget : AppWidgetProvider() { fun updateAppWidget( context: Context?, appWidgetManager: AppWidgetManager, appWidgetId: Int ) { val appActionsWidgetExtension = AppActionsWidgetExtension.newBuilder(appWidgetManager) .setResponseSpeech("Hello world") // TTS to be played back to the user .setResponseText("Hello world!") // Response text to be displayed in Assistant .build() // Update widget with TTS appActionsWidgetExtension.updateWidget(appWidgetId) // Update widget UI appWidgetManager.updateAppWidget(appWidgetId, views) } }
Java
package com.example.exampleapp; //... Other module imports import com.google.assistant.appactions.widgets.AppActionsWidgetExtension; /** * Implementation of App Widget functionality. */ public class MyAppWidget extends AppWidgetProvider { static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { AppActionsWidgetExtension appActionsWidgetExtension = AppActionsWidgetExtension.newBuilder(appWidgetManager) .setResponseSpeech("Hello world") // TTS to be played back to the user .setResponseText("Hello world!") // Response text to be displayed in Assistant .build(); // Update widget with TTS appActionsWidgetExtension.updateWidget(appWidgetId); // Update widget UI appWidgetManager.updateAppWidget(appWidgetId, views); } }
Recommandations de style pour la synthèse vocale
Utilisez les recommandations de style suivantes afin d'optimiser les introductions de widgets personnalisés pour la synthèse vocale et les invites affichées.
Recommandation | recommandé | Non recommandé |
---|---|---|
ContractionsUtilisez les contractions dans les requêtes de synthèse vocale. Les messages sans contraction sont inspirés d'un robot, et non naturels et conversationnels. Des mots prononcés comme "impossible" et "ne pas faire" peuvent être agressifs et agressifs. |
ResponseSpeech (TTS)Malheureusement, je ne trouve aucune réservation. ResponseText Malheureusement, je ne trouve aucune réservation. |
ResponseSpeech (TTS)Malheureusement, je n'ai trouvé aucune réservation. ResponseText Malheureusement, je n'ai trouvé aucune réservation. |
VirgulePour plus de clarté, utilisez des virgules de série dans les listes de trois éléments ou plus. Sans la virgule de série, les éléments individuels de la liste peuvent être mal entendus ou lus en tant que groupes. Par exemple, dans "jonquilles, marguerites et tournesols", "marguerites et tournesols" semblent s'assembler. Dans "jonquilles, marguerites et tournesols", les trois sont clairement séparés. |
ResponseSpeech (TTS)Les plus populaires sont les roses jaunes, les jonquilles, les marguerites et les tournesols. ResponseText Les plus populaires sont les roses jaunes, les jonquilles, les marguerites et les tournesols. |
ResponseSpeech (TTS)Les plus populaires sont les roses jaunes, les jonquilles, les marguerites et les tournesols. ResponseText Les plus populaires sont les roses jaunes, les jonquilles, les marguerites et les tournesols. |
ChiffresUtilisez des chiffres plutôt que du texte pour rendre le contenu visuel plus lisible en un coup d'œil. |
ResponseSpeech (TTS)Votre tension artérielle est de 100 supérieure à 80. ResponseText Votre pression artérielle est de 100/80. |
ResponseSpeech (TTS)Votre pression artérielle est de 100/80. ResponseText Votre pression artérielle est de 180. |
SymbolesUtilisez des symboles spécialisés plutôt que du texte pour rendre le contenu visuel plus lisible. |
ResponseSpeech (TTS)Votre dernier achat était de 24,65 $. ResponseText Votre dernier achat était de 24,65 $. |
ResponseSpeech (TTS)Votre dernier achat était de 24 dollars et 65 cents. ResponseText Votre dernier achat était de 24 dollars et 65 cents. |
Évitez les subtilitésLes subtilités donnent l'impression que les réponses sont distantes et formelles. Oubliez-les, et maintenez la conversation amicale et informelle. |
ResponseSpeech (TTS)Votre commande a été livrée. ResponseText Votre commande a été livrée. |
ResponseSpeech (TTS)Bien sûr, je peux vous le dire. Votre commande a été livrée. ResponseText Bien sûr, je peux vous le dire. Votre commande a été livrée. |
Évitez les points d'exclamation.Ils peuvent être perçus comme des cris. |
ResponseSpeech (TTS)Vous avez couru 1,5 mile aujourd'hui. ResponseText Vous avez couru 1,5 mile aujourd'hui. |
ResponseSpeech (TTS)Vous avez couru 1,5 mile aujourd'hui ! ResponseText Vous avez couru 1,5 mile aujourd'hui ! |
DuréeUtilisez des chiffres: "5:15" au lieu de "cinq-quinze" ou "quartier après cinq". Pour le format 12 heures, utilisez AM ou PM. |
ResponseSpeech (TTS)Votre livraison devrait arriver à 8h15. ResponseText Votre livraison devrait arriver pour 8h15. |
ResponseSpeech (TTS)Votre livraison devrait arriver aujourd'hui d'ici 15 minutes après 8h. ResponseText Votre livraison devrait arriver aujourd'hui d'ici 15 minutes après 8 heures du matin. |
Ne vous lancez pas dans les monologuesSoyez informatif, mais faites en sorte que les réponses soient concises. N'entrez pas dans les détails grossièrement sans présenter un avantage évident pour l'utilisateur. |
ResponseSpeech (TTS)Le mois dernier, vous avez consommé 159 heures d'énergie. ResponseText Le mois dernier, vous avez consommé 159 heures d'énergie. |
ResponseSpeech (TTS)Les économies d'énergie sont très importantes pour la planète et l'environnement. Le mois dernier, vous avez consommé 159 heures d'énergie. Ce mois-ci, vous avez utilisé 58 heures d'énergie. ResponseText Les économies d'énergie sont très importantes pour la planète et l'environnement. Le mois dernier, vous avez consommé 159 heures d'énergie. Ce mois-ci, vous avez utilisé 58 heures d'énergie. |
Utilisez des mots courts et simplesLe langage simple et simple attire le plus grand nombre d'internautes, ce qui les rend accessibles aux personnes de tous horizons. |
ResponseSpeech (TTS)Votre dernière mesure de glycémie était de 126. ResponseText Votre dernière mesure de glycémie était de 126 mg/dL. |
ResponseSpeech (TTS)L'avant-dernier taux de glycémie était de 126. ResponseText L'avant-dernier taux de glycémie était de 126. |
Épinglage au lanceur d'applications
La bibliothèque d'extensions de widgets permet d'afficher le bouton Ajouter ce widget avec votre widget dans l'Assistant. Pour activer l'épinglage, ajoutez la définition de récepteur suivante à AndroidManifest.xml
:
<application>
<receiver android:name="com.google.assistant.appactions.widgets.pinappwidget.PinAppWidgetBroadcastReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.google.assistant.appactions.widgets.COMPLETE_PIN_APP_WIDGET" />
</intent-filter>
</receiver>
<service
android:name=
"com.google.assistant.appactions.widgets.pinappwidget.PinAppWidgetService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action
android:name="com.google.assistant.appactions.widgets.PIN_APP_WIDGET" />
</intent-filter>
</service>
</application>
Disponibilité de l'inventaire
Les intents intégrés compatibles avec l'inventaire intégré ou l'inventaire Web peuvent étendre ces inventaires à vos traitements de widgets.
Inventaire intégré
Le code suivant issu d'un exemple de fichier shortcuts.xml
illustre une fonctionnalité d'intent intégré START_EXERCISE
configurée pour l'inventaire intégré et le traitement des widgets:
<capability
android:name="actions.intent.START_EXERCISE">
<app-widget
android:identifier="START_EXERCISE_1"
android:targetClass="com.example.exampleapp.StartExerciseAppWidgetProvider">
<parameter
android:name="exercise.name"
android:key="exerciseName"
app:shortcutMatchRequired="true">
</parameter>
</app-widget>
</capability>
<shortcut android:shortcutId="RunningShortcut">
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.example.exampleapp.StartExcerciseActivity" />
<capability-binding
android:capability="actions.intent.START_EXERCISE"
android:parameter="exercise.name"
android:value="running;runs" />
</shortcut>
Dans l'exemple précédent, lorsqu'un utilisateur déclenche cette fonctionnalité en demandant à l'Assistant "Start running with ExampleApp" (Démarrer l'exécution avec ExampleApp), le bundle d'options du traitement <app-widget>
contient la paire clé-valeur suivante:
- Clé =
“exerciseName”
- Valeur =
“RunningShortcut”
Inventaire Web
Le code suivant, issu d'un exemple de fichier shortcuts.xml
, montre une fonctionnalité activée pour l'inventaire Web et le traitement des widgets:
<shortcuts>
<capability
android:name="actions.intent.START_EXERCISE">
<app-widget
android:identifier="START_EXERCISE_1"
android:targetClass="com.example.exampleapp.CreateTaxiAppWidgetProvider">
<parameter
android:name="exercise.name"
android:key="exerciseName"
android:mimeType="text/*">
<data android:pathPattern="https://exampleapp.com/exercise/.*" />
</parameter>
</app-widget>
</capability>
</shortcuts>
Tester les actions dans l'application
Utilisez l'outil de test des actions dans les applications, une fonctionnalité du plug-in Assistant Google pour Android Studio, afin de tester les widgets sur un appareil physique ou virtuel. Pour utiliser l'outil de test, procédez comme suit :
- Connectez votre appareil de test à votre application en cours d'exécution.
- Dans Android Studio, accédez à Tools > App Actions > App Actions Test Tool (Outils > Actions dans l'application > Outil de test des actions dans l'application).
- Cliquez sur Create Preview (Créer un aperçu).
- À l'aide d'Android Studio, exécutez votre application sur votre appareil de test.
- Utilisez l'application Assistant sur votre appareil de test pour tester votre action dans l'application. Par exemple, vous pouvez dire "Hey Google, combien de kilomètres ai-je parcourus cette semaine sur ExampleApp ?".
- Observez le comportement de votre application ou utilisez le débogueur Android Studio pour vérifier le résultat d'action souhaité.
Consignes relatives à la qualité
Cette section présente les exigences clés et les bonnes pratiques liées à l'intégration d'actions dans les applications avec des widgets.
Contenu des widgets
- (Obligatoire) N'affichez aucune annonce dans vos widgets.
- Axer complètement le contenu du widget sur le traitement de l'intent. N'essayez pas de traiter plusieurs intents avec un seul widget 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 widget 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 widgets, vous pouvez renvoyer un widget d'erreur au moment de l'exécution pour les utilisateurs non autorisés.
Intents de remplacement
(Obligatoire) Dans votre
shortcuts.xml
, fournissez toujours un élément de remplacement<intent>
en plus de votre traitement de widget pour une fonctionnalité donnée. Un intent de remplacement est un élément<intent>
sans valeurs<parameter>
obligatoires.Cela permet à l'Assistant d'exécuter une action lorsque la requête de l'utilisateur ne contient pas les paramètres requis par les autres éléments de traitement définis dans la capacité. Il existe une exception à cette règle lorsqu'il n'existe aucun paramètre requis pour cette fonctionnalité, auquel cas seul le traitement du widget est nécessaire.
Utilisez l'intent de remplacement pour ouvrir votre application sur l'écran approprié, et non sur l'écran d'accueil.
Le code suivant issu d'un exemple de fichier shortcuts.xml
illustre un <capability>
avec un <intent>
de remplacement compatible avec un traitement <app-widget>
principal:
<shortcuts>
<capability
android:name="actions.intent.CREATE_TAXI_RESERVATION">
<!-- Widget with required parameter, specified using the "android:required" attribute. -->
<app-widget
android:identifier="CREATE_TAXI_RESERVATION_1"
android:targetClass="com.example.myapplication.CreateTaxiAppWidgetProvider">
<parameter
android:name="taxiReservation.dropoffLocation.name"
android:key="dropoff"
android:required="true">
</parameter>
</app-widget>
<!-- Fallback intent with no parameters required to successfully execute. -->
<intent
android:identifier="CREATE_TAXI_RESERVATION_3"
android:action="myapplication.intent.CREATE_TAXI_RESERVATION_1"
android:targetClass="com.example.myapplication.TaxiReservationActivity">
</intent>
</capability>
</shortcuts>
Divulgation de données Google Play
Cette section liste les données de l'utilisateur final collectées par la dernière version de la bibliothèque d'extensions de widgets.
Ce SDK envoie à l'utilisateur des réponses vocales fournies par le développeur, qui sont annoncées par l'Assistant grâce à sa technologie de synthèse vocale. Ces informations ne sont pas stockées par Google.
Les actions dans les applications peuvent également collecter des métadonnées d'application cliente aux fins suivantes:
- Surveiller les taux d'adoption des différentes versions du SDK
- Pour quantifier l'utilisation des fonctionnalités du SDK dans les applications.