ผสานรวมการดำเนินการของแอปกับวิดเจ็ต Android

วันที่
รูปที่ 1 กำลังเปิดวิดเจ็ตสำหรับ GET_EXERCISE_OBSERVATION

สำหรับหลายๆ ความตั้งใจ คำตอบที่ดีที่สุดคือให้คำตอบง่ายๆ ที่สรุปสั้นๆ การยืนยัน หรือประสบการณ์แบบอินเทอร์แอกทีฟสั้นๆ ให้แก่ผู้ใช้ คุณสามารถแสดง วิดเจ็ตแอป Android ใน Google Assistant เพื่อดำเนินการ Intent เหล่านี้

คู่มือนี้ครอบคลุมวิธีตอบคำถามของผู้ใช้ Assistant โดยใช้วิดเจ็ตและวิธีการ ปรับปรุงประสบการณ์การใช้งานวิดเจ็ตสำหรับ Assistant ด้วยการดำเนินการของแอป ไลบรารีส่วนขยายของวิดเจ็ต

ข้อดี

วิดเจ็ตคือมุมมองแอปพลิเคชันขนาดเล็กที่สามารถฝังใน Android เช่น Launcher หรือหน้าจอล็อก จำนวนการดำเนินการของแอปจะช่วยเพิ่ม ผลกระทบของวิดเจ็ตด้วยการทำให้วิดเจ็ตมีสิทธิ์แสดงใน Assistant ดังนี้

  1. การค้นพบ: แสดงวิดเจ็ตในเชิงรุกเพื่อตอบสนองต่อผู้ใช้ คำค้นหาที่เป็นภาษาธรรมชาติ
  2. การมีส่วนร่วม: แสดงวิดเจ็ตในบริบทโดยไม่ต้องสัมผัส เช่น Assistant จะแสดงผลการค้นหาเฉพาะบุคคลในหน้าจอล็อกและใน Android Auto
  3. การเก็บรักษา: อนุญาตให้ผู้ใช้ปักหมุดวิดเจ็ตที่แสดงใน Assistant ไปยัง Launcher ฟังก์ชันการปักหมุดต้องใช้ ไลบรารีส่วนขยายของวิดเจ็ต

วิธีที่ Assistant แสดงวิดเจ็ต

ผู้ใช้จะเรียกใช้วิดเจ็ตใน Assistant ได้ 2 วิธีดังนี้

การเรียกใช้ที่ชัดเจน

หากต้องการเรียกใช้วิดเจ็ตสำหรับแอปที่ติดตั้งแล้วอย่างชัดเจน ผู้ใช้สามารถถาม Assistant เช่น

  • "Ok Google แสดงวิดเจ็ต ExampleApp"
  • "วิดเจ็ตจาก ExampleApp"

Assistant แสดงวิดเจ็ตเหล่านี้พร้อมกับการแนะนำทั่วไป: "ExampleApp บอกว่า นี่วิดเจ็ต" ขณะที่ Assistant แสดงวิดเจ็ตที่ขอเข้ามาโดยอัตโนมัติ ในลักษณะนี้โดยที่นักพัฒนาแอปไม่ต้องดําเนินการใดๆ วิธีการเรียกใช้นี้ ผู้ใช้ต้องมีความรู้ที่ชัดเจนเกี่ยวกับวิดเจ็ตจึงจะขอวิดเจ็ตได้ ถึง ทำให้การค้นหาวิดเจ็ตง่ายขึ้น ให้ใช้วิธีการดำเนินการตาม Intent ที่ให้รายละเอียดไว้ใน ต่อไปนี้

การดำเนินการตาม Intent

