Assistant के लिए काम का कॉन्टेंट ऑप्टिमाइज़ करना

Android 6.0 Marshmallow में, उपयोगकर्ताओं के लिए ऐप्लिकेशन के साथ इंटरैक्ट करने का एक नया तरीका उपलब्ध कराया गया है. इसके लिए, Google Assistant जैसे सहायक ऐप्लिकेशन का इस्तेमाल किया जा सकता है. Assistant एक टॉप-लेवल विंडो है. इसे उपयोगकर्ता, मौजूदा गतिविधि के हिसाब से काम की कार्रवाइयां पाने के लिए देख सकते हैं. इन कार्रवाइयों में डिवाइस पर मौजूद अन्य ऐप्लिकेशन के डीप लिंक शामिल हो सकते हैं.

उपयोगकर्ता, होम बटन को दबाकर या मुख्य बातें बोलकर Assistant को चालू करते हैं. इसके जवाब में, सिस्टम एक टॉप-लेवल विंडो खोलता है, जिसमें संदर्भ के हिसाब से काम की कार्रवाइयां दिखती हैं.

Google Assistant जैसे असिस्टेंट ऐप्लिकेशन, Now on Tap नाम की सुविधा की मदद से असिस्टेंट ओवरले विंडो लागू करते हैं. यह सुविधा, Android प्लैटफ़ॉर्म-लेवल की सुविधा के साथ काम करती है. सिस्टम उपयोगकर्ता को एक Assistant ऐप्लिकेशन चुनने देता है, जो Android के Assist API का इस्तेमाल करके आपके ऐप्लिकेशन से काम की जानकारी लेता है.

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

Assistant का इस्तेमाल किया जा रहा है

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

पहला चित्र. Google ऐप्लिकेशन की टैप पर Now सुविधा के साथ Assistant के साथ इंटरैक्शन का उदाहरण

उपयोगकर्ता सेटिंग > ऐप्लिकेशन > डिफ़ॉल्ट ऐप्लिकेशन > असिस्ट और वॉइस इनपुट को चुनकर, असिस्टेंट को कॉन्फ़िगर कर सकते हैं. उपयोगकर्ता, स्क्रीन पर मौजूद कॉन्टेंट को टेक्स्ट के तौर पर ऐक्सेस करने और स्क्रीनशॉट ऐक्सेस करने जैसे सिस्टम के विकल्प बदल सकते हैं. इन विकल्पों के बारे में दूसरे चित्र में बताया गया है.

दूसरी इमेज. असिस्ट और बोलकर निर्देश देने की सेटिंग

सोर्स ऐप्लिकेशन

यह पक्का करने के लिए कि आपका ऐप्लिकेशन उपयोगकर्ता के लिए जानकारी के स्रोत के तौर पर Assistant के साथ काम करे, आपको सिर्फ़ सुलभता के सबसे सही तरीके अपनाना होगा. इस सेक्शन में, Assistant के उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, ज़्यादा जानकारी देने का तरीका बताया गया है. साथ ही, उन स्थितियों के बारे में भी बताया गया है जिनमें कस्टम व्यू जैसे खास तरीके अपनाने की ज़रूरत होती है.

Assistant के साथ अतिरिक्त जानकारी शेयर करना

टेक्स्ट और स्क्रीनशॉट के अलावा, आपका ऐप्लिकेशन Assistant के साथ अन्य जानकारी भी शेयर कर सकता है. उदाहरण के लिए, आपका म्यूज़िक ऐप्लिकेशन मौजूदा एल्बम की जानकारी को पास करने का विकल्प चुन सकता है, ताकि Assistant मौजूदा गतिविधि के हिसाब से आपको बेहतर कार्रवाइयों के सुझाव दे सके. ध्यान दें कि Assist APIs, मीडिया कंट्रोल की सुविधा नहीं देते. मीडिया कंट्रोल जोड़ने के लिए, Google Assistant और मीडिया ऐप्लिकेशन लेख पढ़ें.

