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 एपीआई, सिर्फ़ 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>

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

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

हमारा सुझाव है कि उपयोगकर्ता को बेहतर अनुभव देने के लिए, ज़्यादा से ज़्यादा 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 पर, इंटरनल टेस्टिंग और क्लोज़्ड टेस्टिंग ट्रैक पर पब्लिश किया जा सकता है. इसलिए, ओपन टेस्टिंग या प्रोडक्शन ट्रैक पर सहायता देने वाले बिल्ड का प्रमोशन न करें. ऐसा इसलिए, क्योंकि इन ट्रैक पर बिल्ड सबमिट करने पर, उन्हें अस्वीकार कर दिया जाएगा.