जानकारी ऑटोमैटिक भरने की सुविधा के लिए, अपने ऐप्लिकेशन को ऑप्टिमाइज़ करना

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

अपने-आप जानकारी भरने की सुविधा का एनवायरमेंट सेट अप करना

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

ऑटोमैटिक भरने की सुविधा कॉन्फ़िगर करना

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

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

ऑटोमैटिक भरने की सुविधा की जांच करने के लिए, किसी एमुलेटर को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, ऑटोमैटिक भरने की सुविधा की मदद से अपने ऐप्लिकेशन की जांच करना लेख पढ़ें.

ऑटोमैटिक भरने की सुविधा के लिए सुझाव देना

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

android:autofillHints एट्रिब्यूट का इस्तेमाल करके, अपने-आप जानकारी भरने के सुझाव सेट किए जा सकते हैं. यहां दिए गए उदाहरण में, EditText पर "password" हिंट सेट किया गया है:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autofillHints="password" />

setAutofillHints() तरीके का इस्तेमाल करके, प्रोग्राम के हिसाब से भी हिंट सेट किए जा सकते हैं. इसका उदाहरण यहां दिया गया है:

Kotlin

val password = findViewById<EditText>(R.id.password)
password.setAutofillHints(View.AUTOFILL_HINT_PASSWORD)

Java

EditText password = findViewById(R.id.password);
password.setAutofillHints(View.AUTOFILL_HINT_PASSWORD);

पहले से तय संकेत शामिल करें

ऑटोमैटिक भरने वाला फ़्रेमवर्क, संकेतों की पुष्टि नहीं करता है. इन्हें ऑटोमैटिक भरने की सेवा में बदलाव या पुष्टि किए बिना भेजा जाता है. किसी भी वैल्यू का इस्तेमाल किया जा सकता है. हालांकि, View और AndroidX HintConstants क्लास में, आधिकारिक तौर पर काम करने वाले हिंट कॉन्स्टेंट की सूचियां होती हैं.

इन कॉन्स्टेंट के कॉम्बिनेशन का इस्तेमाल करके, ऑटोमैटिक भरने की सामान्य स्थितियों के लिए लेआउट बनाए जा सकते हैं:

खाते के क्रेडेंशियल

लॉगिन फ़ॉर्म में, खाते के क्रेडेंशियल के बारे में संकेत शामिल किए जा सकते हैं. जैसे, AUTOFILL_HINT_USERNAME और AUTOFILL_HINT_PASSWORD.

नया खाता बनाने या उपयोगकर्ताओं के अपना उपयोगकर्ता नाम और पासवर्ड बदलने पर, AUTOFILL_HINT_NEW_USERNAME और AUTOFILL_HINT_NEW_PASSWORD का इस्तेमाल किया जा सकता है.

क्रेडिट कार्ड जानकारी

क्रेडिट कार्ड की जानकारी का अनुरोध करते समय, AUTOFILL_HINT_CREDIT_CARD_NUMBER और AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE जैसे हिंट का इस्तेमाल किया जा सकता है.

क्रेडिट कार्ड की समयसीमा खत्म होने की तारीखों के लिए, इनमें से कोई एक काम करें:

घर या ऑफ़िस का पता

घर या ऑफ़िस के पते वाले फ़ॉर्म फ़ील्ड के लिए, इन जैसे हिंट का इस्तेमाल किया जा सकता है:

लोगों के नाम

लोगों के नामों का अनुरोध करते समय, इन जैसे संकेत इस्तेमाल किए जा सकते हैं:

फ़ोन नंबर

फ़ोन नंबर के लिए, इनका इस्तेमाल किया जा सकता है:

  • एक ही व्यू में पूरे फ़ोन नंबर का अनुरोध करने के लिए, AUTOFILL_HINT_PHONE_NUMBER का इस्तेमाल करें.
  • अगर फ़ोन नंबर के अलग-अलग हिस्सों के लिए अलग-अलग व्यू का इस्तेमाल किया जा रहा है, तो इनमें से किसी भी का इस्तेमाल किया जा सकता है:

एक बार इस्तेमाल होने वाला पासवर्ड (ओटीपी)

एक बार इस्तेमाल होने वाले पासवर्ड को एक ही व्यू में देखने के लिए, AUTOFILL_HINT_SMS_OTP का इस्तेमाल किया जा सकता है.

एक से ज़्यादा व्यू के लिए, हर व्यू को OTP के एक अंक से मैप किया जा सकता है. ऐसे में, हर वर्ण के लिए हिंट जनरेट करने के लिए, generateSmsOtpHintForCharacterPosition() तरीके का इस्तेमाल किया जा सकता है.

ऑटोमैटिक भरने की सुविधा के लिए, फ़ील्ड को 'अहम' के तौर पर मार्क करना

अपने ऐप्लिकेशन में, जानकारी अपने-आप भरने के लिए, व्यू स्ट्रक्चर में अलग-अलग फ़ील्ड शामिल किए जा सकते हैं. डिफ़ॉल्ट रूप से, व्यू IMPORTANT_FOR_AUTOFILL_AUTO मोड का इस्तेमाल करते हैं. इससे Android, अपने हेयुरिस्टिक्स का इस्तेमाल करके यह तय कर पाता है कि कोई व्यू, ऑटोमैटिक भरने की सुविधा के लिए अहम है या नहीं.