ทำให้วิดเจ็ตของคุณหาได้ง่ายขึ้นโดยใช้วิดเจ็ตเหล่านั้นเพื่อเติมเต็มความเป็นธรรมชาติ คำค้นหาภาษาที่ผู้ใช้ค้นหาใน Assistant ตัวอย่างเช่น คุณสามารถส่งคืน เมื่อใดก็ตามที่ผู้ใช้เรียกใช้ GET_EXERCISE_OBSERVATION BII ใน แอปฟิตเนสโดยถามว่า "Ok Google ฉันวิ่งไปแล้วกี่กิโลเมตรในสัปดาห์นี้ ExampleApp ใช่ไหม" นอกจากทำให้การค้นหาง่ายขึ้นแล้ว การผสานรวมวิดเจ็ตเข้ากับ การดำเนินการของแอปมีข้อดีดังนี้

  • การเข้าถึงพารามิเตอร์: Assistant จะแสดงพารามิเตอร์ความตั้งใจที่ดึงข้อมูลมา จากคำค้นหาของผู้ใช้ไปยังวิดเจ็ต คำตอบที่ปรับแต่งให้เหมาะสม
  • ข้อมูลเบื้องต้นเกี่ยวกับ TTS ที่กำหนดเอง: คุณระบุสตริงการอ่านออกเสียงข้อความ (TTS) ได้ เพื่อให้ Assistant ประกาศเมื่อแสดงวิดเจ็ต
  • การปักหมุดวิดเจ็ต: Assistant จะแสดงปุ่มเพิ่มวิดเจ็ตนี้ใกล้กับ วิดเจ็ตของคุณ เพื่อช่วยให้ผู้ใช้ปักหมุดวิดเจ็ตไว้ที่ Launcher ของตนได้อย่างง่ายดาย

ใช้ Fulfillment วิดเจ็ต

ทำตามขั้นตอนต่อไปนี้เพื่อใช้การดำเนินการให้สมบูรณ์วิดเจ็ตสำหรับ Intent ของคุณ

  1. ใช้งานวิดเจ็ต Android โดยทำตามขั้นตอนที่อธิบายไว้ใน สร้างวิดเจ็ตที่ใช้งานง่าย
  2. ในไฟล์ทรัพยากร shortcuts.xml ของแอป ให้เพิ่ม <app-widget> เอลิเมนต์ไปยังความสามารถของคุณที่มี รายละเอียดการดำเนินการตามคำสั่งซื้อและแท็ก BII <parameter> อัปเดต จัดการพารามิเตอร์
  3. เพิ่มไลบรารีส่วนขยายของวิดเจ็ตที่จำเป็น ซึ่งทำให้ Assistant จะส่งชื่อและพารามิเตอร์ BII ไปยังวิดเจ็ตของคุณ และยังทำให้ บทแนะนำ TTS ที่กำหนดเอง และ การปักหมุด วิดเจ็ต

ส่วนต่อไปนี้จะอธิบายสคีมา <app-widget> สำหรับ shortcuts.xml

สคีมาของวิดเจ็ต

องค์ประกอบ <app-widget> ได้รับการกำหนดเป็นการดำเนินการภายใน องค์ประกอบ <capability> ใน shortcuts.xml โดยจำเป็นต้องมีสิ่งต่อไปนี้ เว้นแต่จะระบุว่าไม่บังคับ

แท็ก "shortcuts.xml"มีในแอตทริบิวต์
<app-widget> <capability>
  • android:identifier
  • android:targetClass
<parameter> <app-widget>
<extra> <app-widget>
  • android:name (ใช้ได้กับ TTS เท่านั้น)
  • android:value (ไม่บังคับ)

คำอธิบายสคีมาของวิดเจ็ต

<วิดเจ็ตแอป>

องค์ประกอบการดำเนินการตามคำสั่งซื้อวิดเจ็ตระดับบนสุด

แอตทริบิวต์:

  • android:identifier: ตัวระบุสำหรับการจำหน่ายนี้ ค่านี้ต้อง ไม่ซ้ำกันใน Fulfillment <app-widget> และ <intent> ที่กำหนดภายใน <capability>
  • android:targetClass: ชื่อเต็มของชั้นเรียนของ AppWidgetProvider เพื่อ จัดการความตั้งใจ

<พารามิเตอร์>

