שילוב 'פעולות באפליקציה' עם ווידג'טים של Android

איור 1. השקת ווידג'ט עבור GET_EXERCISE_OBSERVATION

בשביל כוונות רבות, התגובה הטובה ביותר היא לתת תשובה פשוטה, אישור, או חוויה אינטראקטיבית מהירה למשתמש. אפשר להציג הווידג'ט של האפליקציה ל-Android ב-Google Assistant שיעזור לכם להשיג את סוגי הכוונות האלה.

במדריך הזה מוסבר איך למלא שאילתות של משתמשים ב-Assistant באמצעות ווידג'טים ואיך אפשר לשפר את חוויית הווידג'ט ב-Assistant באמצעות 'פעולות באפליקציה' ספריית התוספים לווידג'טים.

יתרונות

ווידג'טים הם תצוגות זעירות של אפליקציות שאפשר להטמיע ב-Android כמו מרכז האפליקציות או מסך הנעילה. בעזרת 'פעולות באפליקציה' אפשר להגדיל את ההשפעה של הווידג'טים שלכם אם הם עומדים בדרישות להצגה ב-Assistant:

  1. Discovery: הצגה יזומה של ווידג'טים בתגובה למשתמשים בשאילתות בשפה טבעית (NLP).
  2. מעורבות: הצגת ווידג'טים בהקשרים של הפעלה קולית, למשל כאשר Assistant מספקת תוצאות אישיות במסך הנעילה ובהפעלה Android Auto.
  3. שמירה: המשתמשים יכולים להצמיד את הווידג'טים שמוצגים Assistant במרכז האפליקציות. לפונקציונליות ההצמדה נדרשת ספריית התוספים לווידג'טים.

איך Assistant מציגה ווידג'טים

יש שתי דרכים שבהן משתמשים יכולים להפעיל ווידג'טים ב-Assistant:

הפעלה מפורשת