हालांकि, कुछ मामलों में ऐसा भी हो सकता है कि जानकारी ऑटोमैटिक भरने की सुविधा के लिए, किसी व्यू, व्यू के स्ट्रक्चर या पूरी गतिविधि की जानकारी देना ज़रूरी न हो:

  • लॉगिन गतिविधि में CAPTCHA फ़ील्ड
  • वह व्यू जहां उपयोगकर्ता कॉन्टेंट बनाता है. जैसे, टेक्स्ट या स्प्रेडशीट एडिटर
  • गेम में कुछ गतिविधियों के व्यू, जैसे कि गेमप्ले दिखाने वाली गतिविधियां

ऑटोमैटिक भरने की सुविधा के लिए, किसी व्यू की अहमियत को सेट किया जा सकता है. इसके लिए, android:importantForAutofill एट्रिब्यूट का इस्तेमाल करें:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:importantForAutofill="no" />

importantForAutofill की वैल्यू इनमें से कोई भी हो सकती है:

auto
Android सिस्टम को उसके अनुभव के आधार पर यह पता लगाने दें कि ऑटोमैटिक भरने की सुविधा के लिए, व्यू ज़रूरी है या नहीं.
no
यह व्यू, अपने-आप जानकारी भरने की सुविधा के लिए ज़रूरी नहीं है.
noExcludeDescendants
जानकारी ऑटोमैटिक भरने की सुविधा के लिए, यह व्यू और इसके बच्चे ज़रूरी नहीं हैं.
yes
यह व्यू, ऑटोमैटिक भरने की सुविधा के लिए ज़रूरी है.
yesExcludeDescendants
जानकारी ऑटोमैटिक भरने की सुविधा के लिए, यह व्यू अहम है. हालांकि, ऑटोमैटिक भरने की सुविधा के लिए, इसकी चाइल्ड एंट्री ज़रूरी नहीं हैं.

setImportantForAutofill() के तरीके का भी इस्तेमाल किया जा सकता है:

Kotlin

val captcha = findViewById<TextView>(R.id.captcha)
captcha.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO)

Java

TextView captcha = findViewById(R.id.captcha);
captcha.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);

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

  • लॉगिन गतिविधि में CAPTCHA फ़ील्ड: इस व्यू को 'अहम नहीं' के तौर पर मार्क करने के लिए, android:importantForAutofill="no" या IMPORTANT_FOR_AUTOFILL_NO का इस्तेमाल करें.
  • व्यू में उपयोगकर्ता कॉन्टेंट बनाता है: पूरे व्यू के स्ट्रक्चर को 'अहम नहीं' के तौर पर मार्क करने के लिए, android:importantForAutofill="noExcludeDescendants" या IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS का इस्तेमाल करें.
  • गेम में कुछ गतिविधियों के व्यू: व्यू के पूरे स्ट्रक्चर को 'अहम नहीं' के तौर पर मार्क करने के लिए, android:importantForAutofill="noExcludeDescendants" या IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS का इस्तेमाल करें.

वेबसाइट और मोबाइल ऐप्लिकेशन का डेटा जोड़ना

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

अपने Android ऐप्लिकेशन को अपनी वेबसाइट से जोड़ने के लिए, अपनी साइट में delegate_permission/common.get_login_creds संबंध के साथ डिजिटल ऐसेट लिंक होस्ट करें. इसके बाद, अपने ऐप्लिकेशन की AndroidManifest.xml फ़ाइल में, असोसिएशन का एलान करें. अपनी वेबसाइट को Android ऐप्लिकेशन से जोड़ने के तरीके के बारे में ज़्यादा जानकारी के लिए, सभी ऐप्लिकेशन और वेबसाइटों पर अपने-आप साइन इन होने की सुविधा चालू करना लेख पढ़ें.

अपने-आप जानकारी भरने की सुविधा का वर्कफ़्लो पूरा करना

इस सेक्शन में कुछ खास स्थितियों के बारे में बताया गया है. इन स्थितियों में, अपने ऐप्लिकेशन के उपयोगकर्ताओं के लिए ऑटोमैटिक भरने की सुविधा को बेहतर बनाने के लिए, कुछ कदम उठाए जा सकते हैं.

तय करें कि ऑटोमैटिक भरने की सुविधा चालू है या नहीं

उपयोगकर्ता, सेटिंग > सिस्टम > भाषाएं और इनपुट > बेहतर > इनपुट में मदद > जानकारी अपने-आप भरने की सेवा पर जाकर, जानकारी अपने-आप भरने की सुविधा को चालू या बंद कर सकते हैं. साथ ही, इस सेवा को बदल भी सकते हैं. आपका ऐप्लिकेशन, उपयोगकर्ता की ऑटोमैटिक भरने की सेटिंग को नहीं बदल सकता. हालांकि, उपयोगकर्ता के लिए ऑटोमैटिक भरने की सुविधा के लिए, अपने ऐप्लिकेशन में या अपने ऐप्लिकेशन के किसी खास व्यू में अतिरिक्त सुविधा लागू की जा सकती है.

उदाहरण के लिए, अगर उपयोगकर्ता के लिए ऑटोमैटिक भरने की सुविधा चालू है, तो TextView, ओवरफ़्लो मेन्यू में ऑटोमैटिक भरने की सुविधा वाली एंट्री दिखाता है. यह देखने के लिए कि उपयोगकर्ता के लिए, जानकारी ऑटोमैटिक भरने की सुविधा चालू है या नहीं, AutofillManager ऑब्जेक्ट के isEnabled() तरीके पर कॉल करें.

