Android Auto के लिए, टेंप्लेट वाले मैसेज सेवा के अनुभव बनाना

टेंप्लेट की मदद से मैसेज भेजने की सुविधा, बीटा वर्शन में उपलब्ध है
फ़िलहाल, कोई भी व्यक्ति Play Store पर इंटरनल टेस्टिंग और क्लोज़्ड टेस्टिंग ट्रैक में, टेंप्लेट वाले मैसेजिंग अनुभवों के साथ कम्यूनिकेशन ऐप्लिकेशन पब्लिश कर सकता है. ओपन टेस्टिंग और प्रोडक्शन ट्रैक पर ऐप्लिकेशन को पब्लिश करने की अनुमति बाद में दी जाएगी.

Android Auto पर, मैसेज पढ़ने और उनका जवाब देने के लिए, सूचनाओं के ज़रिए मैसेज पाने की बुनियादी सुविधा के अलावा, कार के लिए Android ऐप्लिकेशन लाइब्रेरी का इस्तेमाल करके बनाई गई, मैसेज पाने की बेहतर सुविधाएं भी मिलती हैं.

सूचनाओं की मदद से मैसेज सेवा देने की सुविधाएं

टेंप्लेट वाले मैसेज भेजने की सुविधा देने वाले सभी ऐप्लिकेशन को, Android Auto के लिए मैसेज की सूचनाएं भेजने की सुविधा भी देनी होगी. इससे यह पक्का होता है कि उपयोगकर्ता, टेंप्लेट वाला ऐप्लिकेशन खोले बिना मैसेज पढ़ सकें और उनका जवाब दे सकें.

टेंप्लेट के हिसाब से मैसेज भेजने की सुविधा बनाना

अपने ऐप्लिकेशन के टेंप्लेट वाले वर्शन को बनाने के लिए, 'कार के लिए Android ऐप्लिकेशन' की लाइब्रेरी का इस्तेमाल करना और अपने टेंप्लेट वाले ऐप्लिकेशन में Android Auto के लिए सहायता जोड़ना में दिए गए निर्देशों का पालन करें. इसके बाद, टेंप्लेट वाले मैसेजिंग ऐप्लिकेशन से जुड़ी खास ज़रूरी शर्तों को समझने के लिए, इस पेज पर दिए गए दिशा-निर्देश देखें.

अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइलों को कॉन्फ़िगर करना

Android Auto को अपने ऐप्लिकेशन की सुविधाओं के बारे में बताने के लिए, आपके ऐप्लिकेशन को ये काम करने होंगे:

अपने मेनिफ़ेस्ट में, कैटगरी के साथ काम करने की जानकारी देना

आपके ऐप्लिकेशन को अपने CarAppService के इंटेंट फ़िल्टर में, androidx.car.app.category.MESSAGING कार ऐप्लिकेशन की कैटगरी की जानकारी देनी होगी.

<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 के साथ काम करने की जानकारी देना

Android Auto के साथ काम करने की सुविधा का एलान करने के लिए इस्तेमाल की जाने वाली automotive_app_desc.xml फ़ाइल में, पक्का करें कि notification और template, दोनों की सुविधाओं का एलान किया गया हो:

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

अगर आपके ऐप्लिकेशन को डिफ़ॉल्ट एसएमएस हैंडलर के तौर पर सेट किया जा सकता है, तो यहां दिया गया <uses> एलिमेंट ज़रूर शामिल करें. ऐसा न करने पर, इनकमिंग एसएमएस/एमएमएस मैसेज को मैनेज करने के लिए, Android Auto में पहले से मौजूद डिफ़ॉल्ट हैंडलर का इस्तेमाल किया जाएगा. इससे डुप्लीकेट सूचनाएं मिल सकती हैं.

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

बातचीत दिखाना

किसी उपयोगकर्ता की बातचीत की खास जानकारी दिखाने के लिए, ListTemplate या SectionedItemTemplate में ConversationItem ऑब्जेक्ट की सूची दिखाई जा सकती है.

हमारा सुझाव है कि उपयोगकर्ता को बेहतरीन अनुभव देने के लिए, ज़्यादा से ज़्यादा पांच से 10 सबसे हाल ही की या सबसे ज़रूरी बातचीत दिखाएं. साथ ही, हर बातचीत के लिए पांच से ज़्यादा हाल ही के मैसेज न दिखाएं. इससे, लोडिंग की परफ़ॉर्मेंस बेहतर होती है. साथ ही, यह पक्का होता है कि उपयोगकर्ताओं को सबसे काम का कॉन्टेंट दिखे. इससे इंटरैक्शन का समय भी कम होता है.

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, मैसेज को चलाने, उसे पढ़ा गया के तौर पर मार्क करने, और उस पर जवाब देने के लिए कार्रवाइयां अपने-आप दिखाता है. इन कार्रवाइयों को ConversationItem बनाते समय दिए गए ConversationCallbackDelegate से मैनेज किया जाता है.

अगर आपका ऐप्लिकेशन बातचीत के लिए शॉर्टकट उपलब्ध कराता है, तो पक्का करें कि ConversationItem बनाते समय दिया गया आईडी, उस बातचीत के शॉर्टकट के आईडी से मेल खाता हो.

बातचीत अपडेट करना

जब उपयोगकर्ता मैसेज भेजते और पाते हैं, तो आपको अपने ऐप्लिकेशन की स्क्रीन रीफ़्रेश करनी चाहिए, ताकि नए मैसेज शामिल किए जा सकें. इसके लिए, invalidate() को कॉल करें. टेंप्लेट के कॉन्टेंट को रीफ़्रेश करना लेख पढ़ें.

हमारा सुझाव है कि उपयोगकर्ता को बेहतरीन अनुभव देने के लिए, रीफ़्रेश करने में लगने वाला समय 500 मिलीसेकंड या उससे कम रखें. अगर बार-बार रीफ़्रेश करने में ज़्यादा समय लगता है, तो आने वाले मैसेज लोड होने के दौरान, लोड होने की स्थिति दिखाई जा सकती है.

सूचना की अहमियत को सही तरीके से सेट करना

आपके ऐप्लिकेशन का इस्तेमाल करते समय, अगर कोई उपयोगकर्ता किसी बातचीत को देख रहा है, तो ऐप्लिकेशन को आने वाली सूचनाओं की अहमियत कम करनी चाहिए. इससे सूचनाएं, हेड अप सूचनाओं (एचयूएन) के तौर पर नहीं दिखेंगी.

किसी बातचीत के दिखने की स्थिति को ट्रैक करने के लिए, उसे दिखाने वाले Screen के लाइफ़साइकल को देखें. स्क्रीन का लाइफ़साइकल देखें.

किसी सूचना को 'हाइलाइट की गई सूचना' के तौर पर दिखने से रोकने के लिए, प्राथमिकता को IMPORTANCE_DEFAULT या उससे कम पर सेट करें.

टेंप्लेट वाले मैसेजिंग ऐप्लिकेशन उपलब्ध कराना

टेंप्लेट वाले मैसेजिंग अनुभव की सुविधा देने वाले ऐप्लिकेशन, Google Play पर सिर्फ़ इंटरनल टेस्टिंग और क्लोज़्ड टेस्टिंग ट्रैक पर पब्लिश किए जा सकते हैं. इसलिए, आपको ऐसे बिल्ड का प्रमोशन नहीं करना चाहिए जिनमें ओपन टेस्टिंग या प्रोडक्शन ट्रैक के लिए सहायता शामिल हो. ऐसा इसलिए, क्योंकि उन ट्रैक पर बिल्ड वाले सबमिशन अस्वीकार कर दिए जाएंगे.