יצירת חוויות שליחת הודעות באמצעות תבניות ל-Android Auto

התכונה 'חוויות שימוש להעברת הודעות מבוססות תבניות' נמצאת בגרסת בטא
בשלב הזה, כל אחד יכול לפרסם אפליקציות תקשורת עם חוויות צופים במודעות מבוססות תבניות בערוצי בדיקה פנימית ובדיקה בקבוצות מוגדרות בחנות Play. בהמשך תהיה אפשרות לפרסם במסלולים לבדיקה פתוחה לציבור ולסביבת הייצור.

בנוסף לחוויית השימוש הבסיסית בהודעות שמבוססת על התראות לקריאה ולמענה להודעות, 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 לאותו ערך. מידע נוסף זמין במאמר בנושא רמת ה-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 במסלולים האלה יידחו.