यह पक्का करने के लिए कि उपयोगकर्ताओं के लिए आपके साइन-अप और लॉगिन के अनुभव को ऑप्टिमाइज़ किया गया हो और वह भी डेटा अपने-आप न भरे, इसके लिए One Tap साइन इन को लागू करें.

अपने-आप जानकारी भरने का अनुरोध करना

कभी-कभी, उपयोगकर्ता की कार्रवाई के जवाब में, अपने-आप जानकारी भरने का अनुरोध करने की ज़रूरत पड़ती है. उदाहरण के लिए, जब उपयोगकर्ता व्यू पर टच करके रखता है, तो TextView, ऑटोमैटिक भरने वाला मेन्यू आइटम दिखाता है. यहां दिए गए उदाहरण में, जानकारी अपने-आप भरने का अनुरोध करने का तरीका बताया गया है:

Kotlin

fun eventHandler(view: View) {
    val afm = requireContext().getSystemService(AutofillManager::class.java)
    afm?.requestAutofill(view)
}

Java

public void eventHandler(View view) {
    AutofillManager afm = context.getSystemService(AutofillManager.class);
    if (afm != null) {
        afm.requestAutofill(view);
    }
}

ऑटोमैटिक भरने की सुविधा के मौजूदा कॉन्टेक्स्ट को रद्द करने के लिए, cancel() तरीका भी इस्तेमाल किया जा सकता है. अगर आपके पास एक ऐसा बटन है जो लॉगिन पेज पर मौजूद फ़ील्ड को हटा देता है, तो यह काम का हो सकता है.

पिकर कंट्रोल में डेटा के लिए, ऑटोमैटिक भरने के सही टाइप का इस्तेमाल करना

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

EditText ऑब्जेक्ट, ऑटोमैटिक भरने की सुविधा से जुड़े डेटा को AUTOFILL_TYPE_TEXT टाइप में इस्तेमाल करता है. अगर किसी अलग तरह का डेटा इस्तेमाल किया जा रहा है, तो EditText से इनहेरिट करने वाला कस्टम व्यू बनाएं. साथ ही, इससे जुड़े डेटा को मैनेज करने के लिए ज़रूरी तरीके लागू करें. उदाहरण के लिए, अगर आपके पास तारीख वाला कोई फ़ील्ड है, तो उन तरीकों को लॉजिक के साथ लागू करें जो AUTOFILL_TYPE_DATE टाइप की वैल्यू को सही तरीके से हैंडल करते हैं.

ऑटोमैटिक भरने के लिए डेटा टाइप तय करने पर, ऑटोमैटिक भरने की सेवा, व्यू में दिखाए गए डेटा का सही तरीके से प्रतिनिधित्व कर सकती है. ज़्यादा जानकारी के लिए, अपने-आप जानकारी भरने की सुविधा के साथ पिकर का इस्तेमाल करना लेख पढ़ें.

अपने-आप जानकारी भरने की सुविधा के कॉन्टेक्स्ट को पूरा करना

ऑटोमैटिक भरने वाला फ़्रेमवर्क, उपयोगकर्ता के इनपुट को आने वाले समय में इस्तेमाल करने के लिए सेव करता है. इसके लिए, ऑटोमैटिक भरने की सुविधा का कॉन्टेक्स्ट खत्म होने के बाद, "ऑटोमैटिक भरने के लिए सेव करें?" डायलॉग दिखता है. आम तौर पर, किसी गतिविधि के खत्म होने पर, ऑटोमैटिक भरने की सुविधा बंद हो जाती है. हालांकि, कुछ मामलों में आपको फ़्रेमवर्क को साफ़ तौर पर सूचना देनी होगी. उदाहरण के लिए, अगर लॉगिन और कॉन्टेंट, दोनों स्क्रीन के लिए एक ही ऐक्टिविटी का इस्तेमाल किया जा रहा है, लेकिन अलग-अलग फ़्रैगमेंट का इस्तेमाल किया जा रहा है. इन स्थितियों में, AutofillManager.commit() को कॉल करके साफ़ तौर पर संदर्भ को पूरा किया जा सकता है.

कस्टम व्यू के लिए सहायता

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

अगर आपका ऐप्लिकेशन कस्टम व्यू का इस्तेमाल करता है, तो इन स्थितियों पर ध्यान दें:

  • कस्टम व्यू से एक स्टैंडर्ड व्यू स्ट्रक्चर या डिफ़ॉल्ट व्यू स्ट्रक्चर मिलता है.
  • कस्टम व्यू का वर्चुअल स्ट्रक्चर है या ऐसा व्यू स्ट्रक्चर है जो ऑटोमैटिक भरने की सुविधा के फ़्रेमवर्क के लिए उपलब्ध नहीं है.

स्टैंडर्ड व्यू स्ट्रक्चर वाले कस्टम व्यू

कस्टम व्यू, ऑटोमैटिक भरने की सुविधा के काम करने के लिए ज़रूरी मेटाडेटा तय कर सकते हैं. पक्का करें कि आपका कस्टम व्यू, ऑटोमैटिक भरने की सुविधा के फ़्रेमवर्क के साथ काम करने के लिए, मेटाडेटा को सही तरीके से मैनेज करता हो. आपके कस्टम व्यू में ये कार्रवाइयां होनी चाहिए:

  • अपने-आप भरने वाली उस वैल्यू को मैनेज करें जो फ़्रेमवर्क आपके ऐप्लिकेशन को भेजता है.
  • फ़्रेमवर्क में ऑटोमैटिक भरने का टाइप और वैल्यू दें.

