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

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

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

सूचनाओं की मदद से मैसेज भेजने की सुविधा उपलब्ध कराना

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

टेम्पलेट का इस्तेमाल करके मैसेज भेजने की सुविधा बनाना

अपने ऐप्लिकेशन के लिए टेंप्लेट वाली सुविधा बनाना शुरू करने के लिए, Android for Cars App Library का इस्तेमाल करना और टेंप्लेट वाले ऐप्लिकेशन में 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 API सिर्फ़ CarAPI 7 या इसके बाद के वर्शन पर काम करता है. इसलिए, आपको minCarApiLevel मेटाडेटा को भी उसी वैल्यू पर सेट करना चाहिए. ज़्यादा जानकारी के लिए, Car App API Level देखें.

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

Android Auto के साथ काम करने की सुविधा के बारे में जानकारी देना

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

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

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

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

बातचीत दिखाएँ

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

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

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

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

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

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

सूचना की प्राथमिकता को सही तरीके से सेट करना

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

यह ट्रैक किया जा सकता है कि कोई बातचीत दिख रही है या नहीं. इसके लिए, आपको उस Screen के लाइफ़साइकल पर नज़र रखनी होगी जो उसे दिखाता है. स्क्रीन का लाइफ़साइकल लेख पढ़ें.

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

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

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