स्टैंडर्ड व्यू का इस्तेमाल करने वाले ऐप्लिकेशन, ऑटोमैटिक भरने की सुविधा के फ़्रेमवर्क के साथ काम करते हैं. इसके लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती. आपके पास यह ऑप्टिमाइज़ करने का विकल्प भी होता है कि आपका ऐप्लिकेशन, फ़्रेमवर्क के साथ कैसे काम करे.
जानकारी अपने-आप भरने की सुविधा का एनवायरमेंट सेट अप करना
इस सेक्शन में, आपके ऐप्लिकेशन के लिए जानकारी अपने-आप भरने की बुनियादी सुविधा को सेट अप करने का तरीका बताया गया है.
पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा को कॉन्फ़िगर करना
आपके ऐप्लिकेशन में ऑटोफ़िल फ़्रेमवर्क का इस्तेमाल करने के लिए, आपके डिवाइस पर पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा कॉन्फ़िगर होनी चाहिए. Android 8.0 (एपीआई लेवल 26) और इसके बाद के वर्शन वाले ज़्यादातर फ़ोन और टैबलेट में, फ़ॉर्म से जुड़ी जानकारी अपने-आप भरने की सेवा पहले से मौजूद होती है. हालांकि, हमारा सुझाव है कि अपने ऐप्लिकेशन की जांच करते समय, जांच के लिए उपलब्ध किसी सेवा का इस्तेमाल करें. जैसे, Android के ऑटोफ़िल फ़्रेमवर्क सैंपल में मौजूद, फ़ॉर्म से जुड़ी जानकारी अपने-आप भरने की सेवा. एम्युलेटर का इस्तेमाल करते समय, पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा को साफ़ तौर पर सेट करें. ऐसा इसलिए, क्योंकि हो सकता है कि एम्युलेटर में कोई डिफ़ॉल्ट सेवा न हो.
सैंपल के तौर पर मिले ऐप्लिकेशन से, फ़ॉर्म से जुड़ी जानकारी अपने-आप भरने की सेवा इंस्टॉल करने के बाद, इस सेवा को चालू करें. इसके लिए, सेटिंग > सिस्टम > भाषाएं और इनपुट > बेहतर सेटिंग > इनपुट से जुड़ी सहायता > फ़ॉर्म से जुड़ी जानकारी अपने-आप भरने की सेवा पर जाएं.
जानकारी अपने-आप भरने की सुविधा को टेस्ट करने के लिए, एम्युलेटर को कॉन्फ़िगर करने के बारे में ज़्यादा जानकारी के लिए, जानकारी अपने-आप भरने की सुविधा की मदद से अपने ऐप्लिकेशन को टेस्ट करना लेख पढ़ें.
व्यू के लिए, गतिविधि के कॉन्टेक्स्ट का इस्तेमाल करना
पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा को सही तरीके से काम करने के लिए, गतिविधि के कॉन्टेक्स्ट की ज़रूरत होती है. व्यू को इंस्टैंशिएट करते समय, Activity को कॉन्टेक्स्ट के तौर पर इस्तेमाल करें, ताकि जानकारी अपने-आप भरने की सुविधा सही तरीके से काम कर सके.
जानकारी अपने-आप भरने की सुविधा के लिए संकेत देना
पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा, ह्यूरिस्टिक का इस्तेमाल करके हर व्यू के टाइप का पता लगाती है. हालांकि, अगर आपका ऐप्लिकेशन इन ह्यूरिस्टिक पर निर्भर करता है, तो ऐप्लिकेशन को अपडेट करने पर, जानकारी अपने-आप भरने की सुविधा का व्यवहार अचानक बदल सकता है. यह पक्का करने के लिए कि जानकारी अपने-आप भरने की सेवा, आपके ऐप्लिकेशन के फ़ॉर्म फ़ैक्टर की सही पहचान करे, जानकारी अपने-आप भरने के संकेत दें.
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_CREDIT_CARD_EXPIRATION_DATEका इस्तेमाल करें. - अगर खत्म होने की तारीख के हर हिस्से के लिए अलग व्यू का इस्तेमाल किया जा रहा है, तो हर व्यू के लिए
AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY,AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH, औरAUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEARका इस्तेमाल किया जा सकता है.
घर या ऑफ़िस का पता
पते के फ़ॉर्म फ़ील्ड के लिए, इस तरह के हिंट इस्तेमाल किए जा सकते हैं:
- एक ही व्यू में पता दिखाने के लिए,
AUTOFILL_HINT_POSTAL_ADDRESSका इस्तेमाल करें. - पते के अलग-अलग हिस्सों के लिए अलग-अलग व्यू इस्तेमाल करते समय, इनका इस्तेमाल किया जा सकता है:
लोगों के नाम
लोगों से उनके नाम पूछते समय, इस तरह के हिंट इस्तेमाल किए जा सकते हैं:
- एक ही व्यू में किसी व्यक्ति का पूरा नाम ऑटोमैटिक भरने के लिए,
AUTOFILL_HINT_PERSON_NAMEका इस्तेमाल करें. - अगर नाम के अलग-अलग हिस्सों के लिए अलग-अलग व्यू इस्तेमाल किए जा रहे हैं, तो इनमें से किसी एक का इस्तेमाल किया जा सकता है:
फ़ोन नंबर
फ़ोन नंबर के लिए, इनका इस्तेमाल किया जा सकता है:
- एक ही व्यू में पूरा फ़ोन नंबर दिखाने का अनुरोध करते समय,
AUTOFILL_HINT_PHONE_NUMBERका इस्तेमाल करें. - अगर फ़ोन नंबर के अलग-अलग हिस्सों के लिए अलग-अलग व्यू इस्तेमाल किए जा रहे हैं, तो इनमें से किसी एक का इस्तेमाल किया जा सकता है:
एक बार इस्तेमाल होने वाला पासवर्ड (ओटीपी)
एक बार इस्तेमाल होने वाले पासवर्ड को एक ही व्यू में देखने के लिए, AUTOFILL_HINT_SMS_OTP का इस्तेमाल किया जा सकता है.
कई व्यू के लिए, जहां हर व्यू ओटीपी के एक अंक से मैप होता है, वहां हर वर्ण के लिए हिंट जनरेट करने के लिए, generateSmsOtpHintForCharacterPosition() तरीके का इस्तेमाल किया जा सकता है.
वेबसाइट और मोबाइल ऐप्लिकेशन का डेटा जोड़ना
ऐप्लिकेशन और वेबसाइट को जोड़ने के बाद, जानकारी अपने-आप भरने की सेवाएं, ब्राउज़र और Android डिवाइसों के बीच उपयोगकर्ता का लॉगिन डेटा शेयर कर सकती हैं. जैसे, Google की मदद से, जानकारी अपने-आप भरने की सुविधा. जब कोई उपयोगकर्ता दोनों प्लैटफ़ॉर्म पर, जानकारी ऑटोमैटिक तरीके से भरने की एक ही सेवा चुनता है, तो आपके वेब ऐप्लिकेशन में साइन इन करने पर, उसके लॉगिन क्रेडेंशियल ऑटोमैटिक तरीके से भरने के लिए उपलब्ध हो जाते हैं. ऐसा तब होता है, जब वह आपके 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() को लागू करके और यह तरीका अपनाकर, व्यू स्ट्रक्चर तय किया जा सकता है:
addChildCount()को कॉल करके, व्यू स्ट्रक्चर के चाइल्ड काउंट को बढ़ाएं.newChild()पर कॉल करके, बच्चे का खाता जोड़ें.setAutofillId()को कॉल करके, चाइल्ड के लिए ऑटोमैटिक भरने वाला आईडी सेट करें.- ज़रूरी प्रॉपर्टी सेट करें. जैसे, ऑटोमैटिक तरीके से भरने की वैल्यू और टाइप.
- अगर वर्चुअल चाइल्ड में मौजूद डेटा संवेदनशील है, तो
setDataIsSensitive()कोtrueपास करें; अगर ऐसा नहीं है, तो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 सिस्टम आपकी गतिविधि के स्टैक के हिस्से के तौर पर, सेवा की पुष्टि करने की गतिविधि को लॉन्च करता है.
पुष्टि करने की सुविधा के लिए, आपको अपना ऐप्लिकेशन अपडेट करने की ज़रूरत नहीं है. ऐसा इसलिए, क्योंकि पुष्टि करने की प्रोसेस सेवा के अंदर ही होती है. हालांकि, आपको यह पक्का करना होगा कि गतिविधि के फिर से शुरू होने पर, गतिविधि का व्यू स्ट्रक्चर सुरक्षित रहे. जैसे, onCreate() में व्यू स्ट्रक्चर बनाना, न कि onStart() या onResume() में.
ऑटोमैटिक भरने की सेवा को पुष्टि की ज़रूरत होने पर, आपका ऐप्लिकेशन कैसा व्यवहार करता है, इसकी पुष्टि की जा सकती है. इसके लिए, 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 प्रॉपर्टी से बदलें. जानकारी ऑटोमैटिक भरने की सुविधा चालू होने की पुष्टि करने के बाद, विंडो पैरामीटर को Dialog से इनहेरिट की गई क्लास के onWindowAttributesChanged() तरीके में सेव करें. इसके बाद, सेव किए गए पैरामीटर की 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-AutofillFramework ऐप्लिकेशन के बारे में बताया गया है.
ऐप्लिकेशन इंस्टॉल करने के बाद, एम्युलेटर की सिस्टम सेटिंग में जाकर, पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा चालू करें. इसके लिए, सेटिंग > सिस्टम > भाषाएं और इनपुट > बेहतर सेटिंग > इनपुट से जुड़ी सहायता > पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा पर जाएं.
डेटा से जुड़ी ज़रूरतों का विश्लेषण करना
पासवर्ड अपने-आप भरने, मैनेज करने, और सेव करने की सेवा के साथ अपने ऐप्लिकेशन की जांच करने के लिए, सेवा के पास ऐसा डेटा होना चाहिए जिसका इस्तेमाल वह आपके ऐप्लिकेशन को भरने के लिए कर सके. सेवा को यह भी समझना होगा कि आपके ऐप्लिकेशन के व्यू में किस तरह का डेटा चाहिए. उदाहरण के लिए, अगर आपके ऐप्लिकेशन में कोई ऐसा व्यू है जिसमें उपयोगकर्ता नाम की ज़रूरत है, तो सेवा के पास ऐसा डेटासेट होना चाहिए जिसमें उपयोगकर्ता नाम और कुछ ऐसा तरीका हो जिससे यह पता चल सके कि व्यू को इस तरह के डेटा की ज़रूरत है.
android:autofillHints एट्रिब्यूट को सेट करके, सेवा को बताएं कि आपके व्यू में किस तरह का डेटा चाहिए. कुछ सेवाएं, डेटा के टाइप का पता लगाने के लिए बेहतर ह्यूरिस्टिक का इस्तेमाल करती हैं. हालांकि, सैंपल के तौर पर मिले ऐप्लिकेशन जैसी अन्य सेवाएं, यह जानकारी देने के लिए डेवलपर पर निर्भर करती हैं. अगर आपने ऑटोमैटिक तरीके से भरने की सुविधा के लिए ज़रूरी व्यू में android:autofillHints एट्रिब्यूट सेट किया है, तो आपका ऐप्लिकेशन ऑटोमैटिक तरीके से भरने की सेवाओं के साथ बेहतर तरीके से काम करता है.
टेस्ट चलाना
डेटा की ज़रूरी शर्तों का विश्लेषण करने के बाद, टेस्ट चलाया जा सकता है. इसमें, ऑटोमैटिक तरीके से भरने की सेवा में टेस्ट डेटा सेव करना और आपके ऐप्लिकेशन में ऑटोमैटिक तरीके से भरने की सुविधा को ट्रिगर करना शामिल है.
सेवा में डेटा सेव करना
फ़िलहाल चालू, जानकारी अपने-आप भरने, मैनेज करने, और सेव करने की सेवा में डेटा सेव करने के लिए, यह तरीका अपनाएं:
- कोई ऐसा ऐप्लिकेशन खोलें जिसमें ऐसा व्यू हो जो टेस्ट के दौरान इस्तेमाल किए जाने वाले डेटा टाइप के साथ काम करता हो. android-AutofillFramework सैंपल के तौर पर मिला ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराता है. इसमें ऐसे व्यू होते हैं जिनमें कई तरह के डेटा की ज़रूरत होती है. जैसे, क्रेडिट कार्ड नंबर और उपयोगकर्ता नाम.
- उस व्यू पर टैप करें जिसमें आपकी ज़रूरत का डेटा मौजूद है.
- व्यू में कोई वैल्यू डालें.
- पुष्टि करने वाले बटन पर टैप करें, जैसे कि साइन इन करें या सबमिट करें. आम तौर पर, सेवा के डेटा सेव करने से पहले आपको फ़ॉर्म सबमिट करना होता है.
- सिस्टम डायलॉग से, अनुमति के अनुरोध की पुष्टि करें. सिस्टम डायलॉग, फ़िलहाल चालू सेवा का नाम दिखाता है. साथ ही, यह पूछता है कि क्या आपको अपने टेस्ट में इस सेवा का इस्तेमाल करना है. अगर आपको इस सेवा का इस्तेमाल करना है, तो सेव करें पर टैप करें.
अगर Android, अनुमति वाला डायलॉग बॉक्स नहीं दिखाता है या सेवा वह नहीं है जिसका इस्तेमाल आपको टेस्ट में करना है, तो देखें कि सेवा फ़िलहाल सिस्टम सेटिंग में चालू है या नहीं.
अपने ऐप्लिकेशन में, जानकारी ऑटोमैटिक भरने की सुविधा को ट्रिगर करना
अपने ऐप्लिकेशन में, जानकारी ऑटोमैटिक भरने की सुविधा को ट्रिगर करने के लिए, यह तरीका अपनाएं:
- अपना ऐप्लिकेशन खोलें और उस गतिविधि पर जाएं जिसमें वे व्यू मौजूद हैं जिनकी आपको जांच करनी है.
- उस व्यू पर टैप करें जिसे भरना है.
- सिस्टम, जानकारी अपने-आप भरने की सुविधा का यूज़र इंटरफ़ेस (यूआई) दिखाता है. इसमें ऐसे डेटासेट होते हैं जो व्यू को भर सकते हैं. जैसा कि इमेज 1 में दिखाया गया है.
- उस डेटासेट पर टैप करें जिसमें वह डेटा मौजूद है जिसका आपको इस्तेमाल करना है. इस व्यू में, सेवा में पहले से सेव किया गया डेटा दिखता है.
अगर Android, जानकारी ऑटोमैटिक भरने की सुविधा का यूज़र इंटरफ़ेस (यूआई) नहीं दिखाता है, तो समस्या हल करने के लिए ये विकल्प आज़माएं:
- देखें कि आपके ऐप्लिकेशन के व्यू,
android:autofillHintsएट्रिब्यूट में सही वैल्यू का इस्तेमाल करते हैं या नहीं. एट्रिब्यूट की संभावित वैल्यू की सूची देखने के लिए,Viewक्लास मेंAUTOFILL_HINTप्रीफ़िक्स वाले कॉन्सटैंट देखें. - देखें कि जिस व्यू को भरना है उस पर
android:importantForAutofillएट्रिब्यूट की वैल्यू,noके अलावा कुछ और सेट की गई हो. इसके अलावा, उस व्यू या उसके किसी पैरंट पर,noExcludeDescendantsके अलावा कोई और वैल्यू सेट की गई हो.