ऑटोमैटिक भरने की सुविधा चालू होने पर, ऑटोमैटिक भरने वाला फ़्रेमवर्क आपके व्यू पर autofill() को कॉल करता है और वह वैल्यू भेजता है जिसका इस्तेमाल आपके व्यू को करना चाहिए. autofill() लागू करें, ताकि यह तय किया जा सके कि आपका कस्टम व्यू, अपने-आप भरने की सुविधा की वैल्यू को कैसे मैनेज करता है.

आपके व्यू में, अपने-आप भरने की सुविधा के टाइप और वैल्यू की जानकारी होनी चाहिए. इसके लिए, getAutofillType() और getAutofillValue() के तरीकों को बदलना होगा.

अगर उपयोगकर्ता, व्यू की मौजूदा स्थिति में वैल्यू नहीं दे सकता, तो उसे ऑटोमैटिक भरने की सुविधा नहीं देनी चाहिए. उदाहरण के लिए, अगर व्यू बंद है. इन मामलों में, getAutofillType() को AUTOFILL_TYPE_NONE, getAutofillValue() को null लौटाना चाहिए, और autofill() कुछ नहीं करना चाहिए.

इन मामलों में, फ़्रेमवर्क के मुताबिक काम करने के लिए, कुछ और चरण पूरे करने होंगे:

  • कस्टम व्यू में बदलाव किया जा सकता है.
  • कस्टम व्यू में संवेदनशील डेटा शामिल है.

कस्टम व्यू में बदलाव किया जा सकता है

अगर व्यू में बदलाव किया जा सकता है, तो AutofillManager ऑब्जेक्ट पर notifyValueChanged() को कॉल करके, ऑटोमैटिक भरने वाले फ़्रेमवर्क को बदलावों के बारे में सूचना दें.

कस्टम व्यू में संवेदनशील डेटा शामिल है

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

आम तौर पर, जिन व्यू का कॉन्टेंट स्टैटिक रिसॉर्स से आता है उनमें संवेदनशील डेटा नहीं होता. वहीं, जिन व्यू का कॉन्टेंट डाइनैमिक तौर पर सेट होता है उनमें संवेदनशील डेटा हो सकता है. उदाहरण के लिए, अपना उपयोगकर्ता नाम डालें वाले लेबल में संवेदनशील डेटा नहीं होता, जबकि नमस्ते, जॉन वाले लेबल में संवेदनशील डेटा होता है.

ऑटोमैटिक भरने की सुविधा का फ़्रेमवर्क यह मानता है कि सभी डेटा डिफ़ॉल्ट रूप से संवेदनशील होता है. ऐसे डेटा को मार्क किया जा सकता है जो संवेदनशील नहीं है.

यह मार्क करने के लिए कि किसी व्यू में संवेदनशील डेटा है या नहीं, onProvideAutofillStructure() लागू करें और ViewStructure ऑब्जेक्ट पर setDataIsSensitive() को कॉल करें.

यहां दिए गए कोड के उदाहरण में, व्यू स्ट्रक्चर में मौजूद डेटा को 'संवेदनशील नहीं' के तौर पर मार्क करने का तरीका बताया गया है:

Kotlin

override fun onProvideAutofillStructure(structure: ViewStructure, flags: Int) {
    super.onProvideAutofillStructure(structure, flags)

    structure.setDataIsSensitive(false)
}

Java

@Override
public void onProvideAutofillStructure(ViewStructure structure, int flags) {
    super.onProvideAutofillStructure(structure, flags);

    structure.setDataIsSensitive(false);
}

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

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

ArrayAdapter का इस्तेमाल करने वाले व्यू में भी वैल्यू की सूचियां दी जा सकती हैं. ArrayAdapter, स्टैटिक संसाधनों के लिए, ऑटोमैटिक भरने की सुविधा के विकल्प अपने-आप सेट करता है. अगर डाइनैमिक तौर पर वैल्यू दी गई हैं, तो getAutofillOptions() को बदलें.

वर्चुअल स्ट्रक्चर वाले कस्टम व्यू

अपने-आप जानकारी भरने वाले फ़्रेमवर्क को आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में जानकारी में बदलाव करने और उसे सेव करने से पहले, व्यू स्ट्रक्चर की ज़रूरत होती है. व्यू स्ट्रक्चर, फ़्रेमवर्क के लिए इन स्थितियों में उपलब्ध नहीं होता:

  • यह ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) को रेंडर करने के लिए, OpenGL जैसे लो-लेवल रेंडरिंग इंजन का इस्तेमाल करता है.
  • ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) को ड्रॉ करने के लिए, Canvas के इंस्टेंस का इस्तेमाल करता है.

इन मामलों में, onProvideAutofillVirtualStructure() को लागू करके और यह तरीका अपनाकर, व्यू का स्ट्रक्चर तय किया जा सकता है:

  1. addChildCount() को कॉल करके व्यू स्ट्रक्चर की चाइल्ड संख्या बढ़ाएं.
  2. newChild() पर कॉल करके बच्चे की प्रोफ़ाइल जोड़ें.
  3. setAutofillId() को कॉल करके, बच्चे के लिए ऑटोमैटिक भरने वाला आईडी सेट करें.
  4. काम की प्रॉपर्टी सेट करें, जैसे कि अपने-आप भरने की वैल्यू और टाइप.
  5. अगर वर्चुअल चाइल्ड का डेटा संवेदनशील है, तो true को setDataIsSensitive() पर पास करें. अगर ऐसा नहीं है, तो false को पास करें.

