Uygulama İşlemleri'ni Android widget'larıyla entegre etme

Şekil 1. GET_EXERCISE_OBSERVATION için bir widget başlatılıyor.

Birçok amaç için en iyi yanıt, kullanıcıya basit bir yanıt, kısa bir onay veya hızlı bir etkileşimli deneyim sunmaktır. Bu tür amaçları yerine getirmek için Google Asistan'da bir Android uygulama widget'ı görüntüleyebilirsiniz.

Bu kılavuzda, widget'ları kullanarak Asistan kullanıcı sorgularını nasıl yerine getirebileceğiniz ve Uygulama İşlemleri Widget Uzantısı kitaplığı ile Asistan için widget deneyiminizi nasıl iyileştireceğiniz ele alınmaktadır.

Avantajlar

Widget'lar, başlatıcı veya kilit ekranı gibi Android yüzeylerine yerleştirilebilen minyatür uygulama görünümleridir. Uygulama İşlemleri sayesinde widget'larınızı Asistan'da görüntülenmeye uygun hale getirerek etkilerini artırırsınız:

  1. Keşif: Kullanıcıların doğal dil sorgularına yanıt olarak widget'ları proaktif olarak görüntüleyin.
  2. Etkileşim: Widget'ları eller serbest bağlamlarda (örneğin, Asistan'ın kilit ekranında ve Android Auto'da kişisel sonuçlar sunduğu durumlarda) görüntüleyin.
  3. Saklama: Kullanıcıların Asistan'da görüntülenen widget'ları başlatıcılarına sabitlemesine izin verin. Sabitleme işlevi için Widget Uzantısı kitaplığı gerekir.

Asistan, widget'ları nasıl gösterir?

Kullanıcılar Asistan'da widget'ları iki şekilde çağırabilir:

  • Açıkça adına göre widget isteme.
  • Asistan'a, widget karşılama işlemi için yapılandırılmış yerleşik bir amacı (BII) veya özel amacı tetikleyen bir sorgu söylemek.

Uygunsuz çağrı

Kullanıcılar yüklü bir uygulamanın widget'larını açıkça çağırmak için Asistan'a şöyle şeyler sorabilir:

  • "Ok Google, OrnekUygulama widget'ını göster."
  • "ExampleApp'ten widget'lar."

Asistan, bu widget'ları genel tanıtımla görüntüler: "ÖrnekUygulama, bu widget'ı burada söylüyor." Asistan, bu şekilde istenen widget'ları uygulama geliştiricisinin herhangi bir işlem yapması gerekmeden yerel olarak döndürse de bu çağrı yöntemi, kullanıcının widget'ı isteyebilmesi için widget hakkında net bilgiye sahip olmasını gerektirir. Widget keşfini basitleştirmek için aşağıdaki bölümde ayrıntılı olarak açıklanan intent karşılama yöntemini kullanın.

Amaç karşılama

Kullanıcıların Asistan'da gerçekleştirdikleri doğal dil sorgularını karşılamak için widget'larınızı kullanarak widget'larınızı daha kolay bulabilirsiniz. Örneğin, bir kullanıcı fitness uygulamanızda GET_EXERCISE_OBSERVATION BII'yi tetiklediğinde "Ok Google, bu hafta Örnek Uygulama'da kaç kilometre koştum?" sorusunu sorarak bir widget'ı döndürebilirsiniz. Widget'ları Uygulama İşlemleri ile entegre etmek, keşfi basitleştirmenin yanı sıra şu avantajları da sunar:

  • Parametre erişimi: Asistan, kullanıcı sorgusundan çıkarılan amaç parametrelerini widget'ınıza sağlayarak özelleştirilmiş yanıtlar sağlar.
  • Özel TTS tanıtımları: Asistan'ın widget'ınızı görüntülerken duyurması için bir metin okuma (TTS) dizesi sağlayabilirsiniz.
  • Widget sabitleme: Asistan, widget'ınızın yakınında bir Bu widget'ı ekle düğmesi görüntüleyerek kullanıcıların widget'larınızı başlatıcılarına kolayca sabitlemelerini sağlar.

Widget karşılamayı uygulayın