כדי להפעיל ווידג'טים באופן מפורש לכל אפליקציה מותקנת, המשתמשים יכולים לבקש מ-Assistant דברים כמו:

  • "Ok Google, show ExampleApp widget" (אני רוצה לראות את הווידג'ט של ExampleApp).
  • "ווידג'טים מ-ExampleApp"

Assistant מציגה את הווידג'טים האלה עם התיאור הגנרי: "ExampleApp אומר, הנה ווידג'ט." למרות ש-Assistant מחזירה במקור ווידג'טים שנדרשים עבורה באופן הזה, ללא צורך בעבודה נוספת על ידי מפתח האפליקציה, שיטת ההפעלה הזו דורש מהמשתמש ידע מפורש לגבי הווידג'ט כדי לבקש אותו. שפת תרגום לפשט את תהליך הגילוי של הווידג'טים, להשתמש בשיטה למילוי הכוונה, שמפורטת בקטע הבא.

מימוש Intent

הקל על מציאת הווידג'טים שלך על ידי שימוש בהם כדי למלא את שאילתות שפה שהמשתמשים מבצעים ב-Assistant. לדוגמה, אפשר להחזיר את בכל פעם שמשתמש מפעיל את ה-BII של GET_EXERCISE_OBSERVATION אפליקציית כושר גופני כששואלים "Hey Google, כמה קילומטרים רצתי השבוע ExampleApp? " בנוסף לפישוט הגילוי, שילוב ווידג'טים עם פעולות באפליקציה מספקות את היתרונות הבאים:

  • גישה לפרמטרים: Assistant מספקת את הפרמטרים של כוונת הרכישה שחולצו. משאילתת המשתמש לווידג'ט, מה שמאפשר תשובות מותאמות אישית.
  • הקדמות TTS בהתאמה אישית: אפשר ליצור מחרוזת של המרת טקסט לדיבור (TTS) כדי ש-Assistant תכריז כשהווידג'ט יוצג.
  • הצמדת ווידג'ט: ב-Assistant מוצג הלחצן הוספת הווידג'ט הזה ליד הווידג'ט, כדי לאפשר למשתמשים להצמיד בקלות את הווידג'טים למרכז האפליקציות שלהם.

הטמעת מילוי הזמנות בווידג'ט

כדי להטמיע מילוי ווידג'ט בשביל הכוונות שלכם, צריך לבצע את השלבים הבאים:

  1. כדי להטמיע ווידג'ט ל-Android, פועלים לפי השלבים שמתוארים בקטע יצירת ווידג'ט פשוט
  2. בקובץ המשאבים shortcuts.xml של האפליקציה, צריך להוסיף רכיב <app-widget> ביכולת להכיל פרטי מילוי הזמנה ותגי <parameter> BII. עדכון של כדי לטפל בפרמטרים.
  3. צריך להוסיף את ספריית התוספים לווידג'טים הנדרשת, שמאפשרת Assistant מעבירה שמות ופרמטרים של BII לווידג'טים. היא גם מאפשרת הקדמות TTS בהתאמה אישית והצמדת ווידג'ט החדשה.

בקטע הבא מתוארת הסכימה <app-widget> של shortcuts.xml.

סכימת הווידג'ט

רכיבי <app-widget> מוגדרים כמילוי הזמנות בתוך <capability> רכיבים ב-shortcuts.xml. הם דורשים את הדברים הבאים אלא אם צוין כאופציונלי:

התג 'shorts.xml'בתוךמאפיינים
<app-widget> <capability>
  • android:identifier
  • android:targetClass
<parameter> <app-widget>
<extra> <app-widget>
  • android:name (רלוונטי רק ל-TTS)
  • android:value (אופציונלי)

תיאור הסכימה של הווידג'ט

<app-widget>

רכיב מילוי הזמנות של ווידג'ט ברמה העליונה.

מאפיינים:

  • android:identifier: המזהה של מילוי ההזמנות. הערך הזה צריך להיות ייחודיים בכל מילוי ההזמנות של <app-widget> ו-<intent> שמוגדרים בתוך <capability>.
  • android:targetClass: השם המלא של המחלקה בAppWidgetProvider מתוך הכוונה.

<parameter>

מיפוי פרמטר BII לערך Intent <parameter>. אפשר להגדיר את הערך אפס פרמטרים נוספים לכל רכיב <app-widget>. בתהליך מילוי ההזמנה, Assistant מעבירה פרמטרים על ידי עדכון התוספות במופע של הווידג'ט בתור צמדי מפתח-ערך, בפורמט הבא:

  • מפתח: android:key שהוגדר לפרמטר.
  • ערך: הערך שה-BII שולף מהקלט הקולי של המשתמש.

כדי לגשת לתוספות האלה, עליך להתקשר אל getAppWidgetOptions() אובייקט AppWidgetManager, שמחזיר Bundle שמכיל את השם של ה-BII המפעיל והפרמטרים שלו. צפייה חילוץ ערכי פרמטרים לקבלת פרטים.

למידע נוסף על התאמה לפרמטרים של BII, ראו נתוני פרמטרים והתאמה.

<extra>

תג אופציונלי שמצהיר שהקדמה מותאמת אישית ל-TTS משמשת עבור לווידג'ט הזה. לתג הזה נדרשים ערכי המאפיינים הבאים:

  • android:name: "hasTts"
  • android:value: "true"

קוד לדוגמה

הדוגמה הבאה מקובץ shortcuts.xml ממחישה ווידג'ט הגדרת מילוי הזמנה יכולת BII של 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>

אפשר לציין כמה רכיבי <app-widget> או להשתמש בשילוב של רכיבים של <app-widget> ו-<intent> לכל יכולת. הגישה הזו מאפשרת לספק חוויה מותאמת אישית שמבוססת על שילובים שונים של פרמטרים שסופקו על ידי משתמשים. למשל, אם המשתמש לא מציין מיקום נשלף בשאילתה שלהם אפשר להפנות אותם לפעילות באפליקציה שמופיעה להגדרת מיקומי האיסוף וההורדה. לצפייה הקטע כוונות חלופי מכיל מידע נוסף על הגדרה של כוונות חלופיות.

חילוץ ערכי פרמטרים

במחלקה AppWidgetProvider לדוגמה הבאה, הפונקציה הפרטית updateAppWidget() משמש לחילוץ השם והפרמטרים של ה-BII אפשרויות הווידג'ט 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);
    }
}

ספריית התוספים לווידג'טים

ספריית התוספים לווידג'טים של פעולות באפליקציה משפרת את הווידג'טים להעביר הודעות קוליות בעזרת Assistant. הספרייה הזו מאפשרת לווידג'טים שלך לקבל מידע חשוב על מילוי הזמנות מה-BII שמפעיל, כולל ה-BII השם וכל הפרמטרים של Intent שנשלפו מהשאילתה של המשתמש.

