Zintegruj akcje w aplikacji z widżetami na Androida

Rysunek 1. Uruchamiam widżet aplikacji GET_EXERCISE_OBSERVATION.

W wielu intencjach najlepszą odpowiedzią jest przekazanie użytkownikowi prostej odpowiedzi, krótkie potwierdzenie lub szybką, interaktywną reakcję. W celu realizacji tego rodzaju intencji możesz w Asystencie Google wyświetlać widżet aplikacji na Androida.

Z tego przewodnika dowiesz się, jak wypełniać zapytania użytkowników do Asystenta za pomocą widżetów, a także jak usprawnić działanie widżetu w Asystencie dzięki bibliotece rozszerzeń widżetów Działań w aplikacji.

Korzyści

Widżety to miniaturowe widoki aplikacji, które można umieścić na urządzeniach z Androidem, takich jak program uruchamiający czy ekran blokady. Dzięki akcji w aplikacji możesz zwiększyć skuteczność widżetów, umożliwiając ich wyświetlanie w Asystencie.

  1. Wykrywalność: aktywnie wyświetlaj widżety w odpowiedzi na zapytania użytkowników w języku naturalnym.
  2. Zaangażowanie: wyświetlaj widżety bez użycia rąk, np. gdy Asystent podaje Twoje wyniki na ekranie blokady lub na Androidzie Auto.
  3. Przechowywanie: możesz zezwolić użytkownikom na przypinanie widżetów wyświetlanych w Asystencie do programu uruchamiającego. Funkcja przypinania wymaga biblioteki rozszerzeń widżetów.

Jak Asystent wyświetla widżety

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

Jawne wywołanie

Aby wyraźnie wywoływać widżety dowolnej zainstalowanej aplikacji, użytkownicy mogą zapytać Asystenta na przykład:

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

Asystent wyświetla te widżety z ogólnym wprowadzeniem: „PrzykładowaAplikacja mówi, oto widżet”. Asystent natywnie zwraca widżety na żądanie w ten sposób – deweloper aplikacji nie musi wykonywać żadnych działań, ale ta metoda wywoływania wymaga od użytkownika wyraźnej wiedzy o widżetach, by można było zażądać tego widżetu. Aby uprościć wykrywanie widżetów, użyj metody realizacji intencji opisanej w następnej sekcji.

Realizacja intencji

Ułatw sobie znajdowanie widżetów, wykorzystując je do wypełniania zapytań w języku naturalnym, które użytkownicy wykonują w Asystencie. Możesz na przykład zwracać widżet za każdym razem, gdy użytkownik uruchomi GET_EXERCISE_OBSERVATION BII w Twojej aplikacji fitnessowej, pytając „OK Google, ile mil przejechaliśmy w tym tygodniu w przykładowej aplikacji?”. Poza uproszczeniem odkrywania widżetów integracja widżetów z akcjami w aplikacji zapewnia też te korzyści:

  • Dostęp do parametrów: Asystent udostępnia parametry intencji wyodrębnione z zapytania użytkownika do widżetu, co umożliwia dostosowane odpowiedzi.
  • Niestandardowe wprowadzenie do zamiany tekstu na mowę: możesz podać ciąg tekstowy zamiany tekstu na mowę, który Asystent poinformuje Cię, gdy wyświetla widżet.
  • Przypinanie widżetów: Asystent wyświetla przycisk Dodaj ten widżet obok widżetu, dzięki czemu użytkownicy mogą je łatwo przypiąć do programu uruchamiającego.

Implementacja realizacji widżetów

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

  1. Zaimplementuj widżet na Androida, wykonując czynności opisane w sekcji Tworzenie prostego widżetu.
  2. W pliku zasobów shortcuts.xml aplikacji dodaj element <app-widget> do możliwości zawierającej szczegóły realizacji i tagi BII <parameter>. Zaktualizuj widżet, aby obsługiwał parametry.
  3. Dodaj wymaganą bibliotekę rozszerzeń widżetów, która umożliwia Asystentowi przekazywanie nazw i parametrów BII do widżetów. Umożliwia też korzystanie z funkcji wprowadzania na potrzeby zamiany tekstu na mowę oraz funkcji przypinania widżetów.

W tej sekcji opisano schemat <app-widget> dla shortcuts.xml.

