بالإضافة إلى تجربة المراسلة الأساسية المستندة إلى الإشعارات لقراءة الرسائل والردّ عليها، يتيح 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، يجب عدم الترويج للإصدارات التي تتيح استخدام ميزات المراسلة المستندة إلى النماذج في مسارات الاختبار المفتوح أو الإصدار العلني، لأنّه سيتم رفض العينات التي تحتوي على إصدارات في هذه المسارات.