ספריית Maven הזו מאפשרת לך לספק מבוא בהתאמה אישית של המרת טקסט לדיבור (TTS) עבור כל ווידג'ט, וכך Assistant תוכל להכריז על סיכום של התוכן יוצגו למשתמשים באופן חזותי. היא גם מאפשרת הצמדת מרכז אפליקציות, וכך למשתמשים יהיה קל לשמור את הווידג'טים שמוצגים ב-Assistant במרכז האפליקציות שלהם מסכים.

כדי להתחיל, צריך להוסיף את הספרייה לקטע של יחסי התלות קובץ build.gradle למודול האפליקציה:

dependencies {
    //...
    implementation "com.google.assistant.appactions:widgets:0.0.1"
}

גרסאות פתיחה בהתאמה אישית

אחרי שמייבאים את ספריית התוספים לווידג'טים, אפשר לספק טקסט טקסט מותאם אישית של הווידג'טים האלה. כדי להוסיף את ההגדרה שלך לווידג'ט AppWidgetProvider, פותחים את הכיתה בסביבת הפיתוח המשולבת (IDE) ומייבאים את תוסף הווידג'טים ספרייה:

Kotlin

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension

Java

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;
בשלב הבא השתמשו בספרייה כדי להגדיר את מחרוזות ההקדמה ולעדכן את כפי שמוצג בווידג'ט 'ExampleAppWidget':

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);
    }

}

המלצות לסגנון של TTS

אפשר להיעזר בהמלצות לסגנונות הבאות כדי לשפר את הווידג'ט המותאם אישית מבוא ל-TTS וההנחיות שמוצגות.

המלצה מומלץ: לא מומלץ
התכווצו
שימוש בכיווץ בהנחיות של טקסט TTS. הודעות ללא צליל כיווץ מאויש ורובוטי ולא טבעי ולא דיבורי. אומרים מילים כמו "לא יכול" ו"לא מומלץ" יכול להישמע מעניש וקשה.
ResponseSpeech (TTS)
מצטערת, לא הצלחתי למצוא הזמנה.

ResponseText
סליחה, לא הצלחתי למצוא הזמנה.
ResponseSpeech (TTS)
סליחה, לא הצלחתי למצוא הזמנה.

ResponseText
סליחה, לא הצלחתי למצוא הזמנה.
פסיק
משפרים את הבהירות באמצעות פסיקים סידוריים ברשימות של שלושה פריטים או יותר. בלי הפסיק הסידורי, פריטים בודדים ברשימה עשויים להיות שלא שמעתם נכון, או שנקראו כקבוצות. לדוגמה, ב"נרקיסים, חינניות וחמניות", "חרציות וחמניות" נשמעות כאילו הן חופפות. בקטע "נרקיסים, חינניות וחמניות", בין כל השלוש יש הפרדה ברורה.
ResponseSpeech (TTS)
הנושאים הפופולריים ביותר שלנו כוללים ורדים צהובים, נרקיסים, חינניות וחמניות.

ResponseText
הנושאים הפופולריים ביותר שלנו כוללים ורדים צהובים, נרקיסים, חינניות וחמניות.
ResponseSpeech (TTS)
הפעילויות הפופולריות ביותר שלנו כוללות ורדים צהובים, נרקיסים, חינניות וחמניות.

ResponseText
הפעילויות הפופולריות ביותר שלנו כוללות ורדים צהובים, נרקיסים, חינניות וחמניות.
ספרות
כדי שיהיה קל יותר להסתכל על התוכן החזותי, כדאי להשתמש בספרות במקום בטקסט.
ResponseSpeech (TTS)
לחץ הדם שלך הוא 100 מעל 80.

ResponseText
לחץ הדם שלך הוא 100/80.
ResponseSpeech (TTS)
לחץ הדם שלך הוא 100/80.

ResponseText
לחץ הדם שלך הוא מאה ושמונים.
סמלים
כדי לשפר את התוכן החזותי, כדאי להשתמש בסמלים מיוחדים במקום בטקסט במבט מהיר.
ResponseSpeech (TTS)
הרכישה האחרונה שלך הייתה בסך 24.65$.

