إنشاء تجارب مراسلة مستندة إلى النماذج لنظام التشغيل Android Auto

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

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

إتاحة تجارب المراسلة المستندة إلى الإشعارات

على جميع التطبيقات التي تتيح تجارب المراسلة المستندة إلى النماذج أيضًا توسيع نطاق إشعارات المراسلة لنظام التشغيل Android Auto. يضمن ذلك أن يتمكّن المستخدمون من قراءة الرسائل والردّ عليها بدون الحاجة إلى فتح التطبيق المستنِد إلى نموذج.

إنشاء تجربة مراسلة مستندة إلى النماذج

اتّبِع الإرشادات الواردة في مقالتَي استخدام مكتبة تطبيقات "Android للسيارات" وإضافة ميزة التوافق مع Android Auto إلى تطبيقك المستنِد إلى نموذج للبدء في إنشاء تجربة المستنِدة إلى نموذج في تطبيقك. بعد ذلك، راجِع الإرشادات الواردة في هذه الصفحة للتعرّف على المتطلبات المحدّدة لتطبيقات المراسلة المستندة إلى النماذج.

ضبط ملفات بيان تطبيقك

لإعلام Android Auto بإمكانات تطبيقك، يجب أن ينفِّذ تطبيقك ما يلي:

تحديد فئات التطبيقات المتوافقة في البيان

يجب أن يعرِض تطبيقك androidx.car.app.category.MESSAGING فئة التطبيقات المخصّصة للسيارات في فلتر الأهداف لملف البيان الخاص بملفه CarAppService.

<application>
    ...
   <service
       ...
        android:name=".MyCarAppService"
        android:exported="true">
      <intent-filter>
        <action android:name="androidx.car.app.CarAppService" />
        <category android:name="androidx.car.app.category.MESSAGING"/>
      </intent-filter>
    </service>
    ...
<application>

ضبط الحد الأدنى لمستوى واجهة برمجة التطبيقات لتطبيق السيارة

بما أنّ واجهة برمجة التطبيقات ConversationItem متوافقة فقط مع Car API 7 أو الإصدارات الأحدث، عليك أيضًا ضبط البيانات الوصفية minCarApiLevel على تلك القيمة. اطّلِع على مستوى واجهة برمجة التطبيقات لتطبيقات السيارات للحصول على مزيد من المعلومات.

<application ...>
    ...
    <meta-data
        android:name="androidx.car.app.minCarApiLevel"
        android:value="7"/>
    ...
</application>

الإفصاح عن توافق التطبيق مع Android Auto

في ملف automotive_app_desc.xml الذي تستخدمه للإشارة إلى توافق التطبيق مع Android Auto، تأكَّد من الإشارة إلى كل من ميزتَي notification و template:

<automotiveApp>
    <uses name="notification" />
    <uses name="template" />
</automotiveApp>

إذا كان من الممكن ضبط تطبيقك على أنّه معالج الرسائل القصيرة التلقائي، احرص على تضمين عنصر <uses> التالي. وفي حال عدم إجراء ذلك، سيتم استخدام معالج تلقائي مدمج في Android Auto لمعالجة الرسائل القصيرة SMS/MMS القادمة، ما قد يؤدي إلى ظهور إشعارات مكرّرة.

<automotiveApp>
    ...
    <uses name="sms" />
</automotiveApp>

عرض المحادثات

لعرض نظرة عامة على محادثات أحد المستخدِمين، يمكنك عرض قائمة بالكائنات ConversationItem في ملف شخصي ListTemplate أو SectionedItemTemplate.

لتقديم أفضل تجربة للمستخدم، ننصحك بتوفير ما بين 5 و10 من المحادثات الأخيرة أو الأكثر أهمية على الأكثر، مع عدم تضمين أكثر من 5 من الرسائل الأخيرة لكل محادثة. يساعد ذلك في تحسين أداء التحميل، ويضمن أن يرى المستخدمون المحتوى الأكثر صلة بهم، ويقلل من وقت التفاعل.

class MyMessagingScreen() : Screen() {

    override fun onGetTemplate(): Template {
        val itemListBuilder = ItemList.Builder()
        val conversations: List<MyConversation> = // Retrieve conversations

        for (conversation: MyConversation in conversations) {
            val carMessages: List<CarMessage> = conversation.getMessages()
                .map { message ->
                    // CarMessage supports additional fields such as MIME type and URI,
                    // which you should set if available
                    CarMessage.Builder()
                        .setSender(message.sender)
                        .setBody(message.body)
                        .setReceivedTimeEpochMillis(message.receivedTimeEpochMillis)
                        .setRead(message.isRead)
                        .build()
                }

            itemListBuilder.addItem(
                ConversationItem.Builder()
                    .setConversationCallback { /* Implement your conversation callback logic here */ }
                    .setId(/* Set conversation ID */)
                    .setTitle(/* Set conversation title */)
                    .setIcon(/* Set conversation icon if available */)
                    .setMessages(carMessages)
                    /* When the sender of a CarMessage is equal to this Person,
                    message readout is adjusted to "you said" instead of "<person>
                    said" */
                    .setSelf(/* Set self-sender */)
                    .setGroupConversation(/* Set if the message contains more than 2 participants */)
                    .build()
            )
        }

        return ListTemplate.Builder()
            .setTitle("Conversations")
            .setHeaderAction(Action.APP_ICON)
            .setSingleList(itemListBuilder.build())
            .build()
    }
}

يعرض كل ConversationItem تلقائيًا إجراءات تشغيل رسالة ووضع علامة عليها كرسالة تمت قراءتها والرد عليها. تعالج هذه الإجراءات ConversationCallbackDelegate التي تقدّمها عند إنشاء ConversationItem.

إذا كان تطبيقك يقدّم اختصارات للمحادثات، تأكَّد من أنّ المعرّف المقدَّم عند إنشاء ConversationItem هو نفسه معرّف اختصار تلك المحادثة.

تعديل المحادثات

عندما يرسل المستخدمون الرسائل ويتلقّونها، عليك إعادة تحميل شاشات تطبيقك لإضافة الرسائل الجديدة من خلال الاتصال بالرقم invalidate(). راجِع مقالة تعديل محتويات نموذج.

للحصول على أفضل تجربة للمستخدم، ننصحك بضبط أوقات التحديث على 500 ملي ثانية أو أقل. إذا استغرقت عملية إعادة التحميل وقتًا أطول بشكل متكرر، يمكنك عرض حالة loading (تحميل) أثناء تحميل الرسائل الواردة.

ضبط أهمية الإشعارات بشكلٍ مناسب

للحدّ من التشتيت، يجب أن يقلّل تطبيقك من أهمية الإشعارات القادمة عندما يكون المستخدم يشاهد محادثة مقابلة، وذلك كي لا تظهر الإشعارات كإشعارات تنبيهية (HUN).

يمكنك تتبُّع ما إذا كانت المحادثة مرئية من خلال مراقبة مراحل نشاط Screen الذي يعرضها. اطّلِع على رحلة الشاشة.

لمنع ظهور إشعار على أنّه إشعار مهم، اضبط الأولوية على IMPORTANCE_DEFAULT أو أقل.

توزيع تطبيقات المراسلة المستندة إلى النماذج

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