Amaçlarınız için widget karşılamayı uygulamak üzere şu adımları izleyin:

  1. Basit widget oluşturma bölümünde açıklanan adımları izleyerek bir Android widget'ını uygulayın.
  2. Uygulamanızın shortcuts.xml kaynak dosyasında, özelliğinize sipariş karşılama ayrıntılarını ve BII <parameter> etiketlerini içeren bir <app-widget> öğesi ekleyin. Widget'ınızı parametreleri işleyecek şekilde güncelleyin.
  3. Asistan'ın, BII adlarını ve parametrelerini widget'larınıza iletebilmesi için gereken Widget Uzantısı kitaplığını ekleyin. Ayrıca, özel TTS tanıtımları ve widget sabitleme işlevselliğini de etkinleştirir.

Aşağıdaki bölümde shortcuts.xml için <app-widget> şeması açıklanmaktadır.

Widget şeması

<app-widget> öğeleri, shortcuts.xml içindeki <capability> öğelerinde bulunan karşılamalar olarak tanımlanır. İsteğe bağlı olarak belirtilmediği sürece bu özellikler için aşağıdaki özelliklerin kullanılması gerekir:

"shortcuts.xml" etiketiBulunduğu yerÖzellikler
<app-widget> <capability>
  • android:identifier
  • android:targetClass
<parameter> <app-widget>
<extra> <app-widget>
  • android:name (yalnızca TTS için geçerlidir)
  • android:value (isteğe bağlı)

Widget şeması açıklaması

<uygulama-widget>

Üst düzey widget karşılama öğesi.

Özellikler:

  • android:identifier: Bu istek karşılamanın tanımlayıcısı. Bu değer, <capability> içinde tanımlanan <app-widget> ve <intent> istek karşılama öğelerinde benzersiz olmalıdır.
  • android:targetClass: Niyeti yerine getirmek için AppWidgetProvider öğesinin tam sınıf adı.

<parametre>

Bir BII parametresini amaç <parameter> değerine eşler. Her <app-widget> öğesi için sıfır veya daha fazla parametre tanımlayabilirsiniz. Sipariş karşılama sırasında Asistan, widget örneğinin ekstralarını aşağıdaki biçimde anahtar/değer çiftleri olarak güncelleyerek parametreleri iletir:

  • Anahtar: Parametre için tanımlanan android:key.
  • Değer: BII'nin bir kullanıcının ses girişinden çıkardığı değer.

Bu ekstra özelliklere, ilişkili AppWidgetManager nesnesinde getAppWidgetOptions() çağrısı yaparak erişebilirsiniz. Bu çağrı, tetikleyici BII'nin adını ve parametrelerini içeren bir Bundle döndürür. Ayrıntılar için Parametre değerlerini ayıklama bölümüne bakın.

BII parametresi eşleştirme hakkında daha fazla bilgi edinmek için Parametre verileri ve eşleştirme bölümünü inceleyin.

<extra>

Bu widget için özel bir TTS tanıtımının kullanıldığını belirten isteğe bağlı etiket. Bu etiket, aşağıdaki özellik değerlerini gerektirir:

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

Örnek kod

Aşağıdaki shortcuts.xml dosyası örneği, GET_EXERCISE_OBSERVATION BII özelliği için bir widget karşılama yapılandırmasını gösterir:

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

Birden fazla <app-widget> öğesi belirtebilir veya özellik başına <app-widget> ve <intent> öğelerinin bir kombinasyonunu kullanabilirsiniz. Bu yaklaşım, kullanıcıların sağladığı farklı parametre kombinasyonlarına göre özelleştirilmiş bir deneyim sunmanıza olanak tanır. Örneğin, kullanıcı sorgusunda bir bırakma konumu belirtmezse onu uygulamanızda, alma ve bırakma konumlarını ayarlamayla ilgili seçeneklerin gösterildiği etkinliğe yönlendirebilirsiniz. Yedek amaçları tanımlama hakkında daha fazla bilgi için Yedek amaçlar bölümüne bakın.

Parametre değerlerini ayıkla