Assistant को ज़्यादा जानकारी देने के लिए, आपका ऐप्लिकेशन ऐप्लिकेशन लिसनर को रजिस्टर करके, ग्लोबल ऐप्लिकेशन कॉन्टेक्स्ट उपलब्ध कराता है. साथ ही, गतिविधि के कॉलबैक के साथ गतिविधि से जुड़ी जानकारी देता है, जैसा कि तीसरे चित्र में दिखाया गया है:

तीसरी इमेज. असिस्ट एपीआई के लाइफ़साइकल सीक्वेंस का डायग्राम

ऐप्लिकेशन के ग्लोबल कॉन्टेक्स्ट की जानकारी देने के लिए, ऐप्लिकेशन Application.OnProvideAssistDataListener को लागू करता है और registerOnProvideAssistDataListener() का इस्तेमाल करके उसे रजिस्टर करता है. गतिविधि के हिसाब से जानकारी देने के लिए, गतिविधि onProvideAssistData() और onProvideAssistContent() को बदल देती है. वैकल्पिक ग्लोबल कॉलबैक को शुरू करने के बाद, गतिविधि के दो तरीकों को कॉल किया जाता है. कॉलबैक मुख्य थ्रेड पर काम करते हैं, इसलिए उन्हें तुरंत पूरा होना चाहिए. कॉलबैक सिर्फ़ तब ट्रिगर होते हैं, जब गतिविधि चल रही हो.

जानकारी देना

जब उपयोगकर्ता Assistant को चालू करता है, तो onProvideAssistData() को ACTION_ASSIST इंटेंट बनाने के लिए कहा जाता है. इसमें, AssistStructure के इंस्टेंस के तौर पर दिखाए गए मौजूदा ऐप्लिकेशन के सभी कॉन्टेक्स्ट शामिल होते हैं. इस तरीके को बदलकर, अपनी पसंद की किसी भी चीज़ को बंडल में डाला जा सकता है, ताकि वह असिस्ट इंटेंट के EXTRA_ASSIST_CONTEXT हिस्से में दिखे.

कॉन्टेंट के बारे में बताना

आपका ऐप्लिकेशन, Assistant की सुविधा वाले उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, onProvideAssistContent() को लागू कर सकता है. इसके लिए, वह मौजूदा गतिविधि से जुड़े कॉन्टेंट की जानकारी दे सकता है. JSON-LD ऑब्जेक्ट की मदद से, Schema.org पर दी गई सामान्य शब्दावली का इस्तेमाल करके, ऐप्लिकेशन के कॉन्टेंट के बारे में बताया जा सकता है. यहां दिए गए उदाहरण में, संगीत ऐप्लिकेशन ने स्ट्रक्चर्ड डेटा का इस्तेमाल करके, उस संगीत एल्बम के बारे में जानकारी दी है जिसे उपयोगकर्ता फ़िलहाल देख रहा है:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

अपनी पसंद के मुताबिक onProvideAssistContent() लागू करके भी, उपयोगकर्ता अनुभव को बेहतर बनाया जा सकता है. इससे ये फ़ायदे मिल सकते हैं:

ध्यान दें: पसंद के मुताबिक टेक्स्ट चुनने की सुविधा का इस्तेमाल करने वाले ऐप्लिकेशन को onProvideAssistContent() को लागू करना होगा और setClipData() को कॉल करना होगा.

डिफ़ॉल्ट रूप से लागू करना