नीचे दिया गया कोड स्निपेट, वर्चुअल स्ट्रक्चर में नया चाइल्ड बनाने का तरीका दिखाता है:

Kotlin

override fun onProvideAutofillVirtualStructure(structure: ViewStructure, flags: Int) {

    super.onProvideAutofillVirtualStructure(structure, flags)

    // Create a new child in the virtual structure.
    structure.addChildCount(1)
    val child = structure.newChild(childIndex)

    // Set the autofill ID for the child.
    child.setAutofillId(structure.autofillId!!, childVirtualId)

    // Populate the child by providing properties such as value and type.
    child.setAutofillValue(childAutofillValue)
    child.setAutofillType(childAutofillType)

    // Some children can provide a list of values, such as when the child is
    // a spinner.
    val childAutofillOptions = arrayOf<CharSequence>("option1", "option2")
    child.setAutofillOptions(childAutofillOptions)

    // Just like other types of views, mark the data as sensitive when
    // appropriate.
    val sensitive = !contentIsSetFromResources()
    child.setDataIsSensitive(sensitive)
}

Java

@Override
public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {

    super.onProvideAutofillVirtualStructure(structure, flags);

    // Create a new child in the virtual structure.
    structure.addChildCount(1);
    ViewStructure child =
            structure.newChild(childIndex);

    // Set the autofill ID for the child.
    child.setAutofillId(structure.getAutofillId(), childVirtualId);

    // Populate the child by providing properties such as value and type.
    child.setAutofillValue(childAutofillValue);
    child.setAutofillType(childAutofillType);

    // Some children can provide a list of values, such as when the child is
    // a spinner.
    CharSequence childAutofillOptions[] = { "option1", "option2" };
    child.setAutofillOptions(childAutofillOptions);

    // Just like other types of views, mark the data as sensitive when
    // appropriate.
    boolean sensitive = !contentIsSetFromResources();
    child.setDataIsSensitive(sensitive);
}

जब वर्चुअल स्ट्रक्चर में एलिमेंट बदलते हैं, तो इन टास्क को पूरा करके फ़्रेमवर्क को सूचना दें:

  • अगर बच्चों के बीच फ़ोकस बदलता है, तो AutofillManager ऑब्जेक्ट पर notifyViewEntered() और फिर notifyViewExited() को कॉल करें.
  • अगर किसी चाइल्ड की वैल्यू बदलती है, तो AutofillManager ऑब्जेक्ट पर notifyValueChanged() को कॉल करें.
  • अगर उपयोगकर्ता ने वर्कफ़्लो का कोई चरण पूरा कर लिया है, तो हो सकता है कि व्यू की हैरारकी अब उपलब्ध न हो. जैसे, लॉगिन फ़ॉर्म का इस्तेमाल करके साइन इन करने पर, AutofillManager ऑब्जेक्ट पर commit() को कॉल करें.
  • अगर व्यू की हैरारकी मान्य नहीं है, क्योंकि उपयोगकर्ता ने वर्कफ़्लो में किसी चरण को रद्द कर दिया है, तो AutofillManager ऑब्जेक्ट पर cancel() को कॉल करें. जैसे, जब उपयोगकर्ता लॉगिन फ़ॉर्म को मिटाने वाले बटन पर टैप करता है.

जानकारी ऑटोमैटिक भरने की सुविधा के इवेंट के लिए कॉलबैक का इस्तेमाल करें

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

यह क्लास, onAutofillEvent(View, int) तरीका उपलब्ध कराती है. ऐप्लिकेशन, किसी व्यू से जुड़ी ऑटोमैटिक भरने की सुविधा की स्थिति में बदलाव होने के बाद, इस तरीके को कॉल करता है. इस तरीके का एक ओवरलोड किया गया वर्शन भी है. इसमें एक childId पैरामीटर शामिल होता है, जिसका इस्तेमाल आपका ऐप्लिकेशन वर्चुअल व्यू के साथ कर सकता है. उपलब्ध स्थितियों को कॉलबैक में कंसटेंट के तौर पर परिभाषित किया गया है.

AutofillManager क्लास के registerCallback() तरीके का इस्तेमाल करके, कॉलबैक रजिस्टर किया जा सकता है. कोड के इस उदाहरण में, ऑटोमैटिक भरने वाले इवेंट के लिए कॉलबैक का एलान करने का तरीका बताया गया है:

Kotlin

val afm = context.getSystemService(AutofillManager::class.java)

afm?.registerCallback(object : AutofillManager.AutofillCallback() {
    // For virtual structures, override
    // onAutofillEvent(View view, int childId, int event) instead.
    override fun onAutofillEvent(view: View, event: Int) {
        super.onAutofillEvent(view, event)
        when (event) {
            EVENT_INPUT_HIDDEN -> {
                // The autofill affordance associated with the view was hidden.
            }
            EVENT_INPUT_SHOWN -> {
                // The autofill affordance associated with the view was shown.
            }
            EVENT_INPUT_UNAVAILABLE -> {
                // Autofill isn't available.
            }
        }

    }
})

Java

AutofillManager afm = getContext().getSystemService(AutofillManager.class);

afm.registerCallback(new AutofillManager.AutofillCallback() {
    // For virtual structures, override
    // onAutofillEvent(View view, int childId, int event) instead.
    @Override
    public void onAutofillEvent(@NonNull View view, int event) {
        super.onAutofillEvent(view, event);
        switch (event) {
            case EVENT_INPUT_HIDDEN:
                // The autofill affordance associated with the view was hidden.
                break;
            case EVENT_INPUT_SHOWN:
                // The autofill affordance associated with the view was shown.
                break;
            case EVENT_INPUT_UNAVAILABLE:
                // Autofill isn't available.
                break;
        }
    }
});