Aşağıdaki örnek AppWidgetProvider sınıfında, updateAppWidget() gizli işlevi Bundle widget seçeneklerinden BII adını ve parametrelerini ayıklamak için kullanılır:

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

Widget Uzantısı kitaplığı

Uygulama İşlemleri Widget'ları Uzantısı kitaplığı, widget'larınızı sese dayalı Asistan deneyimleri için iyileştirir. Bu kitaplık, widget'larınızın tetikleyici BII'den önemli istek karşılama bilgilerini (BII adı ve kullanıcı sorgusundan çıkarılan intent parametreleri dahil) almasına olanak tanır.

Bu Maven kitaplığı her widget için özel bir metin okuma (TTS) girişi sağlayarak Asistan'ın kullanıcılara görsel olarak oluşturulan içeriğin özetini duyurmasını sağlar. Ayrıca başlatıcı sabitlemeyi sağlayarak kullanıcıların Asistan'da görüntülenen widget'ları başlatıcı ekranlarına kaydetmelerini kolaylaştırır.

Kitaplığı, uygulama modülünüz için build.gradle dosyasının bağımlılıklar bölümüne ekleyerek başlayın:

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

Özel tanıtımlar

Widget Uzantısı kitaplığını içe aktardıktan sonra, widget'larınız için özel TTS tanıtımları sağlayabilirsiniz. Tanımınızı widget'ın AppWidgetProvider öğesine eklemek için sınıfı IDE'nizde açın ve Widget Uzantısı kitaplığını içe aktarın:

Kotlin

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

Java

import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;
Ardından, aşağıdaki "ExampleAppWidget"ta gösterildiği gibi giriş dizelerinizi tanımlamak ve widget'ı güncellemek için kitaplığı kullanın:

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 stil önerileri

TTS ve görüntülenen istemler için özel widget tanıtımlarınızı optimize etmek amacıyla aşağıdaki stil önerilerini kullanın.

Öneri Önerilen Önerilmez
Sıkıştırmalar
TTS istemlerinde kısaltmaları kullanın. Sıkıştırması olmayan mesajlar, doğal ve konuşkan değil, planlı ve robotik bir tarza dönüşür. "Yapılamaz" ve "yapmama" gibi kelimeler kulağa cezalandırıcı ve sert gelebilir.
ResponseSpeech (TTS)
Maalesef rezervasyon bulamıyorum.

ResponseText
Maalesef rezervasyon bulamıyorum.
ResponseSpeech (TTS)
Maalesef rezervasyon bulamıyorum.

ResponseText
Maalesef rezervasyon bulamıyorum.
Virgül
Üç veya daha fazla öğeden oluşan listelerde seri virgülleri kullanarak anlaşılırlık sağlayın. Seri virgül kullanılmadığında listenizdeki her bir öğe yanlış duyulabilir veya grup olarak okunabilir. Örneğin, "nergisler, papatyalar ve ayçiçekleri"nde "papatyalar ve ayçiçekleri" bir araya geliyormuş gibi gelir. "Papatyalar, papatyalar ve ayçiçekleri"nde üçü de açık bir şekilde birbirinden ayrıdır.
ResponseSpeech (TTS)
En popüler çiçeklerimiz sarı güller, nergisler, papatyalar ve ayçiçekleridir.

ResponseText
En popüler çiçeklerimiz sarı güller, nergisler, papatyalar ve ayçiçekleridir.
ResponseSpeech (TTS)
En popüler çiçeklerimiz sarı güller, nergisler, papatyalar ve ayçiçekleridir.

ResponseText
En popüler olanlar sarı güller, nergisler, papatyalar ve ayçiçekleridir.
Sayılar
Görsel içeriği daha okunaklı hale getirmek için metin yerine sayıları kullanın.
ResponseSpeech (TTS)
Tansiyonun 100 üstünde 80.

ResponseText
Tansiyonunuz 100/80.
ResponseSpeech (TTS)
Tansiyonunuz 100/80.

ResponseText
Tansiyonun yüz seksen üstünde.
Semboller
Görsel içeriği daha okunaklı hale getirmek için metin yerine özel semboller kullanın.
ResponseSpeech (TTS)
Son satın alma işleminiz 24,65 ABD dolarıydı.