แมปพารามิเตอร์ BII กับค่า Intent <parameter> คุณสามารถกำหนดเลข 0 หรือ พารามิเตอร์เพิ่มเติมสำหรับองค์ประกอบ <app-widget> แต่ละรายการ ระหว่างการดำเนินการตามคำสั่งซื้อ Assistant ส่งพารามิเตอร์โดยการอัปเดตเพิ่มเติมสำหรับอินสแตนซ์วิดเจ็ตเป็นคู่คีย์-ค่า โดยใช้รูปแบบต่อไปนี้

  • คีย์: android:key ที่กำหนดไว้สำหรับพารามิเตอร์
  • ค่า: ค่าที่ BII ดึงมาจากการป้อนข้อมูลด้วยเสียงของผู้ใช้

คุณเข้าถึงบริการเพิ่มเติมเหล่านี้ได้โดยโทรไปที่ getAppWidgetOptions() บนเครือข่ายที่เกี่ยวข้อง AppWidgetManager ซึ่งแสดงผล Bundle ที่มีชื่อของ ทริกเกอร์ BII และพารามิเตอร์ โปรดดู ดึงค่าพารามิเตอร์เพื่อดูรายละเอียด

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจับคู่พารามิเตอร์ BII โปรดดู ข้อมูลและการจับคู่พารามิเตอร์

<เพิ่มเติม>

แท็กที่ไม่บังคับเพื่อประกาศว่ามีการใช้การแนะนำ TTS ที่กำหนดเองสำหรับ วิดเจ็ตนี้ แท็กนี้ต้องมีค่าแอตทริบิวต์ต่อไปนี้

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

โค้ดตัวอย่าง

ตัวอย่างต่อไปนี้จากไฟล์ shortcuts.xml สาธิตการใช้วิดเจ็ต การกำหนดค่าการดำเนินการตามคำสั่งซื้อสำหรับ ความสามารถ GET_EXERCISE_OBSERVATION BII:

<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> องค์ประกอบต่อความสามารถ วิธีนี้จะช่วยให้คุณ ให้ประสบการณ์ที่กำหนดเองตามชุดค่าผสมที่แตกต่างกันของพารามิเตอร์ ที่ผู้ใช้ให้ไว้ เช่น หากผู้ใช้ไม่ได้ระบุสถานที่ส่ง ในการค้นหาของผู้ใช้ คุณสามารถนำลูกค้าไปยังกิจกรรมในแอปของคุณที่แสดง ตัวเลือกสำหรับการตั้งค่าสถานที่รับและส่ง โปรดดู ส่วน Intent สำรองสำหรับข้อมูลเพิ่มเติม เกี่ยวกับการกำหนด 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);
    }
}

ไลบรารีส่วนขยายของวิดเจ็ต

ไลบรารีส่วนขยายวิดเจ็ตของ App Actions ช่วยปรับปรุงวิดเจ็ตสำหรับ ประสบการณ์การใช้งาน Assistant ด้วยเสียง ไลบรารีนี้ทำให้วิดเจ็ตของคุณได้รับ ข้อมูลการดำเนินการตามคำสั่งซื้อที่สำคัญจากการเรียก BII ซึ่งรวมถึง BII ชื่อและพารามิเตอร์ Intent ที่ดึงมาจากคำค้นหาของผู้ใช้

ไลบรารี Maven นี้ให้คุณแนะนำการอ่านออกเสียงข้อความ (TTS) ที่กำหนดเอง สำหรับแต่ละวิดเจ็ต เพื่อให้ Assistant ประกาศสรุปเนื้อหาที่กำลัง แสดงผลให้ผู้ใช้เห็น และยังเปิดใช้งานการตรึง Launcher ด้วย ซึ่งทำให้ ผู้ใช้บันทึกวิดเจ็ตที่แสดงใน Assistant ไปยัง Launcher ได้อย่างง่ายดาย หน้าจอ

เริ่มต้นใช้งานโดยการเพิ่มไลบรารีลงในส่วนทรัพยากร Dependency ของ build.gradle ไฟล์สำหรับโมดูลแอป

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

การแนะนำที่กำหนดเอง