कॉलबैक हटाने के लिए, unregisterCallback() वाले तरीके का इस्तेमाल करें.

ड्रॉ करने लायक, ऑटोमैटिक भरने की सुविधा को पसंद के मुताबिक बनाएं

जब किसी व्यू को अपने-आप भरा जाता है, तो प्लैटफ़ॉर्म, व्यू पर एक Drawable रेंडर करता है. इससे यह पता चलता है कि व्यू का कॉन्टेंट अपने-आप भरा गया है. डिफ़ॉल्ट रूप से, यह ड्रॉबल एक ऐसा गहरे रंग का रेक्टैंगल होता है जो बैकग्राउंड बनाने के लिए इस्तेमाल की गई थीम के रंग से थोड़ा गहरा होता है. ड्रॉबल को बदलने की ज़रूरत नहीं है, लेकिन इसे पसंद के मुताबिक बनाया जा सकता है. इसके लिए, ऐप्लिकेशन या गतिविधि में इस्तेमाल की गई थीम के android:autofilledHighlight आइटम को बदलें. उदाहरण के लिए:

res/values/styles.xml

<resources>
    <style name="MyAutofilledHighlight" parent="...">
        <item name="android:autofilledHighlight">@drawable/my_drawable</item>
    </style>
</resources>

res/drawable/my_drawable.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#4DFF0000" />
</shape>

AndroidManifest.xml

<application ...
    android:theme="@style/MyAutofilledHighlight">
<!-- or -->
<activity ...
    android:theme="@style/MyAutofilledHighlight">

ऑटोमैटिक भरने की सुविधा के लिए पुष्टि करना

ऑटोमैटिक भरने की सेवा के लिए, उपयोगकर्ता को अपने ऐप्लिकेशन में फ़ील्ड की पुष्टि करने की ज़रूरत हो सकती है. ऐसा होने पर, Android सिस्टम आपकी गतिविधि के स्टैक के हिस्से के तौर पर, सेवा की पुष्टि करने से जुड़ी गतिविधि को लॉन्च करता है.

पुष्टि करने की सुविधा इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन को अपडेट करने की ज़रूरत नहीं है. ऐसा इसलिए, क्योंकि पुष्टि करने की प्रोसेस, सेवा के अंदर होती है. हालांकि, आपको यह पक्का करना होगा कि गतिविधि को फिर से शुरू करने पर, गतिविधि का व्यू स्ट्रक्चर बरकरार रहे. जैसे, onStart() या onResume() में नहीं, बल्कि onCreate() में व्यू स्ट्रक्चर बनाकर.

AutofillFramework के सैंपल से HeuristicsService का इस्तेमाल करके, यह पुष्टि की जा सकती है कि ऑटोमैटिक भरने की सेवा के लिए पुष्टि करने की ज़रूरत होने पर, आपका ऐप्लिकेशन कैसा व्यवहार करता है. इसके लिए, इसे कॉन्फ़िगर करके, भरने के जवाब की पुष्टि करने की ज़रूरत होती है. इस समस्या को समझने के लिए, BadViewStructureCreationSignInActivity के सैंपल का भी इस्तेमाल किया जा सकता है.

रीसाइकल किए गए व्यू के लिए, ऑटोमैटिक भरने की सुविधा के आईडी असाइन करना

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

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

Android 9 (एपीआई लेवल 28) और इसके बाद के वर्शन वाले डिवाइसों पर इस समस्या को हल करने के लिए, RecyclerView के इस्तेमाल किए गए व्यू के ऑटोमैटिक भरने वाले आईडी को साफ़ तौर पर मैनेज करें. इसके लिए, इन तरीकों का इस्तेमाल करें:

  • getNextAutofillId() वाले तरीके से, ऑटोमैटिक भरने वाला एक नया आईडी मिलता है, जो गतिविधि के हिसाब से यूनीक होता है.
  • setAutofillId() तरीका, गतिविधि में इस व्यू का यूनीक, लॉजिकल ऑटोमैटिक भरने वाला आईडी सेट करता है.

पहले से मालूम समस्याओं को हल करना

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

जानकारी अपने-आप भरने की सुविधा की वजह से, Android 8.0 और 8.1 पर ऐप्लिकेशन क्रैश हो रहे हैं

Android 8.0 (एपीआई लेवल 26) और 8.1 (एपीआई लेवल 27) में, जानकारी अपने-आप भरने की सुविधा की वजह से कुछ मामलों में आपका ऐप्लिकेशन क्रैश हो सकता है. संभावित समस्याओं को हल करने के लिए, उन सभी व्यू को importantForAutofill=no से टैग करें जो अपने-आप नहीं भरे गए हैं. पूरी गतिविधि को importantForAutofill=noExcludeDescendants से भी टैग किया जा सकता है.

डायलॉग बॉक्स का साइज़ बदलने पर, उन्हें ऑटोमैटिक भरने की सुविधा के लिए नहीं माना जाता

Android 8.1 (एपीआई लेवल 27) और इससे पहले के वर्शन में, अगर किसी डायलॉग में मौजूद किसी व्यू का साइज़ पहले से दिखने के बाद बदला जाता है, तो उसे ऑटोमैटिक भरने की सुविधा के तौर पर नहीं माना जाएगा. इन व्यू को AssistStructure ऑब्जेक्ट में शामिल नहीं किया जाता जो Android सिस्टम, ऑटोमैटिक भरने की सेवा को भेजता है. इस वजह से, सेवा व्यू नहीं भर पाती.