ResponseText
Son alışverişiniz 24,65 ABD doları oldu.
ResponseSpeech (TTS)
Son satın alma işleminiz yirmi dört dolar altmış beş sentti.

ResponseText
Son alışverişiniz yirmi dört dolar altmış beş sentti.
Hoş görünümlerden kaçının
Nitelikler, yanıtları uzak ve resmi hissettirir. Onlardan uzak durun ve sohbetin samimi ve samimi olmasını sağlayın.
ResponseSpeech (TTS)
Siparişiniz teslim edildi.

ResponseText
Siparişiniz teslim edildi.
ResponseSpeech (TTS)
Elbette, söyleyebilirim. Siparişiniz teslim edildi.

ResponseText
Elbette, size söyleyebilirim. Siparişiniz teslim edildi.
Ünlem işaretleri kullanmaktan kaçının
Bu sesler bağırmak olarak algılanabilir.
ResponseSpeech (TTS)
Bugün 2,4 km koştunuz.

ResponseText
Bugün 2,4 km koştunuz.
ResponseSpeech (TTS)
Bugün 2,4 km koştunuz!

ResponseText
Bugün 2,4 km koştunuz!
Süre
Sayıları kullanın: "beş on beş" veya "beş on beşten sonra" yerine "5:15". 12 saatlik zaman biçimi için ÖÖ veya ÖS'yi kullanın.
ResponseSpeech (TTS)
Teslimatınız en geç 8:15'te elinize ulaşacaktır.

ResponseText
Teslimatınız en geç 8:15'te elinize ulaşacaktır.
ResponseSpeech (TTS)
Teslimatınız bugün sabah 8'den en geç 15 dakika içinde ulaşır.

ResponseText
Teslimatınız bugün sabah 8'den en geç 15 dakika içinde size ulaşacaktır.
Monologlara giriş yapmayın.
Bilgilendirici olun ancak yanıtları kısa ve öz tutun. Kullanıcılara net bir fayda sağlamayacak şekilde ağır ayrıntılara girmeyin.
ResponseSpeech (TTS)
Geçen ay 159 saat enerji kullandınız.

ResponseText
Geçen ay 159 saat enerji kullandınız.
ResponseSpeech (TTS)
Enerji tasarrufu, gezegen ve çevre için çok önemlidir. Geçen ay 159 saat enerji kullandınız. Bu ay 58 saat enerji kullandınız.

ResponseText
Enerji tasarrufu, gezegen ve çevre için çok önemlidir. Geçen ay 159 saat enerji kullandınız. Bu ay 58 saat enerji kullandınız.
Kısa, basit kelimeler kullanın
Sade ve basit bir dil en çok rağbet gören dildir ve bu yönüyle her sosyal kesimden insan için erişilebilirdir.
ResponseSpeech (TTS)
Son kan şekeri değeriniz 126 oldu.

ResponseText
Son kan şekeri değeriniz 126 mg/dL olarak ölçüldü.
ResponseSpeech (TTS)
Sondan bir önceki kan şekeri seviyesi 126'ydı.

ResponseText
Sondan önceki kan şekeri seviyesi 126'ydı.

Başlatıcı sabitleme

Widget Uzantısı kitaplığı, Bu widget'ı ekle düğmesinin Asistan'da widget'ınızla görüntülenmesini sağlar. Sabitlemeyi etkinleştirmek için AndroidManifest.xml öğesine aşağıdaki alıcı tanımını ekleyin:

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

Envanter uygunluğu

Satır içi envanteri veya web envanterini destekleyen BBI'ler, bu envanterleri widget isteklerinize genişletebilir.

Satır içi envanter

Örnek bir shortcuts.xml dosyasındaki aşağıdaki kodda, satır içi envanter ve widget karşılama işlemi için yapılandırılmış bir START_EXERCISE BII özelliği gösterilmektedir:

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

Önceki örnekte, bir kullanıcı Asistan'a "ExampleApp ile çalışmaya başlayın" diyerek bu özelliği tetiklediğinde <app-widget> istek karşılamanın seçenek paketi aşağıdaki anahtar/değer çiftini içerir:

  • Anahtar = “exerciseName”
  • Değer = “RunningShortcut”

