بهینه‌سازی محتوای زمینه‌ای برای «دستیار»

‫Android 6.0 Marshmallow روش جدیدی را برای تعامل کاربران با برنامه‌ها ازطریق برنامه‌های دستیار، مثل دستیار Google، معرفی می‌کند. دستیار پنجره‌ای سطح بالا است که کاربران می‌توانند آن را مشاهده کنند تا کنش‌های مرتبط با بافت برای فعالیت کنونی را دریافت کنند. این اقدامات ممکن است شامل پیوندهای عمیق به برنامه‌های دیگر در دستگاه باشد.

کاربران با فشار طولانی دادن روی دکمه «صفحه اصلی» یا با گفتن عبارت کلیدی دستیار را فعال می‌کنند. در پاسخ، سیستم پنجره سطح بالایی را باز می‌کند که کنش‌های مربوط به بافت را نمایش می‌دهد.

برنامه دستیار، مانند «دستیار Google»، پنجره رونهاد دستیار را ازطریق ویژگی‌ای به‌نام «اکنون در یک نگاه» پیاده‌سازی می‌کند که با عملکرد سطح پلاتفرم Android کار می‌کند. سیستم به کاربر اجازه می‌دهد برنامه دستیاری را انتخاب کند که بااستفاده از Android’s Assist API اطلاعات زمینه‌ای را از برنامه شما دریافت می‌کند.

این راهنما توضیح می‌دهد که برنامه‌های Android چگونه از «میانای برنامه‌سازی کاربردی دستیار» Android برای بهبود تجربه کاربری دستیار استفاده می‌کنند. برای آشنایی با نحوه ایجاد برنامه رسانه به‌طوری که «دستیار» بتواند آن را راه‌اندازی و کنترل کند، به «دستیار Google» و برنامه‌های رسانه مراجعه کنید.

استفاده از دستیاران

شکل ۱ تعامل معمول کاربر با دستیار را نشان می‌دهد. وقتی کاربر دکمه «صفحه اصلی» را فشار طولانی می‌دهد، بازخوان‌های Assist API در برنامه منبع فراخوانده می‌شوند (مرحله ۱). دستیار پنجره رونهاد را ارائه می‌کند (مراحل ۲ و ۳)، و سپس کاربر کنش موردنظر را برای انجام انتخاب می‌کند. دستیار کنش انتخاب‌شده را اجرا می‌کند، مثلاً با پیوند عمیق به برنامه رستوران (مقصد) هدف راه‌اندازی می‌کند (مرحله ۴).

شکل ۱. نمونه تعامل «دستیار» با ویژگی «اکنون در صفحه» در «برنامه Google»

کاربران می‌توانند دستیار را با انتخاب تنظیمات > برنامه‌ها > برنامه‌های پیش‌فرض > دستیار و ورودی صوتی پیکربندی کنند. کاربران می‌توانند گزینه‌های سیستم را تغییر دهند، برای مثال، به محتوای صفحه به‌صورت نوشتار دسترسی داشته باشند و به نماگرفت دسترسی داشته باشند، همان‌طور که در «شکل ۲» نشان داده شده است.

شکل ۲. تنظیمات دستیار و ورودی گفتاری

برنامه منبع

برای اطمینان از اینکه برنامه‌تان به‌عنوان منبع اطلاعات کاربر با دستیار کار می‌کند، فقط باید از روش‌های مطلوب دسترسی‌پذیری پیروی کنید. این بخش نحوه ارائه اطلاعات تکمیلی را برای کمک به بهبود تجربه کاربری دستیار و همچنین سناریوهایی که نیاز به مدیریت ویژه دارند، مانند «نماهای» سفارشی، شرح می‌دهد.

هم‌رسانی اطلاعات تکمیلی با دستیار