इस समस्या को हल करने के लिए, डायलॉग विंडो पैरामीटर की token प्रॉपर्टी को, डायलॉग बनाने वाली गतिविधि की token प्रॉपर्टी से बदलें. यह पुष्टि करने के बाद कि ऑटोमैटिक भरने की सुविधा चालू है, विंडो पैरामीटर को उस क्लास के onWindowAttributesChanged() तरीके में सेव करें जो Dialog से इनहेरिट करता है. इसके बाद, सेव किए गए पैरामीटर की token प्रॉपर्टी को, onAttachedToWindow() तरीके में पैरंट गतिविधि की token प्रॉपर्टी से बदलें.

यहां दिया गया कोड स्निपेट, एक ऐसी क्लास दिखाता है जो इस समस्या को हल करने का तरीका लागू करती है:

Kotlin

class MyDialog(context: Context) : Dialog(context) {

    // Used to store the dialog window parameters.
    private var token: IBinder? = null

    private val isDialogResizedWorkaroundRequired: Boolean
        get() {
            if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O || Build.VERSION.SDK_INT != Build.VERSION_CODES.O_MR1) {
                return false
            }
            val autofillManager = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                context.getSystemService(AutofillManager::class.java)
            } else {
                null
            }
            return autofillManager?.isEnabled ?: false
        }

    override fun onWindowAttributesChanged(params: WindowManager.LayoutParams) {
        if (params.token == null && token != null) {
            params.token = token
        }

        super.onWindowAttributesChanged(params)
    }

    override fun onAttachedToWindow() {
        if (isDialogResizedWorkaroundRequired) {
            token = ownerActivity!!.window.attributes.token
        }

        super.onAttachedToWindow()
    }

}

Java

public class MyDialog extends Dialog {

    public MyDialog(Context context) {
        super(context);
    }

    // Used to store the dialog window parameters.
    private IBinder token;

    @Override
    public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
        if (params.token == null && token != null) {
            params.token = token;
        }

        super.onWindowAttributesChanged(params);
    }

    @Override
    public void onAttachedToWindow() {
        if (isDialogResizedWorkaroundRequired()) {
            token = getOwnerActivity().getWindow().getAttributes().token;
        }

        super.onAttachedToWindow();
    }

    private boolean isDialogResizedWorkaroundRequired() {
        if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O
                || Build.VERSION.SDK_INT != Build.VERSION_CODES.O_MR1) {
            return false;
        }
        AutofillManager autofillManager =
                null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            autofillManager = getContext().getSystemService(AutofillManager.class);
        }
        return autofillManager != null && autofillManager.isEnabled();
    }

}

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

Kotlin

// AutofillExtensions.kt

fun Context.isDialogResizedWorkaroundRequired(): Boolean {
    // After the issue is resolved on Android, check whether the
    // workaround is still required for the current device.
    return isAutofillAvailable()
}

fun Context.isAutofillAvailable(): Boolean {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
        // The autofill framework is available on Android 8.0
        // or higher.
        return false
    }

    val afm = getSystemService(AutofillManager::class.java)
    // Return true if autofill is supported by the device and enabled
    // for the current user.
    return afm != null && afm.isEnabled
}

Java

public class AutofillHelper {

    public static boolean isDialogResizedWorkaroundRequired(Context context) {
        // After the issue is resolved on Android, check whether the
        // workaround is still required for the current device.
        return isAutofillAvailable(context);
    }

    public static boolean isAutofillAvailable(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
            // The autofill framework is available on Android 8.0
            // or higher.
            return false;
        }

        AutofillManager afm = context.getSystemService(AutofillManager.class);
        // Return true if autofill is supported by the device and enabled
        // for the current user.
        return afm != null && afm.isEnabled();
    }
}

ऑटोमैटिक जानकारी भरने की सुविधा की मदद से, अपने ऐप्लिकेशन की जांच करना

अपने ऐप्लिकेशन को ऑटोमैटिक भरने की सेवाओं के साथ काम करने के लिए ऑप्टिमाइज़ करने के बाद, यह जांच करें कि वह ऑटोमैटिक भरने की सेवाओं के साथ ठीक से काम करता है या नहीं.

अपने ऐप्लिकेशन की जांच करने के लिए, Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन पर चलने वाले किसी एमुलेटर या फ़िज़िकल डिवाइस का इस्तेमाल करें. एमुलेटर बनाने के तरीके के बारे में ज़्यादा जानने के लिए, वर्चुअल डिवाइस बनाना और मैनेज करना लेख पढ़ें.

ऑटोमैटिक भरने की सुविधा देने वाली सेवा इंस्टॉल करना

अपने ऐप्लिकेशन को ऑटोमैटिक भरने की सुविधा के साथ टेस्ट करने से पहले, आपको एक और ऐप्लिकेशन इंस्टॉल करना होगा, जो ऑटोमैटिक भरने की सेवाएं देता हो. इसके लिए, तीसरे पक्ष के ऐप्लिकेशन का इस्तेमाल किया जा सकता है. हालांकि, ऑटोमैटिक भरने की सुविधा के किसी सैंपल का इस्तेमाल करना आसान होता है. इससे आपको तीसरे पक्ष की सेवाओं के लिए साइन अप करने की ज़रूरत नहीं पड़ती.