หลังจากนำเข้าไลบรารีส่วนขยายของวิดเจ็ตแล้ว คุณจะระบุ TTS ที่กำหนดเองได้ คำแนะนำสำหรับ Widget ของคุณ หากต้องการเพิ่มคำจำกัดความของคุณลงใน AppWidgetProvider เปิดชั้นเรียนใน IDE แล้วนำเข้าส่วนขยาย Widgets คลัง:

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
ขอโทษค่ะ ไม่เจอการจอง
คอมมา
เพิ่มความชัดเจนโดยใช้เครื่องหมายคอมมาแบบต่อเนื่องในรายการ 3 รายการขึ้นไป หากไม่มีคอมมาแบบอนุกรม แต่ละรายการในลิสต์อาจ ได้ยินไม่ถูกต้องหรืออ่านเป็นกลุ่ม เช่น ใน "ดอกแดฟโฟดิล ดอกเดซี่ และดอกทานตะวัน" "ดอกเดซี่กับดอกทานตะวัน" จะเหมือนอยู่ด้วยกัน ใน "ดอกแดฟโฟดิล ดอกเดซี่ และดอกทานตะวัน" ทั้ง 3 อย่างนี้แยกจากกันอย่างชัดเจน
ResponseSpeech (TTS)
ดอกไม้ที่ได้รับความนิยมมากที่สุดของเรา ได้แก่ กุหลาบสีเหลือง ดอกแดฟโฟดิล เดซี่ และดอกทานตะวัน

ResponseText
ดอกไม้ที่ได้รับความนิยมมากที่สุดของเรา ได้แก่ กุหลาบสีเหลือง ดอกแดฟโฟดิล เดซี่ และดอกทานตะวัน
ResponseSpeech (TTS)
ดอกไม้ที่ได้รับความนิยมมากที่สุดของเรา ได้แก่ กุหลาบสีเหลือง ดอกแดฟโฟดิล เดซี่ และดอกทานตะวัน

ResponseText
ดอกไม้ที่ได้รับความนิยมมากที่สุดของเรา ได้แก่ กุหลาบสีเหลือง ดอกแดฟโฟดิล เดซี่ และดอกทานตะวัน
ตัวเลข
ใช้ตัวเลขแทนข้อความเพื่อให้เนื้อหาภาพอ่านได้ง่ายขึ้น
ResponseSpeech (TTS)
ความดันโลหิตของคุณอยู่ที่ 100 มากกว่า 80

ResponseText
ความดันโลหิตของคุณอยู่ที่ 100/80
ResponseSpeech (TTS)
ความดันโลหิตของคุณอยู่ที่ 100/80

ResponseText
ความดันโลหิตของคุณอยู่ที่ 180 กว่า
สัญลักษณ์
ใช้สัญลักษณ์พิเศษแทนข้อความเพื่อทำให้เนื้อหาที่เป็นภาพมากขึ้น อ่านง่าย
ResponseSpeech (TTS)
การซื้อครั้งล่าสุดราคา $24.65

ResponseText
การซื้อครั้งล่าสุดราคา $24.65
ResponseSpeech (TTS)
การซื้อครั้งล่าสุดของคุณคือ 24 ดอลลาร์และ 65 เซ็นต์

ResponseText
การซื้อครั้งล่าสุดของคุณคือ 24 ดอลลาร์และ 65 เซ็นต์
หลีกเลี่ยงสิ่งที่จะเกิดขึ้น
ความสุภาพทำให้คำตอบดูห่างไกลและเป็นทางการ ทิ้งพวกนั้นทิ้งและเก็บ การสนทนาเป็นมิตรและไม่เป็นทางการ
ResponseSpeech (TTS)
นำส่งคำสั่งซื้อของคุณแล้ว

ResponseText
นำส่งคำสั่งซื้อของคุณแล้ว
ResponseSpeech (TTS)
ได้เลย นำส่งคำสั่งซื้อของคุณแล้ว

ResponseText
ได้เลย นำส่งคำสั่งซื้อของคุณแล้ว
หลีกเลี่ยงเครื่องหมายอัศเจรีย์
โดยจะเห็นได้ว่าเป็นการตะโกน
ResponseSpeech (TTS)
วันนี้คุณวิ่ง 1.5 ไมล์