علاوه‌بر نوشتار و نماگرفت، برنامه شما می‌تواند اطلاعات دیگری را با دستیار هم‌رسانی کند. برای مثال، برنامه موسیقی شما می‌تواند انتخاب کند که اطلاعات آلبوم فعلی را ارسال کند تا دستیار بتواند کنش‌های هوشمندانه‌تری را که برای فعالیت فعلی سفارشی‌سازی شده‌اند پیشنهاد دهد. توجه داشته باشید که «میاناهای برنامه‌سازی کاربردی دستیار» کنترل‌های رسانه ارائه نمی‌دهند. برای افزودن کنترل‌های رسانه، به «دستیار Google» و برنامه‌های رسانه مراجعه کنید.

برنامه شما برای ارائه اطلاعات تکمیلی به دستیار، با ثبت شنونده برنامه، زمینه برنامه سراسری ارائه می‌دهد و اطلاعات مختص فعالیت را با برگشت‌های فعالیت همان‌طور که در «شکل ۳» نشان داده شده است ارائه می‌کند:

شکل ۳. نمودار توالی چرخه حیات Assist API

برای ارائه بافت برنامه جهانی، برنامه پیاده‌سازی Application.OnProvideAssistDataListener را ایجاد می‌کند و آن را بااستفاده از registerOnProvideAssistDataListener() ثبت می‌کند. برای ارائه اطلاعات زمینه‌ای خاص فعالیت، فعالیت onProvideAssistData() و onProvideAssistContent() را ملغی می‌کند. دو روش فعالیت پس‌از فراخوانی شدن برگشت‌پذیر اختیاری جهانی نامیده می‌شوند. چون برگشتی‌ها در رشته اصلی اجرا می‌شوند، باید سریعاً تکمیل شوند. فراخوانی‌های برگشتی فقط زمانی فراخوانده می‌شوند که فعالیت درحال اجرا باشد.

ارائه زمینه

وقتی کاربر دستیار را فعال می‌کند، onProvideAssistData() فراخوانده می‌شود تا «هدف» ACTION_ASSIST را با همه زمینه‌های برنامه کنونی که به‌عنوان نمونه‌ای از AssistStructure نشان داده می‌شود بسازد. می‌توانید این روش را ملغی کنید تا هر چیزی را که می‌خواهید در دسته‌ای قرار دهید تا در بخش EXTRA_ASSIST_CONTEXT هدف یاریگر ظاهر شود.

درحال توصیف محتوا

برنامه شما می‌تواند onProvideAssistContent() را پیاده‌سازی کند تا با ارائه ارجاع‌های مرتبط با محتوا مربوط به فعالیت فعلی، تجربه کاربری دستیار را بهبود بخشد. می‌توانید محتوای برنامه را بااستفاده از واژگان مشترک تعریف‌شده توسط Schema.org ازطریق شیء JSON-LD توصیف کنید. در مثال زیر، یک برنامه موسیقی داده‌های ساختاری برای توصیف آلبوم موسیقی که کاربر درحال مشاهده آن است ارائه می‌دهد:

کاتلین

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
}

جاوا

@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() پاسخ‌گویی پیاده‌سازی نشده باشد، سیستم همچنان ادامه می‌دهد و اطلاعات جمع‌آوری‌شده خودکار را به دستیار منتقل می‌کند، مگر اینکه پنجره فعلی به‌عنوان ایمن پرچم‌گذاری شده باشد. همان‌طور که در «شکل ۳» نشان داده شده است، سیستم از پیاده‌سازی‌های پیش‌فرض onProvideStructure() و onProvideVirtualStructure() برای جمع‌آوری اطلاعات نوشتار و سلسله‌مراتب نمایشی استفاده می‌کند. اگر نمای شما طراحی نوشتار سفارشی را پیاده‌سازی می‌کند، با ملغی کردن onProvideStructure()، نوشتاری را که با فراخوانی setText(CharSequence) به کاربر نشان داده می‌شود به دستیار ارائه دهید.

در اکثر موارد، پیاده‌سازی پشتیبانی از دسترس‌پذیری به دستیار امکان می‌دهد اطلاعات موردنیاز خود را به‌دست آورد. برای پیاده‌سازی پشتیبانی از دسترس‌پذیری، روال‌های مطلوب شرح‌داده‌شده در ایجاد برنامه‌های دسترس‌پذیر، ازجمله موارد زیر را رعایت کنید:

به‌استثنای بازدیدهای دستیارها

برای مدیریت اطلاعات حساس، برنامه شما می‌تواند نمای فعلی را با تنظیم پارامتر چیدمان FLAG_SECURE در WindowManager از دستیار مستثنا کند. باید FLAG_SECURE را به‌طور صریح برای هر پنجره‌ای که فعالیت ایجاد می‌کند، ازجمله کادرهای گفتگو، تنظیم کنید. برنامه شما همچنین می‌تواند از setSecure() برای حذف سطحی از دستیار استفاده کند. هیچ سازوکار جهانی (سطح برنامه) برای مستثنا کردن همه بازدیدها از دستیار وجود ندارد. توجه داشته باشید که FLAG_SECURE باعث نمی‌شود بازخوان‌های «میانای برنامه‌سازی کاربردی دستیار» از کار بیفتند. فعالیتی که از FLAG_SECURE استفاده می‌کند همچنان می‌تواند بااستفاده از بازخوان‌های شرح‌داده‌شده در این راهنما، اطلاعات را به‌طور صریح به برنامه دستیار ارائه دهد.

توجه: برای حساب‌های سازمانی (Android for Work)، سرپرست می‌تواند بااستفاده از روش setScreenCaptureDisabled() در DevicePolicyManager API، جمع‌آوری داده‌های دستیار را برای نمایه کاری غیرفعال کند.

تعاملات صوتی

بازخوان‌های «میانای برنامه‌سازی کاربردی دستیار» نیز هنگام تشخیص عبارت کلیدی فراخوانده می‌شوند. برای اطلاعات بیشتر، به مستندات کنش‌های صوتی مراجعه کنید.

ملاحظات ترتیب Z

دستیار از پنجره رونهاد سبک‌وزنی که در بالای فعالیت فعلی نمایش داده می‌شود استفاده می‌کند. ازآنجایی‌که کاربر می‌تواند دستیار را در هر زمانی فعال کند، پنجره‌های هشدار سیستم دائمی که با پنجره رونهاد تداخل ایجاد می‌کند، همان‌طور که در «شکل ۴» نشان داده شده است، ایجاد نکنید.

شکل ۴. ترتیب Z لایه «دستیار»

اگر برنامه‌تان از پنجره‌های هشدار سیستم استفاده می‌کند، آن‌ها را فوراً بردارید زیرا باقی ماندن آن‌ها در صفحه‌نمایش تجربه کاربری را تنزل می‌دهد.

برنامه مقصد

برنامه‌های دستیار معمولاً از پیونددهی عمیق برای یافتن برنامه‌های مقصد استفاده می‌کنند. برای اینکه برنامه شما به برنامه مقصد بالقوه تبدیل شود، پشتیبانی از پیوند عمیق را اضافه کنید. تطابق بین زمینه کاربر فعلی و پیوندهای عمیق یا کنش‌های بالقوه دیگر که در پنجره رونهاد (در مرحله ۳ در «شکل ۱» نشان داده شده است) نمایش داده می‌شود مختص پیاده‌سازی «دستیار Google» است. برای مثال، «برنامه دستیار Google» از پیونددهی عمیق و پیوندهای برنامه برای هدایت ترافیک به برنامه‌های مقصد استفاده می‌کند.

پیاده‌سازی دستیار خودتان

شاید بخواهید دستیار خودتان را پیاده‌سازی کنید. همان‌طور که در شکل ۲ نشان داده شده است، کاربر می‌تواند برنامه دستیار فعال را انتخاب کند. برنامه دستیار باید پیاده‌سازی VoiceInteractionSessionService و VoiceInteractionSession را همان‌طور که در این مثال VoiceInteraction نشان داده شده است ارائه دهد. این ویژگی به اجازه BIND_VOICE_INTERACTION نیز نیاز دارد. سپس دستیار می‌تواند نوشتار را دریافت کند و سلسله‌مراتب نمایش‌داده‌شده به‌عنوان نمونه‌ای از AssistStructure در onHandleAssist() را مشاهده کند. نماگرفت را ازطریق onHandleScreenshot() دریافت می‌کند.