تجربه‌های پیام‌رسانی الگو را برای Android Auto بسازید

تجربه‌های پیام‌رسانی قالب‌بندی‌شده در مرحله بتا هستند
در حال حاضر، هر کسی می‌تواند برنامه‌های ارتباطی با تجربیات پیام‌رسانی قالب‌بندی‌شده را برای آزمایش داخلی و مسیرهای آزمایش بسته در فروشگاه Play منتشر کند. انتشار برای مسیرهای آزمایش باز و تولید در تاریخ بعدی مجاز خواهد بود.

علاوه بر تجربه پیام‌رسانی مبتنی بر اعلان برای خواندن و پاسخ دادن به پیام‌ها، اندروید اتو از تجربیات پیام‌رسانی غنی‌تری که با استفاده از کتابخانه برنامه اندروید برای خودروها ساخته شده‌اند، پشتیبانی می‌کند.

پشتیبانی از پیام‌رسانی مبتنی بر اعلان

تمام برنامه‌هایی که از تجربه‌های پیام‌رسانی قالب‌بندی‌شده پشتیبانی می‌کنند، باید اعلان‌های پیام‌رسانی را نیز برای 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 را نیز روی آن مقدار تنظیم کنید. برای اطلاعات بیشتر به Car App API Level مراجعه کنید.

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

اعلام پشتیبانی از اندروید اتو

در فایل automotive_app_desc.xml که برای اعلام پشتیبانی از Android Auto استفاده می‌کنید، تأیید کنید که هم قابلیت‌های notification و هم template اعلام شده باشند:

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

اگر برنامه شما می‌تواند به عنوان مدیریت‌کننده پیش‌فرض پیامک تنظیم شود، حتماً عنصر <uses> زیر را اضافه کنید. در غیر این صورت، یک مدیریت‌کننده پیش‌فرض که در Android Auto تعبیه شده است برای مدیریت پیامک‌ها/MMSهای دریافتی استفاده خواهد شد که می‌تواند منجر به ارسال اعلان‌های تکراری شود.

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

نمایش مکالمات

برای نمایش خلاصه‌ای از مکالمات یک کاربر، می‌توانید فهرستی از اشیاء ConversationItem را در یک ListTemplate یا SectionedItemTemplate نمایش دهید.

برای یک تجربه کاربری خوب، توصیه می‌کنیم حداکثر ۵ تا ۱۰ مکالمه اخیر یا مهم را ارائه دهید، و برای هر مکالمه بیش از ۵ پیام اخیر ارائه ندهید. این کار به بهبود عملکرد بارگیری کمک می‌کند، به کاربران امکان می‌دهد مرتبط‌ترین محتوا را ببینند و زمان تعامل را کاهش دهد.

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() رفرش کنید. به Refresh the contents of a template مراجعه کنید.

برای بهترین تجربه کاربری، توصیه می‌کنیم زمان به‌روزرسانی را روی ۵۰۰ میلی‌ثانیه یا کمتر نگه دارید. اگر به‌روزرسانی مکرر بیشتر طول می‌کشد، می‌توانید هنگام بارگیری پیام‌های دریافتی، وضعیت بارگیری را نمایش دهید.

اهمیت اعلان‌ها را به طور مناسب تنظیم کنید

برای کاهش حواس‌پرتی، برنامه شما باید اهمیت اعلان‌های دریافتی را هنگامی که کاربر در حال مشاهده مکالمه مربوطه است، کاهش دهد تا اعلان‌ها به عنوان اعلان‌های هشدار (HUN) ظاهر نشوند.

شما می‌توانید با مشاهده چرخه حیات Screen که یک مکالمه را نمایش می‌دهد، متوجه شوید که آیا قابل مشاهده است یا خیر. به چرخه حیات یک صفحه نمایش مراجعه کنید.

برای جلوگیری از نمایش اعلان به عنوان HUN، اولویت را روی IMPORTANCE_DEFAULT یا کمتر تنظیم کنید.

توزیع برنامه‌های پیام‌رسان قالب‌بندی‌شده

از آنجا که برنامه‌هایی که از تجربیات پیام‌رسانی قالب‌بندی‌شده پشتیبانی می‌کنند، فقط می‌توانند در مسیرهای تست داخلی و تست بسته در گوگل پلی منتشر شوند، نباید نسخه‌هایی را که شامل پشتیبانی از مسیرهای تست باز یا تولید هستند، تبلیغ کنید، زیرا ارسال‌های حاوی نسخه‌هایی که در این مسیرها قرار دارند، رد خواهند شد.