Zintegruj akcje w aplikacji z widżetami na Androida

Rysunek 1. Uruchamiam widżet dla: GET_EXERCISE_OBSERVATION

W przypadku wielu intencji najlepsza odpowiedź to prosta, zwięzła odpowiedź, lub szybki, interaktywny interfejs. Możesz w niej wyświetlać widżet aplikacji na Androida w Asystencie Google do realizacji tego typu intencji.

Z tego przewodnika dowiesz się, jak odpowiadać na pytania użytkowników Asystenta za pomocą widżetów oraz jak ulepszyć działanie widżetów Asystenta dzięki akcjom w aplikacji Biblioteka rozszerzeń widżetów.

Zalety

Widżety to miniaturowe widoki aplikacji, które można umieszczać na urządzeniach z Androidem. takich jak Menu z aplikacjami czy ekran blokady. Dzięki akcjom w aplikacji wpływ widżetów, umożliwiając ich wyświetlanie w Asystencie:

  1. Wykrywalność: proaktywnie wyświetlaj widżety w odpowiedzi na żądania użytkowników zapytań w języku naturalnym.
  2. Zaangażowanie: wyświetlaj widżety bez użycia rąk, na przykład podczas wyświetlania Asystent podaje Twoje wyniki na ekranie blokady i gdy jest włączony Android Auto
  3. Utrzymanie: zezwalaj użytkownikom na przypinanie widżetów wyświetlanych w Asystenta do programu uruchamiającego. Funkcja przypinania wymaga: Biblioteka rozszerzeń widżetów.

Jak Asystent wyświetla widżety

Użytkownicy mogą wywoływać widżety w Asystencie na 2 sposoby:

  • Bezpośrednie żądanie widżetu według nazwy.
  • Wypowiedzenie do Asystenta zapytania, które aktywuje intencje wbudowane (BII) lub intencje niestandardowe skonfigurowane dla na potrzeby realizacji widżetu.

Jednoznaczne wywołanie

Aby jawnie wywołać widżety dla dowolnej zainstalowanej aplikacji, użytkownicy mogą poprosić Asystenta na przykład:

  • „OK Google, pokaż widżet PrzykładowaAplikacja”.
  • „Widżety z aplikacji ExampleApp”.

Asystent wyświetla te widżety wraz z ogólnym wprowadzeniem: „PrzykładowaAplikacja oto widżet”. Asystent natywnie zwraca widżety żądane w w ten sposób bez konieczności wykonywania przez dewelopera aplikacji żadnych działań, ta metoda wywołania wymaga od użytkownika wyraźnej wiedzy na temat widżetu, aby można było go wysłać. Do uprość wykrywanie widżetów, użyj metody realizacji intencji omówionej w w następnej sekcji.

Realizacja intencji

Ułatw znalezienie widżetów, używając ich do zapytań, których język użytkownik używa w Asystencie. Możesz na przykład zwrócić zapytanie za każdym razem, gdy użytkownik wywoła GET_EXERCISE_OBSERVATION BII w Twoim do fitnessu, pytając: „OK Google, ile mil udało mi się przebiec w tym tygodniu PrzykładowaAplikacja? Poza uproszczeniem odkrywania treści integrujemy widżety z Akcje w aplikacji oferują te zalety:

  • Dostęp do parametrów: Asystent udostępnia wyodrębnione parametry intencji. z zapytania użytkownika do widżetu, dostosowanych odpowiedzi.
  • Niestandardowe wprowadzenie do zamiany tekstu na mowę: możesz dodać ciąg tekstowy do zamiany tekstu na mowę. aby Asystent informował o tym podczas wyświetlania widżetu.
  • Przypinanie widżetu: Asystent wyświetla przycisk Dodaj ten widżet obok widżet, dzięki czemu użytkownicy mogą je łatwo przypiąć do programu uruchamiającego.
.

Wdrażanie realizacji widżetów

