בנוסף לחוויית ההודעות הבסיסית שמבוססת על התראות לקריאה ולמענה להודעות, Android Auto תומכת בחוויית הודעות עשירה יותר שמבוססת על ספריית האפליקציות של Android למכוניות.
תמיכה בחוויית העברת הודעות מבוססת-התראות
כל האפליקציות שתומכות בחוויית העברת הודעות מבוססת-תבניות צריכות גם להרחיב את ההתראות על הודעות ב-Android Auto. השילוב הזה מאפשר למשתמשים לקרוא הודעות ולהשיב להן בלי לפתוח את האפליקציה שמבוססת על תבנית.
יצירת חוויית העברת הודעות מבוססת-תבנית
כדי להתחיל ליצור את חוויית השימוש באפליקציה שלכם באמצעות תבניות, אפשר להיעזר בהוראות שבמאמרים שימוש בספריית האפליקציות של Android למכוניות והוספת תמיכה ב-Android Auto לאפליקציה מבוססת-תבניות. לאחר מכן, מעיינים בהנחיות שבדף הזה כדי להבין את הדרישות הספציפיות לאפליקציות הודעות עם תבניות.
הגדרת קובצי המניפסט של האפליקציה
כדי לעדכן את Android Auto לגבי היכולות של האפליקציה, האפליקציה צריכה לבצע את הפעולות הבאות:
הצהרה על תמיכה בקטגוריה במניפסט
באפליקציה צריך להצהיר על androidx.car.app.category.MESSAGING קטגוריית אפליקציית הרכב במסנן ה-Intent של 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>
<category>
הגדרת רמת ה-API המינימלית של אפליקציית הרכב
מכיוון ש-API ConversationItem נתמך רק ב-Car API מגרסה 7 ואילך, צריך להגדיר את המטא-נתונים minCarApiLevel לאותו ערך. מידע נוסף זמין במאמר בנושא רמת Car App API.
<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>
אם אפשר להגדיר את האפליקציה כמטפל ברירת המחדל ב-SMS, צריך לכלול את רכיב <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 אלפיות השנייה או פחות. אם רענון תכוף נמשך זמן רב יותר, אפשר להציג מצב טעינה בזמן טעינת ההודעות הנכנסות.
הגדרת החשיבות של ההתראות בצורה מתאימה
כדי להפחית את ההסחות, האפליקציה צריכה להפחית את רמת החשיבות של התראות נכנסות כשמשתמש צופה בשיחה תואמת, כדי שההתראות לא יופיעו כהתראות קופצות.
כדי לדעת אם שיחה גלויה, אפשר לעקוב אחרי מחזור החיים של הסמל Screen שמופיע לידה. מחזור החיים של מסך
כדי למנוע מהתראה להופיע כהתראה שדורשת התייחסות מיידית, צריך להגדיר את העדיפות ל-IMPORTANCE_DEFAULT או נמוכה יותר.
הפצה של אפליקציות להעברת הודעות עם תבניות
אפשר לפרסם אפליקציות שתומכות בחוויית שימוש עם הודעות מוכנות מראש רק במסלולים של בדיקה פנימית ובדיקה בקבוצה מוגדרת ב-Google Play. לכן, לא מומלץ לקדם גרסאות build שכוללות תמיכה במסלולים של בדיקה של הקהל הרחב או ייצור, כי שליחות שמכילות גרסאות build במסלולים האלה יידחו.