Schemat widżetu

Elementy <app-widget> są zdefiniowane jako realizacji w elementach <capability> w elemencie shortcuts.xml. Wymagają tych atrybutów, chyba że wskazano jako opcjonalne:

Tag `shortcuts.xml`Zawarte wAtrybuty
<app-widget> <capability>
  • android:identifier
  • android:targetClass
<parameter> <app-widget>
<extra> <app-widget>
  • android:name (dotyczy tylko zamiany tekstu na mowę)
  • android:value (opcjonalnie)

Opis schematu widżetu

<app-Widget>

Element realizacji widżetu najwyższego poziomu.

Atrybuty:

  • android:identifier: identyfikator tej realizacji. Ta wartość musi być niepowtarzalna wśród elementów realizacji <app-widget> i <intent> zdefiniowanych w obrębie typu <capability>.
  • android:targetClass: pełna nazwa klasy AppWidgetProvider do obsługi intencji.

<parametr>

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

  • Klucz: android:key zdefiniowany dla parametru.
  • Wartość: wartość wyodrębniona przez BII z wypowiedzi użytkownika.

Dostęp do tych dodatków uzyskujesz, wywołując metodę getAppWidgetOptions() w powiązanym obiekcie AppWidgetManager, która zwraca wartość Bundle zawierającą nazwę aktywatora BII i jego parametry. Więcej informacji znajdziesz w sekcji Wyodrębnianie wartości parametrów.

Więcej informacji o dopasowywaniu parametrów BII znajdziesz w artykule Dane i dopasowywanie parametrów.

<ekstra>

Opcjonalny tag deklarujący, że w przypadku tego widżetu zostało użyte niestandardowe wprowadzenie do przekształcenia tekstu na mowę. 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 konfigurację realizacji widżetu dla funkcji 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ć kombinacji elementów <app-widget> i <intent> w przypadku każdej możliwości. Dzięki temu możesz dostosować usługi do swoich potrzeb na podstawie różnych kombinacji parametrów podanych przez użytkowników. Jeśli np. użytkownik nie poda w zapytaniu miejsca odbioru, możesz go skierować do działania w aplikacji, które zawiera opcje ustawień miejsca odbioru i zwrotu. Więcej informacji o definiowaniu intencji zastępczych znajdziesz w sekcji Intencje kreacji zastępczych.

Wyodrębnianie wartości parametrów

W tej przykładowej klasie AppWidgetProvider funkcja prywatna updateAppWidget() jest używana do wyodrębniania nazwy BII i parametrów z opcji 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 rozszerzenia Widżety akcji w aplikacji ulepsza widżety, aby umożliwić głosowe przekazywanie treści Asystenta. Dzięki tej bibliotece widżety mogą otrzymywać ważne informacje o realizacji z aktywatorów BII, w tym nazwę BII i parametry intencji pobrane z zapytania użytkownika.

Ta biblioteka Maven umożliwia wprowadzenie do każdego widżetu niestandardowego wprowadzenia do zamiany tekstu na mowę. Dzięki temu Asystent może informować użytkowników o podsumowaniu renderowanych treści. Umożliwia też przypinanie programu uruchamiającego, co ułatwia użytkownikom zapisywanie widżetów wyświetlanych w Asystencie na ich ekranach.

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

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

Niestandardowe wprowadzenie

Po zaimportowaniu biblioteki rozszerzeń widżetów możesz wprowadzić niestandardowe wprowadzenia do widżetów. Aby dodać definicję do AppWidgetProvider widżetu, otwórz klasę w IDE i zaimportuj bibliotekę rozszerzeń widżetów:

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ć widżet, jak pokazano tutaj:

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 podanych niżej zaleceń dotyczących stylu, aby zoptymalizować wprowadzenie do widżetu niestandardowego pod kątem zamiany tekstu na mowę i wyświetlanych promptów.

Rekomendacja Zalecane: Niezalecane
Skurcze
Używaj skrótów w potwierdzeniach zamiany tekstu na mowę. Wiadomości bez skurczów brzmią raczej na szczupkach i robotach niż naturalne i konwersacyjne. Wypowiadanie słów w rodzaju „nie mogę” czy „nie mogę” może brzmieć karze i strasznie.
ResponseSpeech (TTS)
Nie mogę znaleźć rezerwacji.