अगर onProvideAssistData() या onProvideAssistContent() कॉलबैक को लागू नहीं किया जाता है, तो भी सिस्टम आगे बढ़कर, अपने-आप इकट्ठा की गई जानकारी को Assistant को भेजता है. ऐसा तब तक होता है, जब तक मौजूदा विंडो को सुरक्षित के तौर पर फ़्लैग न किया गया हो. जैसा कि तीसरे चित्र में दिखाया गया है, सिस्टम टेक्स्ट इकट्ठा करने और हैरारकी की जानकारी देखने के लिए, onProvideStructure() और onProvideVirtualStructure() के डिफ़ॉल्ट तरीके का इस्तेमाल करता है. अगर आपके व्यू में कस्टम टेक्स्ट ड्रॉइंग लागू की गई है, तो onProvideStructure() को बदलें, ताकि उपयोगकर्ता को setText(CharSequence) कॉल करके Assistant को टेक्स्ट दिखाया जा सके.

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

  • android:contentDescription एट्रिब्यूट की वैल्यू दें.
  • कस्टम व्यू के लिए AccessibilityNodeInfo को पॉप्युलेट करें.
  • पक्का करें कि कस्टम ViewGroup ऑब्जेक्ट, अपने बच्चों को सही तरीके से एक्सपोज़र करते हों.

सहायक ऐप्लिकेशन से मिले व्यू को बाहर रखना

संवेदनशील जानकारी मैनेज करने के लिए, आपका ऐप्लिकेशन WindowManager के FLAG_SECURE लेआउट पैरामीटर सेट करके, Assistant से मौजूदा व्यू को बाहर रख सकता है. आपको गतिविधि से बनाई गई हर विंडो के लिए, साफ़ तौर पर FLAG_SECURE को सेट करना होगा. इसमें डायलॉग भी शामिल हैं. आपका ऐप्लिकेशन, Assistant से किसी प्लैटफ़ॉर्म को बाहर रखने के लिए setSecure() का इस्तेमाल भी कर सकता है. Assistant से सभी व्यू को बाहर रखने के लिए कोई ग्लोबल (ऐप्लिकेशन-लेवल) तरीका नहीं है. ध्यान दें कि FLAG_SECURE की वजह से, Assist API कॉलबैक, ट्रिगर नहीं होते. FLAG_SECURE का इस्तेमाल करने वाली गतिविधि, अब भी Assistant ऐप्लिकेशन को साफ़ तौर पर जानकारी दे सकती है. इसके लिए, इस गाइड में पहले बताए गए कॉलबैक का इस्तेमाल किया जा सकता है.

ध्यान दें: एंटरप्राइज़ खातों (Android for Work) के लिए एडमिन, DevicePolicyManager एपीआई के setScreenCaptureDisabled() तरीके का इस्तेमाल करके, वर्क प्रोफ़ाइल के लिए Assistant का डेटा इकट्ठा करने की सुविधा बंद कर सकता है.

वॉइस इंटरैक्शन

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

ज़ेड-ऑर्डर पर ध्यान देना

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

चौथा चित्र. असिस्ट लेयर Z-ऑर्डर

अगर आपका ऐप्लिकेशन सिस्टम अलर्ट विंडो का इस्तेमाल करता है, तो उन्हें तुरंत हटा दें. इसकी वजह यह है कि उन्हें स्क्रीन पर छोड़ने से, उपयोगकर्ता का अनुभव खराब होता है.

डेस्टिनेशन ऐप्लिकेशन

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

अपनी Assistant को लागू करना

आप चाहें, तो अपनी Assistant की सुविधा को लागू किया जा सकता है. दूसरी इमेज में दिखाए गए तरीके से, उपयोगकर्ता चालू Assistant ऐप्लिकेशन चुन सकता है. Assistant ऐप्लिकेशन में, VoiceInteractionSessionService और VoiceInteractionSession को लागू करने की सुविधा होनी चाहिए, जैसा कि VoiceInteraction के इस उदाहरण में दिखाया गया है. इसके लिए, BIND_VOICE_INTERACTION की अनुमति की भी ज़रूरत होती है. इसके बाद Assistant, टेक्स्ट पा सकती है और उसे देखने के क्रम को onHandleAssist() में AssistStructure के इंस्टेंस के तौर पर दिखा सकती है. इसे onHandleScreenshot() से स्क्रीनशॉट मिलता है.