تحسين المحتوى السياقي في "مساعد Google"

يقدم نظام التشغيل Android 6.0 Marshmallow طريقة جديدة للمستخدمين للتفاعل مع التطبيقات من خلال التطبيقات المساعد، مثل مساعد Google. والمساعد عبارة عن نافذة مستوى أعلى يمكن للمستخدمين عرضها للحصول على الإجراءات ذات الصلة بالسياق للنشاط الحالي. قد تتضمن هذه الإجراءات روابط لصفحات معيّنة في التطبيقات الأخرى على الجهاز.

يمكن للمستخدمين تفعيل "مساعد Google" من خلال الضغط مع الاستمرار على زر الشاشة الرئيسية أو من خلال قول عبارة رئيسية. استجابةً لذلك، يفتح النظام نافذة مستوى أعلى تعرض الإجراءات ذات الصلة بالسياق.

ينفّذ أحد تطبيقات المساعد، مثل "مساعد Google"، نافذة "مساعد Google" المركّبة من خلال ميزة تُسمّى Now on Tap، والتي تعمل مع وظائف على مستوى النظام الأساسي لنظام Android. يسمح النظام للمستخدم باختيار تطبيق المساعد الذي يحصل على معلومات سياقية من تطبيقك باستخدام واجهة برمجة التطبيقات Assist في نظام التشغيل Android.

يشرح هذا الدليل كيفية استخدام تطبيقات Android لواجهة برمجة التطبيقات Assist في Android لتحسين تجربة مستخدم المساعد. للتعرّف على طريقة إنشاء تطبيق وسائط ليتمكّن "مساعد Google" من التشغيل والتحكّم، راجِع تطبيق "مساعد Google" وتطبيقات الوسائط.

استخدام "مساعد Google"

يوضح الشكل 1 تفاعل المستخدم العادي مع المساعد. عندما يضغط المستخدم مع الاستمرار على زر "الشاشة الرئيسية"، يتم استدعاء عمليات استدعاء واجهة برمجة التطبيقات Assist في تطبيق المصدر (الخطوة 1). ويعرض المساعد نافذة التراكب (الخطوتان 2 و3)، ثم يختار المستخدم الإجراء الذي يريد تنفيذه. ينفِّذ المساعد الإجراء المحدد، مثل تنشيط هدف باستخدام رابط لصفحة معيّنة في تطبيق المطعم (الوجهة) (الخطوة 4).

الشكل 1. مثال على تفاعل "مساعد Google" مع ميزة Now on Tap في تطبيق Google

يمكن للمستخدمين ضبط المساعد عن طريق اختيار الإعدادات > التطبيقات > التطبيقات التلقائية > المساعدة والإدخال الصوتي. يمكن للمستخدمين تغيير خيارات النظام، مثل الوصول إلى محتوى الشاشة كنص والوصول إلى لقطة شاشة، كما هو موضّح في الشكل 2.

الشكل 2. إعدادات المساعدة والإدخال الصوتي

التطبيق المصدر

لضمان عمل تطبيقك مع "مساعد Google" كمصدر للمعلومات التي يوفّرها المستخدم، ما عليك سوى اتّباع أفضل الممارسات المتعلّقة بتسهيل الاستخدام. يصف هذا القسم كيفية تقديم معلومات إضافية للمساعدة في تحسين تجربة مستخدم المساعد بالإضافة إلى السيناريوهات التي تحتاج إلى معالجة خاصة، مثل طرق العرض المخصّصة.

مشاركة معلومات إضافية مع المساعد

بالإضافة إلى النص ولقطة الشاشة، يمكن للتطبيق مشاركة معلومات أخرى مع المساعد. على سبيل المثال، يمكن لتطبيق الموسيقى اختيار تمرير معلومات الألبوم الحالي حتى يتمكن "مساعد Google" من اقتراح إجراءات أكثر ذكاءً مخصّصة للنشاط الحالي. تجدر الإشارة إلى أنّ واجهات برمجة تطبيقات المساعدة لا توفّر عناصر تحكّم في الوسائط. لإضافة عناصر التحكّم في الوسائط، يمكنك الاطّلاع على "مساعد Google" وتطبيقات الوسائط.