Web envanteri

Örnek bir shortcuts.xml dosyasındaki şu kod, web envanteri ve widget karşılama için etkinleştirilen bir özelliği gösterir:

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

Uygulama İşlemlerini Test Etme

Widget'ları fiziksel veya sanal bir cihazda test etmek için Android Studio için Google Asistan eklentisinin bir özelliği olan Uygulama İşlemleri Test Aracı'nı kullanın. Test aracını kullanmak için aşağıdaki adımları uygulayın:

  1. Test cihazınızı çalışan uygulamanıza bağlayın.
  2. Android Studio'da Araçlar > Uygulama İşlemleri > Uygulama İşlemleri Test Aracı'na gidin.
  3. Önizleme oluştur'u tıklayın.
  4. Android Studio'yu kullanarak uygulamanızı test cihazınızda çalıştırın.
  5. Uygulama İşleminizi test etmek için test cihazınızdaki Asistan uygulamasını kullanın. Örneğin, "Ok Google, exampleApp'te bu hafta kaç kilometre koştum?" gibi bir şey diyebilirsiniz.
  6. İstenen işlem sonucunu doğrulamak için uygulamanızın davranışını gözlemleyin veya Android Studio hata ayıklayıcıyı kullanın.

Kalite yönergeleri

Bu bölümde, Uygulama İşlemleri'ni widget'larla entegre etmeyle ilgili temel gereksinimler ve en iyi uygulamalar vurgulanmaktadır.

Widget'lardaki içerikler

  • (Zorunlu) Widget'larınızda reklam göstermeyin.
  • Widget içeriklerinde tamamen amacınızı karşılamaya odaklanın. Tek bir widget ile birden çok amacı yerine getirmeye veya alakasız içerik eklemeye çalışmayın.

Kimlik doğrulamayı işleme

  • (Zorunlu) Bir kullanıcı akışını tamamlamak için kullanıcı kimlik doğrulamasının gerekli olduğu durumlarda, kullanıcının uygulamada devam etmesi gerektiğini açıklayan bir widget döndürün. Google Asistan'da satır içi kullanıcı kimlik doğrulaması Uygulama İşlemleri için desteklenmez.
  • Kullanıcılar uygulamanızın widget'lar kullanarak veri göstermesine izin verirse yetkisiz kullanıcılar için çalışma zamanında bir hata widget'ı döndürebilirsiniz.

Yedek amaçlar

  • (Zorunlu) shortcuts.xml ürününüzde, belirli bir özellik için widget karşılama durumunuza ek olarak her zaman bir yedek <intent> sağlayın. Yedek amaç, zorunlu <parameter> değeri olmayan bir <intent> öğesidir.

    Bu sayede Asistan, kullanıcı sorgusu özellikte tanımlanan diğer istek karşılama öğelerinin gerektirdiği parametreleri içermediğinde Asistan'ın bir işlemi yerine getirebilir. Bunun istisnası, söz konusu özellik için gerekli parametrelerin olmamasıdır. Bu durumda yalnızca widget'ın karşılanması gerekir.

  • Uygulamanızı ana ekranda değil, ilgili ekranda açmak için yedek niyetini kullanın.

Örnek shortcuts.xml dosyasındaki aşağıdaki kodda, birincil <app-widget> karşılamayı destekleyen yedek <intent> içeren bir <capability> gösterilmektedir:

<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 veri açıklaması

Bu bölümde, Widgets Extension kitaplığının en son sürümü tarafından toplanan son kullanıcı verileri listelenmektedir.

Bu SDK, geliştirici tarafından sağlanan metin okuma (TTS) yanıtları gönderir. Bu yanıtlar, Asistan'ın konuşma teknolojisi kullanılarak Google Asistan tarafından kullanıcıya duyurulur. Bu bilgiler Google tarafından saklanmaz.

Uygulama işlemleri, aşağıdaki amaçlar için istemci uygulaması meta verilerini de toplayabilir:

  • Farklı SDK sürümlerinin kullanım oranlarını izlemek için
  • Uygulamalar arasında SDK özelliklerinin kullanımını ölçmek