ऑटोमैटिक भरने की सुविधा देने वाली सेवाओं के साथ अपने ऐप्लिकेशन की जांच करने के लिए, Java में Android के ऑटोमैटिक भरने वाले फ़्रेमवर्क के सैंपल का इस्तेमाल किया जा सकता है. सैंपल ऐप्लिकेशन, ऑटोमैटिक भरने की सुविधा और क्लाइंट Activity क्लास की सुविधा देता है. वर्कफ़्लो को अपने ऐप्लिकेशन में इस्तेमाल करने से पहले, उसकी जांच करके देखा जा सकता है. इस पेज पर, android-AutoFramework के सैंपल ऐप्लिकेशन के बारे में बताया गया है.

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

डेटा की ज़रूरी शर्तों का विश्लेषण करना

अपने ऐप्लिकेशन को ऑटोमैटिक भरने की सेवा के साथ टेस्ट करने के लिए, सेवा के पास ऐसा डेटा होना चाहिए जिसका इस्तेमाल करके वह आपके ऐप्लिकेशन में जानकारी भर सके. साथ ही, सेवा को यह भी समझना होगा कि आपके ऐप्लिकेशन के व्यू में किस तरह का डेटा होना चाहिए. उदाहरण के लिए, अगर आपके ऐप्लिकेशन में ऐसा व्यू है जिसमें उपयोगकर्ता नाम की ज़रूरत है, तो सेवा के पास ऐसा डेटासेट होना चाहिए जिसमें उपयोगकर्ता नाम हो. साथ ही, यह भी पता होना चाहिए कि व्यू में इस तरह का डेटा होना चाहिए.

android:autofillHints एट्रिब्यूट को सेट करके, सेवा को बताएं कि आपके व्यू में किस तरह का डेटा हो सकता है. कुछ सेवाएं डेटा का टाइप तय करने के लिए, बेहतरीन अनुभवों का इस्तेमाल करती हैं. हालांकि, सैंपल ऐप्लिकेशन जैसी कुछ सेवाएं, यह जानकारी देने के लिए डेवलपर पर निर्भर होती हैं. अगर जानकारी ऑटोमैटिक भरने की सुविधा के लिए काम के व्यू में android:autofillHints एट्रिब्यूट सेट किया जाता है, तो आपका ऐप्लिकेशन जानकारी ऑटोमैटिक भरने की सेवाओं के साथ बेहतर तरीके से काम करता है.

टेस्ट चलाना

डेटा से जुड़ी ज़रूरी शर्तों का विश्लेषण करने के बाद, अपना टेस्ट चलाया जा सकता है. इसमें, ऑटोमैटिक भरने की सुविधा में टेस्ट डेटा सेव करना और अपने ऐप्लिकेशन में ऑटोमैटिक भरने की सुविधा को ट्रिगर करना शामिल है.

सेवा में डेटा सेव करना

फ़िलहाल चालू ऑटोमैटिक भरने की सेवा में डेटा सेव करने के लिए, यह तरीका अपनाएं:

  1. वह ऐप्लिकेशन खोलें जिसमें ऐसा व्यू मौजूद हो जिसमें आपको टेस्ट के दौरान इस्तेमाल करने के लिए डेटा मिल सकता हो. android-AutoFramework का नमूना ऐप्लिकेशन ऐसे व्यू के साथ यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराता है जिसमें कई तरह के डेटा की उम्मीद की जाती है. जैसे, क्रेडिट कार्ड नंबर और उपयोगकर्ता नाम.
  2. उस व्यू पर टैप करें जिसमें आपको जिस तरह का डेटा चाहिए वह मौजूद हो.
  3. व्यू में कोई वैल्यू डालें.
  4. पुष्टि करने वाले बटन पर टैप करें. जैसे, साइन इन करें या सबमिट करें. आम तौर पर, सेवा के डेटा को सेव करने से पहले, आपको फ़ॉर्म सबमिट करना होता है.
  5. सिस्टम डायलॉग से अनुमति के अनुरोध की पुष्टि करें. सिस्टम डायलॉग बॉक्स में, फ़िलहाल चालू सेवा का नाम दिखता है. साथ ही, यह भी पूछा जाता है कि क्या आपको इस सेवा का इस्तेमाल टेस्ट में करना है. अगर आपको इस सेवा का इस्तेमाल करना है, तो सेव करें पर टैप करें.

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

अपने ऐप्लिकेशन में ऑटोमैटिक भरने की सुविधा को ट्रिगर करना

अपने ऐप्लिकेशन में ऑटोमैटिक भरने की सुविधा को ट्रिगर करने के लिए, यह तरीका अपनाएं:

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

अगर Android पर ऑटोमैटिक भरने की सुविधा का यूज़र इंटरफ़ेस (यूआई) नहीं दिखता है, तो समस्या हल करने के लिए ये विकल्प आज़माएं:

  • देखें कि आपके ऐप्लिकेशन के व्यू, android:autofillHints एट्रिब्यूट में सही वैल्यू का इस्तेमाल करते हैं या नहीं. एट्रिब्यूट की संभावित वैल्यू की सूची के लिए, View क्लास में AUTOFILL_HINT से शुरू होने वाली कॉन्स्टेंट देखें.
  • देखें कि जिस व्यू को भरना है उसमें android:importantForAutofill एट्रिब्यूट की वैल्यू, no के अलावा किसी दूसरी वैल्यू पर सेट हो या व्यू या उसके किसी पैरंट में noExcludeDescendants के अलावा किसी दूसरी वैल्यू पर सेट हो.