ResponseText
วันนี้คุณวิ่ง 1.5 ไมล์
ResponseSpeech (TTS)
วันนี้คุณวิ่ง 1.5 ไมล์!

ResponseText
วันนี้คุณวิ่ง 1.5 ไมล์!
เวลา
ใช้ตัวเลข "5:15" แทนที่จะเป็น "5-15" หรือ "ไตรมาสหลังจากห้า" สำหรับนาฬิกาแบบ 12 ชั่วโมง ให้ใช้ AM หรือ PM
ResponseSpeech (TTS)
สินค้าของคุณควรมาถึงภายในเวลา 8:15 น.

ResponseText
สินค้าน่าจะถึงมือคุณภายใน 8:15 น.
ResponseSpeech (TTS)
การจัดส่งของคุณควรมาถึงภายใน 15 นาทีหลัง 8:00 น. ของวันนี้

ResponseText
การจัดส่งของคุณควรมาถึงภายใน 15 นาทีหลัง 8:00 น. ของวันนี้
อย่าเปิดตัวด้วยการพูดคนเดียว
เขียนข้อมูลให้กระชับ แต่ใช้คำตอบที่สั้นกระชับ อย่าเล่นคนมือหนัก รายละเอียดโดยไม่มีผลประโยชน์ของผู้ใช้ที่ชัดเจน
ResponseSpeech (TTS)
เดือนที่แล้วคุณใช้พลังงานไป 159 ชั่วโมง

ResponseText
เดือนที่แล้วคุณใช้พลังงานไป 159 ชั่วโมง
ResponseSpeech (TTS)
การประหยัดพลังงานมีความสำคัญอย่างยิ่งต่อโลกและสิ่งแวดล้อม เดือนที่แล้ว คุณใช้พลังงานไป 159 ชั่วโมง เดือนนี้คุณใช้เวลาไป 58 ชั่วโมง พลังงาน

ResponseText
การประหยัดพลังงานมีความสำคัญอย่างยิ่งต่อโลกและสิ่งแวดล้อม เดือนที่แล้ว คุณใช้พลังงานไป 159 ชั่วโมง เดือนนี้คุณใช้เวลาไป 58 ชั่วโมง พลังงาน
ใช้คำสั้นๆ และเข้าใจง่าย
ภาษาง่ายๆ และดึงดูดผู้ชมได้ในวงกว้างที่สุด ทำให้สามารถเข้าถึง ผู้คนทุกภูมิหลัง
ResponseSpeech (TTS)
ค่าน้ำตาลในเลือดของคุณครั้งล่าสุดคือ 126

ResponseText
ค่าน้ำตาลในเลือดที่อ่านได้ครั้งล่าสุดคือ 126 มก./เดซิลิตร
ResponseSpeech (TTS)
ระดับน้ำตาลกลูโคสในเลือดก่อนสุดท้ายคือ 126

ResponseText
ระดับน้ำตาลกลูโคสในเลือดก่อนสุดท้ายคือ 126

การปักหมุด Launcher

ไลบรารีส่วนขยายของวิดเจ็ตจะแสดงปุ่มเพิ่มวิดเจ็ตนี้ ด้วยวิดเจ็ตของคุณใน 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 ตัวอย่างแสดง ความสามารถ START_EXERCISE BII กำหนดค่าสำหรับพื้นที่โฆษณาในบรรทัดและ Fulfillment วิดเจ็ต

<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" คือชุดตัวเลือกสำหรับ Fulfillment <app-widget> มีคู่คีย์-ค่าต่อไปนี้

  • คีย์ = “exerciseName”
  • ค่า = “RunningShortcut”

พื้นที่โฆษณาในเว็บ

โค้ดต่อไปนี้จากไฟล์ shortcuts.xml ตัวอย่างแสดงความสามารถ เปิดใช้สำหรับพื้นที่โฆษณาเว็บและ Fulfillment วิดเจ็ต:

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

ทดสอบการดำเนินการของแอป