ResponseText
הרכישה האחרונה שלך הייתה בסך 24.65$.
ResponseSpeech (TTS)
הרכישה האחרונה שלך הייתה בסך עשרים וארבעה דולרים ושישים וחמישה דולר.

ResponseText
הרכישה האחרונה שלך הייתה בסך עשרים וארבעה דולרים ושישים וחמישה דולר.
נמנעים מממתקים
מידות יפות גורמות לתשובות להרגיש מרוחקות ורשמיות. נוטשים אותן ושומרים ידידותית ולא רשמית.
ResponseSpeech (TTS)
ההזמנה שלך נמסרה.

ResponseText
ההזמנה שלך נמסרה.
ResponseSpeech (TTS)
בטח, אני יכול לומר לך. ההזמנה שלך נמסרה.

ResponseText
בטח, אני יכול לומר לך. ההזמנה שלך נמסרה.
הימנעות מסימני קריאה
אפשר להתייחס אליהם כאל צעקות.
ResponseSpeech (TTS)
רצת היום 2.5 מייל.

ResponseText
רצת היום 2.5 מייל.
ResponseSpeech (TTS)
רצת 2.5 מייל היום!

ResponseText
רצת 2.5 מייל היום!
שעה
השתמש בספרות: "5:15," במקום 'חמש וחמש עשרה' או "רבעון אחרי חמש". כדי לציין שעון של 12 שעות, יש להשתמש ב-AM או ב-PM.
ResponseSpeech (TTS)
המשלוח אמור להגיע עד 8:15.

ResponseText
המשלוח אמור להגיע עד 8:15.
ResponseSpeech (TTS)
המשלוח אמור להגיע היום תוך 15 דקות ו-8 בבוקר.

ResponseText
המשלוח אמור להגיע היום תוך 15 דקות ו-8 בבוקר.
אל תשתמשו במונולוגים
התשובה צריכה להיות אינפורמטיבית, אבל תמציתית. לא להיכנס לידיים כבדות פרטים ללא יתרון ברור למשתמש.
ResponseSpeech (TTS)
בחודש שעבר צרכת 159 שעות של אנרגיה.

ResponseText
בחודש שעבר צרכת 159 שעות של אנרגיה.
ResponseSpeech (TTS)
חיסכון באנרגיה חשוב מאוד לכדור הארץ ולסביבה. חודש שעבר צרכת 159 שעות של אנרגיה. בחודש הזה ניצלת 58 שעות אנרגיה.

ResponseText
חיסכון באנרגיה חשוב מאוד לכדור הארץ ולסביבה. חודש שעבר צרכת 159 שעות של אנרגיה. בחודש הזה ניצלת 58 שעות אנרגיה.
להשתמש במילים קצרות ופשוטות
שפה פשוטה ופשוטה היא המשיכה הכי גבוהה, ולכן היא נגישה אנשים מכל הרקעים.
ResponseSpeech (TTS)
ערך הסוכר האחרון שלך היה 126.

ResponseText
המדידה האחרונה של רמת הסוכר בדם הייתה 126 מ"ג ל-dL.
ResponseSpeech (TTS)
רמת הסוכר הלפניום בדם הייתה 126.

ResponseText
רמת הסוכר הלפניום בדם הייתה 126.

הצמדה של מרכז האפליקציות

ספריית התוספים לווידג'טים מאפשרת להציג את הלחצן הוספת הווידג'ט הזה באמצעות הווידג'ט ב-Assistant. כדי להפעיל את ההצמדה, צריך להוסיף את המקלט הבא ההגדרה של 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>

זמינות של מלאי שטחי פרסום

ספקי BI שתומכים במלאי מוטבע או במלאי באינטרנט יכולים להרחיב את בין מלאי שטחי הפרסום לאספקה בווידג'טים.

מלאי מוטבע

הקוד הבא מקובץ shortcuts.xml לדוגמה מדגים יכולת BII של START_EXERCISE מוגדר למילוי הזמנות של מלאי שטחי פרסום ולמילוי ווידג'טים:

<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>

בדוגמה הקודמת, כשמשתמש מפעיל את היכולת הזו על ידי בקשה Assistant, "Start running with ExampleApp", חבילת האפשרויות של מילוי ההזמנות של <app-widget> מכיל את צמד המפתח/ערך הבא:

  • מפתח = “exerciseName”
  • ערך = “RunningShortcut”

