בנוסף לחוויית שליחת ההודעות הבסיסית שמבוססת על התראות לקריאה ולמענה להודעות, ב-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>
הגדרת רמת ה-API המינימלית של אפליקציית הרכב
מכיוון ש-API של ConversationItem
נתמך רק ב-Car API בגרסה 7 ואילך, צריך גם להגדיר את המטא-נתונים של minCarApiLevel
לערך הזה. מידע נוסף זמין במאמר רמת ה-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 אלפיות השנייה או פחות. אם הרענון מתבצע לעיתים קרובות אבל נמשך זמן רב, אפשר להציג סטטוס טעינה בזמן הטעינה של ההודעות הנכנסות.
הגדרת החשיבות של ההתראות בצורה מתאימה
כדי לצמצם את הסחות הדעת, האפליקציה צריכה להפחית את מידת החשיבות של התראות נכנסות כשמשתמש צופה בשיחה תואמת, כך שההתראות לא יופיעו כ'התראות מראש' (HUN).
כדי לעקוב אחרי הסטטוס של שיחה, אפשר לעיין במחזור החיים של ה-Screen
שמוצגת בה. מחזור החיים של מסך
כדי למנוע הצגה של התראה כ-HUN, צריך להגדיר את העדיפות ל-IMPORTANCE_DEFAULT
או נמוכה יותר.
הפצת אפליקציות להעברת הודעות עם תבניות
מאחר שאפליקציות שתומכות בחוויית שליחת הודעות באמצעות תבניות אפשר לפרסם רק במסלולי בדיקה פנימית ובדיקה בקבוצה מוגדרת ב-Google Play, אל תקדמו גרסאות build שכוללות תמיכה במסלולי בדיקה של הקהל הרחב או ייצור, כי בקשות שכוללות גרסאות build במסלולים האלה יידחו.