ResponseText
Nie udało mi się znaleźć rezerwacji.
ResponseSpeech (TTS)
Nie udało mi się znaleźć rezerwacji.

ResponseText
Nie udało mi się znaleźć rezerwacji.
Przecinki
Aby zwiększyć czytelność, użyj przecinków seryjnych na listach zawierających co najmniej 3 pozycje. Bez przecinka numer seryjny poszczególne elementy na liście mogą być nieprawidłowo słyszane lub odczytywane jako grupy. W przypadku np. „żonkile, stokrotki i słoneczniki” brzmią, jakby „słoneczniki i słoneczniki” się łączyły. W przypadku „żonkili, stokrotek i słoneczników” są one wyraźnie odrębne.
ResponseSpeech (TTS)
Najpopularniejsze to żółte róże, żonkile, stokrotki i słoneczniki.

ResponseText
Do najpopularniejszych należą żółte róże, żonkile, stokrotki i słoneczniki.
ResponseSpeech (TTS)
Nasze najpopularniejsze to żółte róże, żonkile, stokrotki i słoneczniki.

ResponseText
Do najpopularniejszych należą żółte róże, żonkile, stokrotki i słoneczniki.
Cyfry
Zamiast tekstu używaj cyfr, aby poprawić czytelność treści wizualnych.
ResponseSpeech (TTS)
Twoje ciśnienie krwi wynosi 100 na 80.

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

ResponseText
Ciśnienie krwi wynosi sto ponad osiemdziesiąt.
Symbole
Używaj specjalistycznych symboli zamiast tekstu, aby poprawić czytelność treści wizualnych.
ResponseSpeech (TTS)
Twój ostatni zakup kosztował 24,65 zł.

ResponseText
Twój ostatni zakup kosztował 24,65 zł.
ResponseSpeech (TTS)
Twój ostatni zakup kosztował 24 dolary i 65 gr.

ResponseText
Ostatni zakup kosztował 24 dolary i 65 gr.
Unikaj upominków
Dzięki uprzejmości odpowiedzi wyglądają z daleka i są bardziej formalne. Zapomnij o nich i zadbaj o to, aby rozmowa była przyjazna i nieformalna.
ResponseSpeech (TTS)
Twoje zamówienie zostało dostarczone.

ResponseText
Twoje zamówienie zostało dostarczone.
ResponseSpeech (TTS)
Oczywiście. Twoje zamówienie zostało dostarczone.

ResponseText
Oczywiście. Twoje zamówienie zostało dostarczone.
Unikaj wykrzykników
Mogą być postrzegane 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.
Czas
Używaj cyfr: „5:15” zamiast „piętnaście piętnaście” lub „kwartał po pięciu”. W przypadku zegara 12-godzinnego wpisz AM lub PM.
ResponseSpeech (TTS)
Dostawa powinna dotrzeć do 8:15.

ResponseText
Dostawa powinna dotrzeć do 8:15.
ResponseSpeech (TTS)
Dostawa powinna dotrzeć dzisiaj 15 minut po 8:00 rano.

ResponseText
Dostawa powinna dotrzeć dzisiaj 15 minut po 8:00 rano.
Nie skupiaj się na monologach
Przekazuj informacje, ale odpowiedzi powinny być zwięzłe. Nie wdawaj się w szczegóły bez wyraźnej informacji o korzyściach dla użytkownika.
ResponseSpeech (TTS)
W zeszłym miesiącu zużyto 159 godzin energii.

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

ResponseText
Oszczędzanie energii jest bardzo ważne dla planety i środowiska. W zeszłym miesiącu udało Ci się zużyć 159 godzin energii. W tym miesiącu zostało zużytych 58 godzin energii.
Używaj krótkich, prostych słów
Prosty i prosty język cieszy się największą popularnością i umożliwia korzystanie z niego przez użytkowników ze wszystkich środowisk.
ResponseSpeech (TTS)
Ostatni pomiar cukru we krwi to 126.

ResponseText
Ostatni odczyt cukru we krwi wyniósł 126 mg/dl.
ResponseSpeech (TTS)
Przedostatni poziom glukozy we krwi wyniósł 126.

ResponseText
Przedostatni poziom glukozy we krwi wyniósł 126.

Przypinanie Menu z aplikacjami

