![](https://developer.android.com/static/guide/app-actions/images/Fitness4-widget.png?authuser=7&hl=ar)
GET_EXERCISE_OBSERVATION
.
بالنسبة للعديد من الأغراض، فإن أفضل استجابة هي تقديم إجابة بسيطة أو تأكيد موجز أو تجربة تفاعلية سريعة للمستخدم. يمكنك عرض أداة لتطبيق Android في "مساعد Google" لتحقيق هذه الأنواع من الأهداف.
يوضّح هذا الدليل كيفية تنفيذ طلبات المستخدمين في "مساعد Google" باستخدام التطبيقات المصغّرة، وكيفية تحسين تجربة استخدام التطبيقات المصغّرة لخدمة "مساعد Google" من خلال مكتبة إضافات التطبيقات المصغّرة.
المزايا
التطبيقات المصغّرة هي عروض مصغرة للتطبيقات يمكن تضمينها في تطبيقات Android، مثل المشغّل أو شاشة القفل. باستخدام "إجراءات التطبيقات"، يمكنك زيادة تأثير أدواتك من خلال جعلها مؤهلة للعرض في "مساعد Google":
- الاكتشاف: يمكنك عرض التطبيقات المصغّرة بشكل استباقي استجابةً لطلبات بحث المستخدمين باللغات الطبيعية.
- التفاعل: يمكنك عرض التطبيقات المصغّرة في سياقات بدون لمس الجهاز، مثلاً عندما يقدّم "مساعد Google" نتائج شخصية على شاشة القفل وعلى تطبيق Android Auto.
- الاحتفاظ بالبيانات: يمكنك السماح للمستخدمين بتثبيت التطبيقات المصغّرة المعروضة في "مساعد Google" على مشغِّل التطبيقات. تتطلّب وظيفة التثبيت مكتبة إضافات التطبيقات المصغّرة.
طريقة عرض "مساعد Google" للتطبيقات المصغّرة
هناك طريقتان يمكن للمستخدمين من خلالهما استدعاء التطبيقات المصغّرة على "مساعد Google":
- طلب التطبيق المصغّر بشكل صريح حسب الاسم.
- عند إعطاء "مساعد Google" طلب بحث يؤدي إلى تشغيل هدف مضمّن (BII) أو هدف مخصَّص تم إعداده لتنفيذ الأداة.
استدعاء صريح
لاستدعاء التطبيقات المصغّرة بشكل صريح لأي تطبيق مثبَّت، يمكن للمستخدمين أن يطلبوا من "مساعد Google" أشياء مثل:
- "Ok Google، أريد عرض تطبيق ExampleApp المصغّر".
- "التطبيقات المصغّرة من ExampleApp"
ويعرض "مساعد Google" هذه التطبيقات المصغّرة مع المقدمة العامة: "يقول تطبيق ExampleApp، هذه أداة". يعرض "مساعد Google" في الأصل التطبيقات المصغّرة المطلوبة بهذه الطريقة بدون الحاجة إلى عمل مطوّر التطبيق، إلا أنّ طريقة الاستدعاء هذه تتطلّب أن يكون لدى المستخدم معرفة واضحة بالتطبيق المصغّر. لتبسيط عملية اكتشاف التطبيقات المصغّرة، استخدِم طريقة تحقيق الأهداف الموضّحة بالتفصيل في القسم التالي.
تحقيق النية
يمكنك تسهيل العثور على تطبيقاتك المصغّرة من خلال استخدامها لتنفيذ طلبات البحث باللغة الطبيعية التي يجريها المستخدمون على "مساعد Google". على سبيل المثال، يمكنك عرض
تطبيق مصغّر عندما يشغّل المستخدم GET_EXERCISE_OBSERVATION
BII في
تطبيق اللياقة البدنية من خلال طرح السؤال "Ok Google، كم عدد الأميال التي ركضتها هذا الأسبوع على
ExampleApp؟" بالإضافة إلى تبسيط عملية الاستكشاف، يوفّر دمج التطبيقات المصغّرة
مع "إجراءات التطبيقات" المزايا التالية:
- الوصول إلى المعلَمات: يوفّر "مساعد Google" مَعلمات النية المستخرَجة من طلب بحث المستخدم إلى التطبيق المصغّر، ما يتيح تلقّي ردود مخصّصة.
- مقدّمات مخصّصة عبر تقنية TTS: يمكنك توفير سلسلة تحويل النص إلى كلام (TTS) لكي يعلنها "مساعد Google" عند عرض التطبيق المصغّر.
- تثبيت التطبيقات المصغّرة: يعرض "مساعد Google" زر إضافة هذه الأداة بجانب التطبيق المصغّر، ما يتيح للمستخدمين تثبيت التطبيقات المصغّرة بسهولة في مشغِّل التطبيقات.
تنفيذ تنفيذ الأدوات
لتنفيذ تنفيذ التطبيقات المصغّرة وفقًا لأهدافك، اتّبِع الخطوات التالية:
- يمكنك تنفيذ تطبيق Android المصغّر باتّباع الخطوات الموضّحة في المقالة إنشاء تطبيق مصغّر بسيط.
- في ملف موارد
shortcuts.xml
الخاص بتطبيقك، أضِف عنصر<app-widget>
إلى قدرتك التي تحتوي على تفاصيل طريقة التنفيذ وعلامات BII<parameter>
. حدّث تطبيقك المصغر للتعامل مع المعلمات. - أضِف مكتبة إضافات التطبيقات المصغّرة المطلوبة، والتي تتيح لـ "مساعد Google" تمرير أسماء BII ومعلَماته إلى التطبيقات المصغّرة. ويتيح أيضًا استخدام مقدّمات تقنية "تحويل النص إلى كلام" المخصصة ووظيفة تثبيت الأدوات.
يصف القسم التالي مخطّط <app-widget>
للسمة shortcuts.xml
.
مخطط الأداة
يتم تحديد عناصر <app-widget>
باعتبارها عمليات تنفيذ ضمن عناصر
<capability>
في shortcuts.xml
. تتطلّب السمات التالية
ما لم تكن اختيارية:
العلامة "shorts.xml" | مضمنة في | السمات |
---|---|---|
<app-widget> |
<capability> |
|
<parameter> |
<app-widget> |
|
<extra> |
<app-widget> |
|
وصف مخطط الأداة
<التطبيق المصغّر>
عنصر تنفيذ الأداة من المستوى الأعلى
السمات:
android:identifier
: معرّف عملية التنفيذ هذه يجب أن تكون هذه القيمة فريدة في عنصرَي التنفيذ<app-widget>
و<intent>
المحددَين في<capability>
.android:targetClass
: اسم فئةAppWidgetProvider
الكامل لمعالجة الغرض.
<المَعلمة>
تربط مَعلمة BII بقيمة <parameter>
للغرض. يمكنك تحديد معلَمات صفرية أو
أكثر لكل عنصر <app-widget>
. أثناء التنفيذ، يمرّر "مساعد Google" المَعلمات من خلال تعديل الإضافات للمثال المصغّر كأزواج المفتاح/القيمة بالتنسيق التالي:
- المفتاح: تم تحديد
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>
لكل إمكانية. ويتيح لك هذا الأسلوب تقديم تجربة مخصّصة استنادًا إلى مجموعات مختلفة من المعلمات التي يقدّمها المستخدمون. على سبيل المثال، إذا لم يحدد المستخدم موقع الانسحاب
في طلب البحث، يمكنك توجيهه إلى النشاط في تطبيقك الذي يُظهر خيارات تعيين مواقع الاستلام والتسليم. راجِع قسم
الأغراض الاحتياطية للحصول على مزيد من المعلومات
عن تحديد الأغراض الاحتياطية.
استخراج قيم المَعلمات
في نموذج فئة 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); } }
مكتبة إضافات التطبيقات المصغّرة
تحسِّن مكتبة إضافات إجراءات التطبيقات المصغَّرة من التطبيقات المصغّرة لتجارب "مساعد Google" لميزة إعادة توجيه الصوت. تتيح هذه المكتبة للتطبيقات المصغّرة تلقّي معلومات مهمة عن عملية التنفيذ من كائن BII الذي يتم تشغيله، بما في ذلك اسم BII وأي معلَمات أهداف يتم استخلاصها من طلب بحث المستخدم.
تتيح لك مكتبة Maven هذه تقديم مقدمة مخصَّصة عن عملية تحويل النص إلى كلام (TTS) لكل أداة، ما يتيح لخدمة "مساعد Google" الإعلان عن ملخّص للمحتوى الذي يتم عرضه للمستخدمين. وتتيح أيضًا تثبيت مشغّل التطبيقات، ما يسهّل على المستخدمين حفظ التطبيقات المصغّرة المعروضة في "مساعد Google" على شاشات مشغِّلات التطبيقات.
يمكنك البدء بإضافة المكتبة إلى قسم التبعيات في ملف
build.gradle
لوحدة تطبيقك:
dependencies {
//...
implementation "com.google.assistant.appactions:widgets:0.0.1"
}
المقدمات المخصّصة
بعد استيراد مكتبة إضافات الأدوات، يمكنك تقديم مقدمات TTS مخصصة
للأدوات. لإضافة تعريفك إلى AppWidgetProvider
الخاص بالأداة، افتح الفئة في بيئة التطوير المتكاملة (IDE) واستورِد مكتبة إضافات الأدوات:
Kotlin
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension
Java
import com.google.assistant.appactions.widgets.AppActionsWidgetExtension;
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); } }
توصيات نمط تحويل النص إلى كلام
يمكنك استخدام اقتراحات الأنماط التالية لتحسين مقدمات الأدوات المخصّصة لتقنية تحويل النص إلى كلام والطلبات المعروضة.
مقترَح | القيمة المقترَحة هي | غير مستحسن |
---|---|---|
الانكماشاستخدِم الاختصارات في طلبات "تحويل النص إلى كلام". فالرسائل التي لا تحتوي على اقتطاعات تبدو بأسلوب آلية وبطريقة آلية وليست طبيعية وتحاورية. قد يبدو استخدام كلمات مثل "لا يمكن" و "لا تفعل" عائقًا وقاسيًا. |
ResponseSpeech (TTS)عذرًا، لم أتمكن من العثور على حجز. ResponseText عذرًا، لا يمكنني العثور على حجز. |
ResponseSpeech (TTS)عذرًا، لا يمكنني العثور على حجز. ResponseText عذرًا، لا يمكنني العثور على حجز. |
فاصلاتأضف الوضوح باستخدام فواصل تسلسلية في قوائم مكونة من ثلاثة عناصر أو أكثر. بدون الفاصلة التسلسلية، قد يتم بشكل غير صحيح سماع عناصر فردية في قائمتك أو قراءتها كمجموعات. على سبيل المثال، في زهور النرجس والأقحوان ودوّار الشمس، تبدو "أزهار الأقحوان ودوّار الشمس" وكأنها تجتمع معًا. في "أزهار النرجس والأقحوان وزهور دوار الشمس"، من الواضح أن الثلاثة جميعها منفصلة. |
ResponseSpeech (TTS)تشمل أشهر هذه النباتات الورود الصفراء والنرجس والأقحوان وزهور دوّار الشمس. ResponseText من أشهر أنواع الورود الصفراء والنرجس والأقحوان وزهور دوّار الشمس. |
ResponseSpeech (TTS)تشمل أشهر هذه النباتات الورود الصفراء والنرجس والأقحوان وزهور دوّار الشمس. ResponseText من أشهر أنواع الورود الصفراء والنرجس والأقحوان وزهور دوّار الشمس. |
أرقاماستخدِم الأرقام بدلاً من النص لجعل المحتوى المرئي أكثر وضوحًا. |
ResponseSpeech (TTS)ضغط الدم 100 أكثر من 80. ResponseText ضغط الدم هو 100/80. |
ResponseSpeech (TTS)ضغط الدم هو 100/80. ResponseText ضغط الدم تساوي مائة على ثمانون. |
رموزاستخدِم الرموز المتخصّصة بدلاً من النص لجعل المحتوى المرئي أكثر وضوحًا. |
ResponseSpeech (TTS)بلغت قيمة عملية الشراء الأخيرة التي أجريتها 24.65 دولار أمريكي. ResponseText بلغت قيمة عملية الشراء الأخيرة 24.65 دولار أمريكي. |
ResponseSpeech (TTS)كانت آخر عملية شراء مقابل أربعة وعشرين دولارًا وخمسة وستين سنتًا. ResponseText كانت آخر عملية شراء مقابل أربعة وعشرين دولارًا وخمسة وستين سنتًا. |
تجنُّب استخدام صور جميلةاللطفاء يضفي طابعًا رسميًا على الردود. تخلص من هذه التعليقات وحافظ على أن تكون المحادثة ودية وغير رسمية. |
ResponseSpeech (TTS)تم تسليم طلبك. ResponseText تم تسليم طلبك. |
ResponseSpeech (TTS)حسنًا، يمكنني إعلامك بذلك. تم تسليم طلبك. ResponseText حسنًا، يمكنني إعلامك بذلك. تم تسليم طلبك. |
تجنُّب علامات التعجبيمكن اعتبارها صياحًا. |
ResponseSpeech (TTS)لقد ركضت 2.4 كيلومتر اليوم. ResponseText لقد ركضت اليوم 1.5 ميل. |
ResponseSpeech (TTS)لقد ركضت اليوم لمسافة 2.5 كيلومتر. ResponseText لقد ركضت اليوم لمسافة 1.5 ميل. |
الوقتاستخدِم الأرقام: "5:15" بدلاً من "خمسة وخمسة عشرة" أو "ربع بعد خمسة". استخدِم تنسيق 12 ساعة صباحًا أو مساءً. |
ResponseSpeech (TTS)من المفترض أن تصل خدمة التسليم بحلول الساعة 8:15 صباحًا. ResponseText من المفترض أن يصل الطلب بحلول الساعة 8:15 صباحًا. |
ResponseSpeech (TTS)من المفترض أن تصل خدمة التسليم في موعد أقصاه 15 دقيقة بعد الساعة 8 صباح اليوم. ResponseText من المفترض أن تصل خدمة التسليم في موعد أقصاه 15 دقيقة بعد الساعة 8 صباح اليوم. |
لا تنخرط في لقاءات من نوع واحدكن غنيًا بالمعلومات، ولكن اجعل الردود موجزة. بالتالي، تجنَّب الخوض في تفاصيل دقيقة بدون أن يكون هناك فائدة واضحة للمستخدم. |
ResponseSpeech (TTS)الشهر الماضي، استهلكت 159 ساعة من الطاقة. ResponseText تم استخدام 159 ساعة من الطاقة خلال الشهر الماضي. |
ResponseSpeech (TTS)إنّ توفير الطاقة هو عامل مهم جدًا لكوكب الأرض والبيئة. استخدمت الشهر الماضي 159 ساعة من الطاقة. تم استخدام الطاقة لمدة 58 ساعة خلال هذا الشهر. ResponseText إنّ توفير الطاقة أمر مهم جدًا لكوكب الأرض والبيئة. استخدمت الشهر الماضي 159 ساعة من الطاقة. تم استخدام الطاقة لمدة 58 ساعة خلال هذا الشهر. |
استخدام كلمات قصيرة وبسيطةتحظى اللغة البسيطة والبسيطة بشعبية واسعة، ما يجعلها متاحة لجميع المستخدمين من مختلف الخلفيات. |
ResponseSpeech (TTS)كانت آخر قراءة لنسبة السكر في الدم 126. ResponseText كانت آخر قراءة لنسبة السكر في الدم 126 ملغ لكل ديسيلت. |
ResponseSpeech (TTS)بلغ مستوى الغلوكوز في الدم قبل النهائي 126. ResponseText بلغ مستوى الغلوكوز في الدم قبل النهاية 126. |
تثبيت مشغّل التطبيقات
تتيح مكتبة إضافات التطبيقات المصغّرة عرض الزر إضافة هذه الأداة مع التطبيق المصغّر في "مساعد Google". لتفعيل التثبيت، أضِف تعريف المستلِم
التالي إلى 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>
مدى التوفّر في المستودع
يمكن أن تؤدي معرّفات BII التي تتوافق مع المستودع المضمّن أو المستودع على الويب إلى توسيع نطاق هذه المستودعات ليشمل عمليات تنفيذ الأدوات.
المستودع المضمّن
يوضّح الرمز التالي من نموذج ملف shortcuts.xml
إمكانية
START_EXERCISE
BII
التي تم ضبطها لتوفير المستودع المضمّن والتطبيقات المصغّرة:
<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>
في النموذج السابق، عندما يشغّل المستخدم هذه الإمكانية عبر توجيه الطلب إلى "مساعد Google" "بدء التشغيل باستخدام ExampleApp"، تحتوي حزمة الخيارات لعملية تنفيذ <app-widget>
على الزوج التالي من المفتاح/القيمة:
- المفتاح =
“exerciseName”
- القيمة =
“RunningShortcut”
مستودع الويب
يُظهر الرمز التالي من نموذج ملف shortcuts.xml
إمكانية
مفعّلة لتنفيذ المستودع الإعلاني على الويب والأدوات:
<shortcuts>
<capability
android:name="actions.intent.START_EXERCISE">
<app-widget
android:identifier="START_EXERCISE_1"
android:targetClass="com.example.exampleapp.CreateTaxiAppWidgetProvider">
<parameter
android:name="exercise.name"
android:key="exerciseName"
android:mimeType="text/*">
<data android:pathPattern="https://exampleapp.com/exercise/.*" />
</parameter>
</app-widget>
</capability>
</shortcuts>
إجراءات التطبيق التجريبية
يمكنك استخدام "أداة اختبار إجراءات التطبيقات"، وهي ميزة ضمن مكوِّن "مساعد Google" الإضافي في "استوديو Android" لاختبار التطبيقات المصغّرة على جهاز مادي أو افتراضي. لاستخدام أداة الاختبار، يُرجى اتّباع الخطوات التالية:
- عليك ربط جهاز الاختبار بتطبيقك قيد التشغيل.
- في "استوديو Android"، انتقِل إلى الأدوات > الإجراءات في التطبيقات > أداة اختبار الإجراءات في التطبيقات.
- انقر على إنشاء معاينة.
- باستخدام "استوديو Android"، يمكنك تشغيل تطبيقك على جهاز الاختبار.
- استخدِم تطبيق "مساعد Google" على جهاز الاختبار لاختبار "مهمتك في التطبيق". على سبيل المثال، يمكنك قول شيء مثل "Ok Google، كم عدد الأميال التي جريتها هذا الأسبوع على ExampleApp؟"
- راقِب سلوك تطبيقك أو استخدِم برنامج تصحيح الأخطاء في "استوديو Android" للتحقّق من نتيجة الإجراء المطلوبة.
إرشادات الجودة
يسلط هذا القسم الضوء على المتطلبات الأساسية وأفضل الممارسات عند دمج مهام التطبيق مع التطبيقات المصغّرة.
المحتوى في التطبيقات المصغّرة
- (مطلوب) لا تعرض إعلانات في تطبيقاتك المصغّرة.
- ركِّز محتوى التطبيق المصغّر بشكل كامل على تحقيق الهدف. لا تحاول تحقيق عدة أغراض باستخدام أداة واحدة أو إضافة محتوى غير ذي صلة.
معالجة المصادقة
- (مطلوب) عندما تكون مصادقة المستخدم مطلوبة لإكمال تدفق المستخدم، تُعرض أداة توضح أن المستخدم يحتاج إلى المتابعة في التطبيق. لا تتوفر مصادقة المستخدم المضمّنة في "مساعد Google" مع "إجراءات التطبيقات".
- إذا سمح المستخدمون لتطبيقك بعرض البيانات باستخدام الأدوات، يمكنك عرض أداة خطأ في وقت التشغيل للمستخدمين غير المصرّح لهم.
الأغراض الاحتياطية
(مطلوب) في
shortcuts.xml
، يجب دائمًا تقديم عنصر احتياطي<intent>
إلى جانب تنفيذ الأداة لإمكانية معيّنة. الغرض الاحتياطي هو عنصر<intent>
بدون قيم<parameter>
مطلوبة.يتيح ذلك لخدمة "مساعد Google" تنفيذ إجراء عندما لا يتضمّن طلب بحث المستخدم معلَمات مطلوبة من عناصر التنفيذ الأخرى المحدّدة في الميزة. ويُستثنى من ذلك عندما لا تكون هناك معلَمات مطلوبة لتلك الإمكانية، وفي هذه الحالة تكون هناك حاجة إلى تنفيذ الأداة فقط.
استخدم الغرض الاحتياطي لفتح التطبيق على الشاشة ذات الصلة، وليس الشاشة الرئيسية.
يعرض الرمز التالي من نموذج ملف 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" باستخدام تكنولوجيا الكلام المتوفّرة في "مساعد Google". لا تخزِّن Google هذه المعلومات.
قد تجمع إجراءات التطبيق أيضًا البيانات الوصفية لتطبيق العميل للأغراض التالية:
- لرصد معدّلات الاستخدام لمختلف إصدارات حزمة تطوير البرامج (SDK)
- تحديد استخدام ميزات حزمة تطوير البرامج (SDK) في مختلف التطبيقات