מלאי באינטרנט

הקוד הבא מקובץ shortcuts.xml לדוגמה מציג יכולת מופעל למלאי באינטרנט ולמילוי ווידג'טים:

<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>

בדיקת פעולות באפליקציה

צריך להשתמש ב-App Actions Test Tool, תכונה בפלאגין של Google Assistant לצורך Android Studio, כדי לבדוק ווידג'טים במכשיר פיזי או וירטואלי. כדי להשתמש ב- בכלי הבדיקה, בצעו את השלבים הבאים:

  1. מחברים את מכשיר הבדיקה לאפליקציה שפועלת.
  2. ב-Android Studio, עוברים אל כלים > פעולות באפליקציה > בדיקת פעולות באפליקציה כלי.
  3. לוחצים על יצירת תצוגה מקדימה.
  4. באמצעות Android Studio, מפעילים את האפליקציה במכשיר הבדיקה.
  5. צריך להשתמש באפליקציית Assistant במכשיר הבדיקה כדי לבדוק את הפעולה באפליקציה. עבור לדוגמה, אפשר לומר משהו כמו "Ok Google, How many kilometers have I run? השבוע ב-ExampleApp?"
  6. חשוב לבדוק את התנהגות האפליקציה או להשתמש בכלי לניפוי באגים ב-Android Studio כדי מאמתים את התוצאה של הפעולה הרצויה.

הנחיות איכות

בסעיף הזה נדגיש את הדרישות העיקריות והשיטות המומלצות, לשלב 'פעולות באפליקציה' עם ווידג'טים.

תוכן בווידג'טים

  • (חובה) לא להציג מודעות בווידג'טים.
  • למקד לגמרי את תוכן הווידג'ט למימוש הכוונה. לא מומלץ לנסות למלא כוונות מרובות באמצעות ווידג'ט אחד, או להוסיף תוכן לא רלוונטי.

טיפול באימות

  • (חובה) כשנדרש אימות משתמש כדי להשלים תהליך של משתמש, להחזיר ווידג'ט שמסביר שהמשתמש צריך להמשיך באפליקציה. באפליקציה אין תמיכה באימות משתמש מוטבע ב-Google Assistant פעולות.
  • אם המשתמשים מתירים לאפליקציה להציג נתונים באמצעות ווידג'טים, אפשר להחזיר ווידג'ט שגיאה בזמן הריצה למשתמשים לא מורשים.

כוונות חלופיות

  • (חובה) בshortcuts.xml, תמיד צריך לספק חלופה <intent> בנוסף למילוי ההזמנות של הווידג'ט היכולת הנתונה. Intent חלופי הוא רכיב <intent> ללא צורך <parameter> ערכים.

    כך Assistant תוכל לבצע פעולה אם שאילתת המשתמש לא מכילה פרמטרים שנדרשים על ידי מילוי הבקשה האחר שמוגדרים ביכולת. היוצא מן הכלל הוא כאשר אין את הפרמטרים הנדרשים ליכולת הזו. במקרה כזה, רק הווידג'ט נדרש מילוי הזמנה.

  • משתמשים ב-Intent החלופי כדי לפתוח את האפליקציה במסך הרלוונטי, לא למסך הבית.

הקוד הבא מקובץ shortcuts.xml לדוגמה מדגים <capability> עם חלופה <intent> שתומכת בשדה ראשי מילוי הזמנה של <app-widget>:

<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>

גילוי נאות לגבי נתונים ב-Google Play

בקטע הזה מפורטים הנתונים של משתמשי הקצה שנאספו באמצעות הגרסה האחרונה של ספריית התוספים לווידג'טים.

ערכת ה-SDK הזו שולחת תגובות טקסט לדיבור (TTS) שסופקו על ידי המפתח שהוכרז למשתמש על ידי Google Assistant באמצעות הדיבור של Assistant טכנולוגית. המידע הזה לא מאוחסן על ידי Google.

אפשר גם לבצע פעולות באפליקציה איסוף מטא-נתונים של אפליקציית לקוח למטרות הבאות:

  • כדי לעקוב אחר שיעורי ההטמעה של גרסאות SDK שונות.
  • כדי לכמת את השימוש בתכונות ה-SDK באפליקציות שונות.