Dzięki bibliotece rozszerzeń widżetów przycisk Dodaj ten widżet może być wyświetlany razem z widżetem w Asystencie. Aby włączyć przypinanie, dodaj do AndroidManifest.xml tę definicję odbiornika:

<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ące wbudowane zasoby reklamowe lub internetowe zasoby reklamowe mogą rozszerzyć te zasoby o realizację widżetów.

Wbudowane zasoby reklamowe

Ten kod z przykładowego pliku shortcuts.xml pokazuje funkcję START_EXERCISE BII skonfigurowaną na potrzeby wbudowanych zasobów reklamowych i realizacji 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ę, mówiąc do Asystenta: „Rozpocznij uruchamianie z przykładową aplikacją”, pakiet opcji realizacji <app-widget> zawiera tę parę klucz-wartość:

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

Zasoby reklamowe w internecie

Ten kod z przykładowego pliku shortcuts.xml pokazuje możliwość włączania zasobów reklamowych w internecie i realizacji 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, czyli funkcji wtyczki Asystenta Google do Android Studio, by przetestować widżety na urządzeniu fizycznym lub wirtualnym. Aby użyć narzędzia testowego, wykonaj te czynności:

  1. Połącz urządzenie testowe z uruchomioną aplikacją.
  2. W Android Studio wybierz Narzędzia > Działania w aplikacji > Narzędzie do testowania działań w aplikacji.
  3. Kliknij Utwórz podgląd.
  4. Użyj Android Studio, aby uruchomić aplikację na urządzeniu testowym.
  5. Aby przetestować akcję w aplikacji, użyj aplikacji Asystent na urządzeniu testowym. Na przykład możesz powiedzieć „OK Google, ile mil przebyłeś w tym tygodniu w aplikacji ExampleApp?”.
  6. Obserwuj działanie swojej aplikacji lub użyj debugera Android Studio, aby potwierdzić oczekiwane działanie.

Wskazówki dotyczące jakości

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

Treści w widżetach

  • (Wymagane) Nie wyświetlaj reklam w widżecie.
  • Skoncentruj się całkowicie na treści widżetu zgodnie z zamierzeniem. Nie próbuj realizować wielu intencji za pomocą jednego widżetu ani nie dodawaj nietrafnych treści.

Uwierzytelnienie

  • (Wymagane) Jeśli do zakończenia działania użytkownika wymagane jest uwierzytelnianie użytkownika, zwracaj widżet wyjaśniający, że użytkownik musi kontynuować korzystanie z aplikacji. Wbudowane uwierzytelnianie użytkowników w Asystencie Google nie jest obsługiwane w przypadku Akcji dotyczących aplikacji.
  • Jeśli użytkownicy zezwalają aplikacji na wyświetlanie danych za pomocą widżetów, możesz zwrócić widżet błędu w czasie działania w przypadku nieautoryzowanych użytkowników.

Intencje zastępcze

  • (Wymagane) W obiekcie shortcuts.xml oprócz realizacji widżetu zawsze podaj też kreację zastępczą <intent> dla danej możliwości. Intencja zastępcza to element <intent> bez wymaganych wartości <parameter>.

    Dzięki temu Asystent może wykonać działanie, gdy zapytanie użytkownika nie zawiera parametrów wymaganych przez inne elementy realizacji zdefiniowane w funkcji. Wyjątkiem jest sytuacja, w której nie ma parametrów wymaganych do danej funkcji. W takim przypadku potrzebna jest tylko realizacja widżetu.

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

Ten kod z przykładowego pliku shortcuts.xml pokazuje element <capability> z wartością zastępczą <intent> obsługującą główną realizację <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 informacje o tym, jakie dane użytkowników są zbierane przez najnowszą wersję biblioteki rozszerzeń widżetów.

Ten pakiet SDK wysyła udostępniane przez dewelopera odpowiedzi zamiany tekstu na mowę (TTS), które są wypowiadane użytkownikowi przez Asystenta Google przy użyciu technologii rozpoznawania mowy Asystenta. Te informacje nie są przechowywane przez Google.

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

  • Monitorowanie wskaźnika rozpowszechnienia różnych wersji pakietu SDK
  • Aby sprawdzić wykorzystanie funkcji pakietu SDK w różnych aplikacjach