لتقديم معلومات إضافية للمساعد، يوفّر تطبيقك سياق التطبيق الشامل من خلال تسجيل أداة معالجة بيانات في التطبيق كما يوفّر معلومات خاصة بالنشاط، مثل استدعاء الأنشطة كما هو موضّح في الشكل 3:

الشكل 3. مخطط تسلسل دورة حياة واجهة برمجة التطبيقات المساعدة

لتوفير سياق عام للتطبيق، ينشئ التطبيق عملية تنفيذ Application.OnProvideAssistDataListener ويسجّلها باستخدام registerOnProvideAssistDataListener(). لتوفير معلومات سياقية خاصة بنشاط معيّن، يؤدي النشاط إلى إلغاء الترميزَين onProvideAssistData() وonProvideAssistContent(). يتم استدعاء طريقتَي النشاط بعد استدعاء معاودة الاتصال العامة الاختيارية. وبما أنّ عمليات معاودة الاتصال يتم تنفيذها في سلسلة التعليمات الرئيسية، يجب أن تكتمل بشكل مطالبة. لا يتم استدعاء عمليات الاسترداد إلا عندما يكون النشاط قيد التشغيل.

توفير السياق

عندما يفعِّل المستخدم المساعد، يتم استدعاء onProvideAssistData() لإنشاء Intent كامل من ACTION_ASSIST مع تمثيل سياق التطبيق الحالي بالكامل كمثيل لـ AssistStructure. يمكنك إلغاء هذه الطريقة لإضافة أيّ عنصر تريده في الحِزمة بحيث يظهر في الجزء EXTRA_ASSIST_CONTEXT من الغرض من النقرة أو مرة الظهور الداعمة.

وصف المحتوى

يمكن لتطبيقك تنفيذ علامة onProvideAssistContent() لتحسين تجربة مستخدم "مساعد Google" من خلال توفير مراجع ذات صلة بالمحتوى ذات صلة بالنشاط الحالي. يمكنك وصف محتوى التطبيق باستخدام المفردات الشائعة المحدّدة من خلال Schema.org من خلال كائن JSON-LD. في المثال أدناه، يوفّر تطبيق الموسيقى بيانات منظَّمة لوصف الألبوم الموسيقي الذي يطّلع عليه المستخدم حاليًا:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

ويمكنك أيضًا تحسين تجربة المستخدم من خلال عمليات التنفيذ المخصّصة للسمة onProvideAssistContent()، والتي توفّر المزايا التالية:

ملاحظة: من المحتمل أن تحتاج التطبيقات التي تستخدم اختيار نص مخصّص إلى تنفيذ onProvideAssistContent() والاتصال setClipData() على الأرجح.

طريقة التنفيذ التلقائية

في حال عدم تنفيذ استدعاء onProvideAssistData() أو onProvideAssistContent()، يواصل النظام المتابعة ويمرر المعلومات المجمّعة تلقائيًا إلى "مساعد Google" ما لم يتم وضع علامة على النافذة الحالية باعتبارها آمنة. كما هو موضّح في الشكل 3، يستخدم النظام عمليات التنفيذ التلقائية للسمتَين onProvideStructure() وonProvideVirtualStructure() لجمع معلومات عن النص وعرض التدرّج الهرمي. إذا كان العرض ينفّذ رسمًا نصيًا مخصّصًا، يمكنك إلغاء السمة onProvideStructure() لتزويد "مساعد Google" بالنص المعروض للمستخدم من خلال طلب الرقم setText(CharSequence).

في معظم الحالات، يتيح تطبيق تسهيل الاستخدام للمساعد الحصول على المعلومات التي يحتاجها. لتنفيذ الدعم المتعلّق بتسهيل الاستخدام، اتّبِع أفضل الممارسات الموضّحة في قسم تسهيل الوصول إلى التطبيقات، بما في ذلك ما يلي:

استبعاد المشاهدات من المساعدين

للتعامل مع المعلومات الحساسة، يمكن لتطبيقك استبعاد العرض الحالي من "مساعد Google" من خلال ضبط معلَمة FLAG_SECURE لتنسيق WindowManager. يجب ضبط FLAG_SECURE بشكل صريح لكل نافذة تم إنشاؤها من خلال النشاط، بما في ذلك مربّعات الحوار. يمكن لتطبيقك أيضًا استخدام setSecure() لاستبعاد سطح من "مساعد Google". ولا تتوفّر آلية عامة (على مستوى التطبيق) لاستبعاد جميع الملفات الشخصية من "مساعد Google". ويُرجى العلم بأنّ السمة FLAG_SECURE لا تؤدي إلى إيقاف تنشيط استدعاءات واجهة برمجة التطبيقات Assist. لا يزال بإمكان النشاط الذي يستخدم FLAG_SECURE تقديم معلومات بشكل صريح إلى تطبيق المساعد باستخدام عمليات معاودة الاتصال الموضحة سابقًا في هذا الدليل.

ملاحظة: بالنسبة إلى حسابات المؤسسات (Android for Work)، يمكن للمشرف إيقاف جمع بيانات المساعد للملف الشخصي للعمل باستخدام طريقة setScreenCaptureDisabled() لواجهة برمجة تطبيقات DevicePolicyManager.

التفاعلات الصوتية

يتم أيضًا استدعاء استدعاءات واجهة برمجة التطبيقات الداعمة عند رصد عبارة المفاتيح. لمزيد من المعلومات، يمكنك الاطّلاع على مستندات الإجراءات الصوتية.

اعتبارات الترتيب Z

يستخدم أحد المساعدين نافذة تركيب خفيفة الوزن يتم عرضها أعلى النشاط الحالي. بما أنّ المستخدم يستطيع تفعيل المساعد في أي وقت، لا تُنشئ نوافذ تنبيهات النظام دائمة تتداخل مع نافذة التراكب، كما هو موضّح في الشكل 4.

الشكل 4. ترتيب طبقة المساعدة Z

إذا كان تطبيقك يستخدم نوافذ تنبيهات النظام، يجب إزالتها على الفور لأنّ تركها على الشاشة يؤدي إلى انخفاض مستوى تجربة المستخدم.

تطبيق الوجهة

تستفيد عادةً التطبيقات المزوّدة بخدمة "مساعد Google" من الربط بصفحة معيّنة للعثور على تطبيقات الوجهة. لجعل تطبيقك تطبيقًا وجهة محتملة، ننصحك بإضافة دعم الربط بصفحة معيّنة. إنّ المطابقة بين سياق المستخدِم الحالي والروابط لصفحات معيّنة أو الإجراءات المحتملة الأخرى المعروضة في نافذة التراكب (الموضّحة في الخطوة 3 في الشكل 1) ترتبط تحديدًا بتنفيذ "مساعد Google". على سبيل المثال، يستخدم تطبيق "مساعد Google" الروابط لصفحات في التطبيق وروابط التطبيقات لزيادة عدد الزيارات إلى تطبيقات الوجهة.

استخدام "مساعد Google"

يمكنك تنفيذ مساعدك الخاص. كما هو موضّح في الشكل 2، يمكن للمستخدم اختيار تطبيق المساعد النشط. ويجب أن يقدّم تطبيق المساعد طريقة تنفيذ VoiceInteractionSessionService وVoiceInteractionSession كما هو موضّح في هذا المثال من VoiceInteraction. ويجب أيضًا الحصول على إذن BIND_VOICE_INTERACTION. يمكن للمساعد عندئذٍ استلام العرض الهرمي للنص والعرض الممثّل كمثيل للسمة AssistStructure في onHandleAssist(). يتلقّى لقطة الشاشة من خلال onHandleScreenshot().