Aby wdrożyć realizację widżetów na potrzeby intencji, wykonaj te czynności:

  1. Zaimplementuj widżet na Androida, wykonując czynności opisane w Utwórz prosty widżet.
  2. W pliku zasobów shortcuts.xml aplikacji dodaj komponent <app-widget> do możliwości zawierających szczegóły realizacji i tagi BII <parameter>. Zaktualizuj widżet do obsługi parametrów.
  3. Dodaj wymaganą bibliotekę rozszerzeń widżetów, która umożliwia Asystent przekazuje do widżetów nazwy i parametry BII. Umożliwia też wprowadzenie niestandardowych funkcji zamiany tekstu na mowę i przypinanie widżetów funkcji.

W poniższej sekcji opisano schemat <app-widget> dla shortcuts.xml.

Schemat widżetu

Elementy <app-widget> są zdefiniowane jako zrealizowane w obrębie kategorii elementy <capability> w elemencie shortcuts.xml. Wymagają: atrybutów, chyba że oznaczono je jako opcjonalne:

Tag „shortcuts.xml”Zawarte wAtrybuty
<app-widget> <capability>
  • android:identifier
  • android:targetClass
<parameter> <app-widget>
<extra> <app-widget>
  • android:name (tylko w przypadku TTS)
  • android:value (opcjonalnie)

Opis schematu widżetu

<widżet-aplikacji>

Element realizacji widżetu najwyższego poziomu.

Atrybuty:

  • android:identifier: identyfikator realizacji. Ta wartość musi musi być niepowtarzalna w całej realizacji <app-widget> i <intent> elementów zdefiniowanych w obrębie <capability>.
  • android:targetClass: pełna nazwa zajęć związanych z zajęciami AppWidgetProvider na do obsługi intencji.

<parametr>

Mapuje parametr BII na wartość intencji <parameter>. Możesz zdefiniować zero lub więcej parametrów dla każdego elementu <app-widget>. Podczas realizacji zamówienia Asystent przekazuje parametry, aktualizując dodatki instancji widżetu w postaci par klucz-wartość, w tym formacie:

  • Klucz: android:key zdefiniowany dla parametru.
  • Wartość: wartość, którą BII wyodrębnia z poleceń głosowych użytkownika.

Aby uzyskać dostęp do tych dodatkowych treści, zadzwoń pod numer getAppWidgetOptions() na powiązanym AppWidgetManager, który zwraca obiekt Bundle zawierający nazwę wyzwalający BII i jego parametry. Zobacz Wyodrębnij wartości parametrów, aby uzyskać szczegóły.

Więcej informacji o dopasowywaniu parametrów BII znajdziesz tutaj Dane i dopasowanie parametrów

<ekstra>

Opcjonalny tag deklarujący, że używane jest niestandardowe wprowadzenie do zamiany tekstu na mowę ten widżet. Ten tag wymaga następujących wartości atrybutów:

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

Kod demonstracyjny

Poniższy przykład z pliku shortcuts.xml przedstawia widżet dla konfiguracji realizacji zamówienia Zdolność 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>

Możesz określić wiele elementów <app-widget> lub użyć ich kombinacji <app-widget> i <intent> elementów na możliwość. Takie podejście pozwala zapewniają spersonalizowane wrażenia na podstawie różnych kombinacji parametrów; udostępniane przez użytkowników. Na przykład jeśli użytkownik nie wskaże lokalizacji wyjazdu w zapytaniu, możesz skierować tę osobę do aktywności w aplikacji, która pokazuje: ustawień miejsc odbioru i dostawy. Zobacz Intencje zastępcze. o definiowaniu intencji zastępczych.

Wyodrębnianie wartości parametrów

W poniższej przykładowej klasie AppWidgetProvider funkcja prywatna updateAppWidget() służy do wyodrębniania nazwy i parametrów BII z opcje widżetu 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);
    }
}

Biblioteka rozszerzeń widżetów