ใช้เครื่องมือทดสอบการดำเนินการของแอป ซึ่งเป็นฟีเจอร์ของปลั๊กอิน Google Assistant สำหรับ Android Studio เพื่อทดสอบวิดเจ็ตบนอุปกรณ์จริงหรืออุปกรณ์เสมือน หากต้องการใช้งาน เครื่องมือทดสอบ ให้ทำตามขั้นตอนต่อไปนี้

  1. เชื่อมต่ออุปกรณ์ทดสอบกับที่แอปทำงานอยู่
  2. ใน Android Studio ไปที่เครื่องมือ > การดำเนินการของแอป > การทดสอบการดำเนินการของแอป เครื่องมือ
  3. คลิกสร้างตัวอย่าง
  4. ใช้ Android Studio เพื่อเรียกใช้แอปในอุปกรณ์ทดสอบ
  5. ใช้แอป Assistant ในอุปกรณ์ทดสอบเพื่อทดสอบการดำเนินการของแอป สำหรับ เช่น พูดว่า "Ok Google ฉันวิ่งไปแล้วกี่กิโลเมตร ในสัปดาห์นี้บน ExampleApp ได้อย่างไรบ้าง"
  6. สังเกตลักษณะการทำงานของแอปหรือใช้โปรแกรมแก้ไขข้อบกพร่องของ Android Studio เพื่อ ยืนยันผลการดำเนินการที่ต้องการ

หลักเกณฑ์ด้านคุณภาพ

ส่วนนี้จะเน้นที่ข้อกำหนดหลักและแนวทางปฏิบัติแนะนำเมื่อ คุณผสานรวมการดำเนินการของแอปเข้ากับวิดเจ็ต

เนื้อหาในวิดเจ็ต

  • (จำเป็น) อย่าแสดงโฆษณาในวิดเจ็ต
  • เน้นเนื้อหาของวิดเจ็ตให้บรรลุความตั้งใจโดยสมบูรณ์ สิ่งที่ไม่ควรทำ พยายามเติมเต็มความตั้งใจหลายอย่างด้วยวิดเจ็ตเดียว หรือเพิ่มเนื้อหาที่ไม่เกี่ยวข้อง

จัดการการตรวจสอบสิทธิ์

  • (จำเป็น) ในกรณีที่ต้องมีการตรวจสอบสิทธิ์ผู้ใช้เพื่อให้โฟลว์ผู้ใช้เสร็จสมบูรณ์ แสดงวิดเจ็ตที่อธิบายว่าผู้ใช้ต้องดำเนินการต่อในแอป แอปไม่รองรับการตรวจสอบสิทธิ์ผู้ใช้ในบรรทัดใน Google Assistant การดำเนินการ
  • หากผู้ใช้อนุญาตให้แอปของคุณแสดงข้อมูลโดยใช้วิดเจ็ต คุณสามารถส่งคืน วิดเจ็ตแสดงข้อผิดพลาดขณะรันไทม์สำหรับผู้ใช้ที่ไม่ได้รับอนุญาต

Intent สำรอง

  • (ต้องระบุ) ใน shortcuts.xml ให้ระบุวิดีโอสำรองเสมอ <intent> นอกเหนือจากการจำหน่ายวิดเจ็ตสำหรับ ความสามารถที่กำหนดไว้ Intent สำรองเป็นองค์ประกอบ <intent> ที่ไม่มีความจําเป็น <parameter>

    การดําเนินการนี้จะช่วยให้ Assistant ดําเนินการให้เสร็จสิ้นได้ การค้นหาของผู้ใช้ไม่มีพารามิเตอร์ที่ Fulfillment อื่นต้องการ องค์ประกอบที่กำหนดในความสามารถนี้ มีข้อยกเว้นคือเมื่อไม่มี พารามิเตอร์ที่จำเป็นสำหรับความสามารถนั้นๆ ซึ่งในกรณีนี้มีเพียงวิดเจ็ต จำเป็นต้องมีการดำเนินการตามคำสั่งซื้อ

  • ใช้ 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 ในแอปต่างๆ