Biblioteka rozszerzeń widżetów akcji w aplikacji wzbogaca widżety komend głosowych w Asystencie. Ta biblioteka pozwala widżetom odbierać ważne informacje o realizacji z procesu BII, w tym BII nazwę użytkownika i parametry intencji wyodrębnione z zapytania.

W tej bibliotece Maven możesz utworzyć własne wprowadzenie do zamiany tekstu na mowę dla każdego widżetu i umożliwi Asystentowi wypowiadanie podsumowania treści wyświetlane użytkownikom. Umożliwia też przypinanie programu uruchamiającego. użytkownicy mogą łatwo zapisywać widżety wyświetlane w Asystencie w Menu z aplikacjami. ekrany.

Zacznij od dodania biblioteki do sekcji zależności build.gradle plik modułu aplikacji:

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

Niestandardowe wprowadzenia

Po zaimportowaniu biblioteki rozszerzeń widżetów możesz dodać niestandardową funkcję zamiany tekstu na mowę wprowadzenie do widżetów. Aby dodać definicję do widżetu AppWidgetProvider, otwórz zajęcia w swoim IDE i zaimportuj rozszerzenie Widgets biblioteka:

Kotlin

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

Java

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;
Następnie użyj biblioteki, aby zdefiniować ciągi wprowadzające i zaktualizować jak w tym `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);
    }

}

Rekomendacje dotyczące stylu TTS

Skorzystaj z poniższych zaleceń dotyczących stylu, aby zoptymalizować niestandardowy widżet. wprowadzenia do zamiany tekstu na mowę i wyświetlanych promptów.

Rekomendacja Zalecane: – niezalecane
Skurcze
Używanie skrótów w promptach zamiany tekstu na mowę. Wiadomości bez dźwięku przy skurczach ruchomy i robotowy, a nie naturalny i konwersacyjny. Wypowiadanie słów Na przykład „nie można” i „nie” może zabrzmieć karanie i surowe.
ResponseSpeech (TTS)
Nie mogę znaleźć rezerwacji.

ResponseText
Nie mogę znaleźć rezerwacji.
ResponseSpeech (TTS)
Nie mogę znaleźć rezerwacji.

ResponseText
Nie mogę znaleźć rezerwacji.
Przecinki
Aby zwiększyć przejrzystość, użyj przecinków szeregowych na listach zawierających co najmniej 3 elementy. Bez przecinka numer seryjny poszczególne pozycje na liście mogą być nieprawidłowo usłyszane lub są odczytywane jako grupy. Na przykład: „żonkile, stokrotki i słoneczniki”. „stoczki i słoneczniki” brzmią tak, jakby zbierały się razem. W przypadku słowa „żonkile, stokrotki i słoneczniki” są wyraźnie oddzielone.
ResponseSpeech (TTS)
Najpopularniejsze są żółte róże, żonkile, stokrotki i słoneczniki.

ResponseText
Najpopularniejsze są żółte róże, żonkile, stokrotki i słoneczniki.
ResponseSpeech (TTS)
Najpopularniejsze są żółte róże, żonkile, stokrotki i słoneczniki.

ResponseText
Najpopularniejsze są żółte róże, żonkile, stokrotki i słoneczniki.
Cyfry
Używaj cyfr, a nie tekstu, aby treści wizualne były bardziej czytelne.
ResponseSpeech (TTS)
Twoje ciśnienie wynosi 100 powyżej 80.

ResponseText
Twoje ciśnienie wynosi 100/80.
ResponseSpeech (TTS)
Twoje ciśnienie wynosi 100/80.

ResponseText
Twoje ciśnienie wynosi sto ponad osiemdziesiąt.
Symbole
Aby treści wizualne były bardziej atrakcyjne, używaj specjalnych symboli zamiast tekstu lub nie rzuca się w oczy.
ResponseSpeech (TTS)
Ostatni zakup kosztował 24,65 zł.

ResponseText
Ostatni zakup kosztował 24,65 zł.
ResponseSpeech (TTS)
Ostatni zakup kosztował 24 złote i 65 gr.

ResponseText
Ostatni zakup kosztował 24 złote i 65 gr.
Unikaj łakoci
Dzięki temu odpowiedzi mogą wydawać się oddalone i oficjalne. Porzuć je i zachowaj w przyjazny i nieformalny sposób.
ResponseSpeech (TTS)
Twoje zamówienie zostało dostarczone.

ResponseText
Twoje zamówienie zostało dostarczone.
ResponseSpeech (TTS)
Mogę Ci to powiedzieć. Twoje zamówienie zostało dostarczone.

ResponseText
Mogę Ci to powiedzieć. Twoje zamówienie zostało dostarczone.
Unikaj wykrzykników
Można je postrzegać jako krzyki.
ResponseSpeech (TTS)
Udało Ci się dziś przebiec 2,5 mili.

ResponseText
Udało Ci się dziś przebiec 2,5 mili.
ResponseSpeech (TTS)
Udało Ci się dziś przebiec 2,5 mili!

ResponseText
Udało Ci się dziś przebiec 2,5 mili!
Godzina
Użyj cyfr: „5:15”, zamiast „piętnaście piętnastu” albo „kwartał po piątej”. W przypadku zegara 12-godzinnego użyj AM lub PM.
ResponseSpeech (TTS)
Twoja dostawa powinna dotrzeć do 8:15.

ResponseText
Twoja przesyłka powinna dotrzeć do 8:15.
ResponseSpeech (TTS)
Dostawa powinna dotrzeć dzisiaj po 15 minutach po 8 rano.

ResponseText
Dostawa powinna dotrzeć dzisiaj po 15 minutach po 8 rano.
Nie włączaj się do monologów
Podaj informacje, ale odpowiedzi powinny być zwięzłe. Nie daj się wciągnąć w tętniące życiem osoby. szczegółów bez wyraźnej korzyści dla użytkownika.
ResponseSpeech (TTS)
W zeszłym miesiącu zużyto 159 godzin energii.

ResponseText
W zeszłym miesiącu zużyto 159 godzin energii.
ResponseSpeech (TTS)
Oszczędzanie energii jest bardzo ważne dla planety i środowiska. Zeszły miesiąc zostało zużyte 159 godzin energii. W tym miesiącu udało Ci się wykorzystać 58 godzin energii.

ResponseText
Oszczędzanie energii jest bardzo ważne dla planety i środowiska. Zeszły miesiąc zostało zużyte 159 godzin energii. W tym miesiącu udało Ci się wykorzystać 58 godzin energii.
Używaj krótkich, prostych słów
Zwykły język ma największą atrakcyjność, dzięki czemu jest przystępny ludzi z różnych środowisk.
ResponseSpeech (TTS)
Twój ostatni odczyt cukru we krwi to 126.

ResponseText
Ostatnie stężenie cukru we krwi to 126 mg/dl.
ResponseSpeech (TTS)
Poziom glukozy we krwi przedostatnim wynosił 126.

ResponseText
Poziom glukozy we krwi przedostatnim wynosił 126.

Przypinanie programu uruchamiającego

W bibliotece rozszerzeń widżetów można wyświetlać przycisk Dodaj ten widżet za pomocą widżetu w Asystencie. Aby włączyć przypinanie, dodaj ten odbiornik definicja na 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>

Dostępność zasobów reklamowych

BII obsługują wbudowane zasoby reklamowe lub internetowe zasoby reklamowe, zasobów reklamowych w realizacji Twoich widżetów.

Wbudowane zasoby reklamowe

Poniższy kod z przykładowego pliku shortcuts.xml przedstawia Możliwości START_EXERCISE BII skonfigurowana pod kątem realizacji wbudowanych zasobów reklamowych i widżetów:

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

W poprzednim przykładzie, gdy użytkownik aktywuje tę funkcję, prosząc o to Asystenta, „Zacznij biegać z przykładową aplikacją”, pakiet opcji dla operatora Realizacja <app-widget> zawiera tę parę klucz-wartość:

  • Klucz = “exerciseName”
  • Wartość = “RunningShortcut”

Zasoby reklamowe w internecie

Poniższy kod z przykładowego pliku shortcuts.xml pokazuje funkcję włączona na potrzeby realizacji zasobów reklamowych w internecie i widżetów:

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

Testuj działania w aplikacji

Użyj narzędzia App Actions Test Tool, które jest funkcją wtyczki Asystenta Google do Android Studio – umożliwia testowanie widżetów na urządzeniu fizycznym lub wirtualnym. Aby użyć funkcji w narzędziu testowym, wykonaj te czynności:

  1. Połącz urządzenie testowe z uruchomioną aplikacją.
  2. W Android Studio wybierz Narzędzia > Działania w aplikacji > Test działań w aplikacji .
  3. Kliknij Utwórz podgląd.
  4. Korzystając z Android Studio, uruchom aplikację na urządzeniu testowym.
  5. Aby przetestować działanie w aplikacji, użyj aplikacji Asystent na urządzeniu testowym. Dla: Możesz na przykład powiedzieć „OK Google, ile kilometrów udało mi się przebiec w tym tygodniu w aplikacji ExampleApp?”.
  6. Obserwuj działanie aplikacji lub użyj debugera Android Studio, aby: Sprawdź oczekiwane działanie.

Wytyczne dotyczące jakości

W tej sekcji omawiamy kluczowe wymagania i sprawdzone metody integrujesz akcje w aplikacji z widżetami.

Zawartość widżetów

  • (Wymagane) – nie wyświetlaj reklam w widżetach.
  • Całkowicie skoncentruj treść widżetu na spełnieniu intencji. Przeciwwskazania spróbuj zrealizować kilka intencji za pomocą jednego widżetu lub dodaj nieistotne treści.

Uwierzytelnienie

  • (Wymagane) Jeśli do zakończenia ścieżki użytkownika wymagane jest uwierzytelnianie, wyświetlają widżet z informacją, że użytkownik musi kontynuować aplikację. Wbudowane uwierzytelnianie użytkowników w Asystencie Google nie jest obsługiwane w przypadku aplikacji Działania.
  • Jeśli użytkownicy zezwalają aplikacji na wyświetlanie danych za pomocą widżetów, możesz zwrócić widżet błędu w trakcie działania dla nieautoryzowanych użytkowników.

Intencje zastępcze

  • (Wymagane) W tabeli shortcuts.xml zawsze podawaj wartość zastępczą <intent> oprócz realizacji widżetu dla danej możliwości. Intencja kreacji zastępczej to element <intent>, który nie jest wymagany. <parameter> wartości.

    Dzięki temu Asystent może wykonać działanie, zapytanie użytkownika nie zawiera parametrów wymaganych przez inną realizację elementów zdefiniowanych w możliwości. Wyjątkiem jest sytuacja, w której parametry wymagane dla tej funkcji, w którym to przypadku dostępny jest tylko widżet i niezbędna jest realizacja zamówień.

  • Użyj intencji zastępczej, aby otworzyć aplikację na odpowiednim ekranie, nie ekran główny.

Poniższy kod z przykładowego pliku shortcuts.xml przedstawia <capability> z wartością zastępczą <intent> obsługującą podstawową Realizacja zamówienia <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>

Ujawnianie danych w Google Play

Ta sekcja zawiera listę danych użytkowników zebranych przez najnowszą wersję Biblioteka rozszerzeń widżetów.

Ten pakiet SDK wysyła dostarczone przez dewelopera odpowiedzi zamiany tekstu na mowę, które są wypowiadane przez Asystenta Google za pomocą mowy Asystenta. technologii. Te informacje nie są przechowywane przez Google.

Działania w aplikacji mogą też zbierać metadane aplikacji klienckiej w tych celach:

  • monitorowanie wskaźników rozpowszechnienia różnych wersji pakietu SDK;
  • Aby mierzyć wykorzystanie funkcji pakietu SDK w aplikacjach.