सिंक अडैप्टर फ़्रेमवर्क यह मानता है कि आपका सिंक अडैप्टर, एक डिवाइस के स्टोरेज के बीच डेटा ट्रांसफ़र करता है जो खाते और सर्वर स्टोरेज से जुड़ा होता है. इसके लिए, लॉगिन करने की ज़रूरत होती है. इस वजह से, फ़्रेमवर्क चाहता है कि आप सिंक करने के हिस्से के तौर पर, पुष्टि करने वाला कॉम्पोनेंट उपलब्ध कराएं अडैप्टर. यह कॉम्पोनेंट, Android खातों और पुष्टि करने वाले फ़्रेमवर्क में प्लग इन हो जाता है और यह लॉगिन जानकारी जैसे उपयोगकर्ता क्रेडेंशियल को मैनेज करने के लिए एक स्टैंडर्ड इंटरफ़ेस उपलब्ध कराता है.
भले ही, आपका ऐप्लिकेशन खातों का इस्तेमाल न करता हो, फिर भी आपको पुष्टि करने वाला कॉम्पोनेंट उपलब्ध कराना होगा.
अगर खातों या सर्वर लॉगिन का इस्तेमाल नहीं किया जाता है, तो पुष्टि करने वाला वह जानकारी मैनेज करता है जो
अनदेखा किया गया है, ताकि आप एक ऐसा पुष्टि करने वाला कॉम्पोनेंट दे सकें जिसमें स्टब तरीका शामिल हो
लागू करना. आपको बाउंड Service
भी देनी होगी, जो
इससे सिंक अडैप्टर फ़्रेमवर्क, पुष्टि करने वाले के तरीकों को कॉल कर पाता है.
इस लेसन में, स्टब ऑथेंटिकेटर के उन सभी हिस्सों को तय करने का तरीका बताया गया है जिनकी आपको ज़रूरत है
सिंक अडैप्टर फ़्रेमवर्क की ज़रूरी शर्तों को पूरा करता है. अगर आपको असली
पुष्टि करने वाला ऐसा ऐप्लिकेशन जो उपयोगकर्ता खातों को मैनेज करता है. इसके लिए, रेफ़रंस दस्तावेज़ पढ़ें
AbstractAccountAuthenticator
.
एक स्टब ऑथेंटिकेटर कॉम्पोनेंट जोड़ें
अपने ऐप्लिकेशन में स्टब ऑथेंटिकेटर कॉम्पोनेंट जोड़ने के लिए, ऐसी क्लास बनाएं जो
AbstractAccountAuthenticator
और फिर ज़रूरी तरीकों को अटपटाएं,
ऐसा करने के लिए, null
को लौटाया जा सकता है या अपवाद लागू किया जा सकता है.
नीचे दिया गया स्निपेट एक स्टब ऑथेंटिकेटर क्लास का उदाहरण दिखाता है:
Kotlin
/* * Implement AbstractAccountAuthenticator and stub out all * of its methods */ class Authenticator(context: Context) // Simple constructor : AbstractAccountAuthenticator(context) { // Editing properties is not supported override fun editProperties(r: AccountAuthenticatorResponse, s: String): Bundle { throw UnsupportedOperationException() } // Don't add additional accounts @Throws(NetworkErrorException::class) override fun addAccount( r: AccountAuthenticatorResponse, s: String, s2: String, strings: Array<String>, bundle: Bundle ): Bundle? = null // Ignore attempts to confirm credentials @Throws(NetworkErrorException::class) override fun confirmCredentials( r: AccountAuthenticatorResponse, account: Account, bundle: Bundle ): Bundle? = null // Getting an authentication token is not supported @Throws(NetworkErrorException::class) override fun getAuthToken( r: AccountAuthenticatorResponse, account: Account, s: String, bundle: Bundle ): Bundle { throw UnsupportedOperationException() } // Getting a label for the auth token is not supported override fun getAuthTokenLabel(s: String): String { throw UnsupportedOperationException() } // Updating user credentials is not supported @Throws(NetworkErrorException::class) override fun updateCredentials( r: AccountAuthenticatorResponse, account: Account, s: String, bundle: Bundle ): Bundle { throw UnsupportedOperationException() } // Checking features for the account is not supported @Throws(NetworkErrorException::class) override fun hasFeatures( r: AccountAuthenticatorResponse, account: Account, strings: Array<String> ): Bundle { throw UnsupportedOperationException() } }
Java
/* * Implement AbstractAccountAuthenticator and stub out all * of its methods */ public class Authenticator extends AbstractAccountAuthenticator { // Simple constructor public Authenticator(Context context) { super(context); } // Editing properties is not supported @Override public Bundle editProperties( AccountAuthenticatorResponse r, String s) { throw new UnsupportedOperationException(); } // Don't add additional accounts @Override public Bundle addAccount( AccountAuthenticatorResponse r, String s, String s2, String[] strings, Bundle bundle) throws NetworkErrorException { return null; } // Ignore attempts to confirm credentials @Override public Bundle confirmCredentials( AccountAuthenticatorResponse r, Account account, Bundle bundle) throws NetworkErrorException { return null; } // Getting an authentication token is not supported @Override public Bundle getAuthToken( AccountAuthenticatorResponse r, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Getting a label for the auth token is not supported @Override public String getAuthTokenLabel(String s) { throw new UnsupportedOperationException(); } // Updating user credentials is not supported @Override public Bundle updateCredentials( AccountAuthenticatorResponse r, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Checking features for the account is not supported @Override public Bundle hasFeatures( AccountAuthenticatorResponse r, Account account, String[] strings) throws NetworkErrorException { throw new UnsupportedOperationException(); } }
पुष्टि करने वाले को फ़्रेमवर्क से बाइंड करें
सिंक अडैप्टर फ़्रेमवर्क आपके Authenticator को ऐक्सेस कर सके, इसके लिए आपको एक बाउंड बनाना होगा इसके लिए सेवा. यह सेवा एक ऐसा Android बाइंडर ऑब्जेक्ट उपलब्ध कराती है जो फ़्रेमवर्क को अनुमति देता है का इस्तेमाल करें.
नीचे दिया गया स्निपेट आपको बाउंड Service
तय करने का तरीका बताता है:
Kotlin
/** * A bound Service that instantiates the authenticator * when started. */ class AuthenticatorService : Service() { // Instance field that stores the authenticator object private lateinit var mAuthenticator: Authenticator override fun onCreate() { // Create a new authenticator object mAuthenticator = Authenticator(getApplicationContext()) } /* * When the system binds to this Service to make the RPC call * return the authenticator's IBinder. */ override fun onBind(intent: Intent?): IBinder = mAuthenticator.iBinder }
Java
/** * A bound Service that instantiates the authenticator * when started. */ public class AuthenticatorService extends Service { ... // Instance field that stores the authenticator object private Authenticator mAuthenticator; @Override public void onCreate() { // Create a new authenticator object mAuthenticator = new Authenticator(getApplicationContext()); } /* * When the system binds to this Service to make the RPC call * return the authenticator's IBinder. */ @Override public IBinder onBind(Intent intent) { return mAuthenticator.getIBinder(); } }
पुष्टि करने वाले की मेटाडेटा फ़ाइल जोड़ें
पुष्टि करने वाले कॉम्पोनेंट को सिंक अडैप्टर और खाते के फ़्रेमवर्क में प्लग करने के लिए, आपको
इन फ़्रेमवर्क को ऐसे मेटाडेटा के साथ उपलब्ध कराएं जिसमें कॉम्पोनेंट की जानकारी दी गई हो. यह मेटाडेटा बताता है कि
वह खाता टाइप जिसे आपने सिंक अडैप्टर के लिए बनाया है. साथ ही, इसमें यूज़र इंटरफ़ेस के एलिमेंट के बारे में बताया गया है
जिसे सिस्टम तब दिखाता है, जब आपको उपयोगकर्ता को अपना खाता टाइप दिखाना है. इसका एलान करें
आपके ऐप्लिकेशन प्रोजेक्ट की /res/xml/
डायरेक्ट्री में स्टोर की गई एक्सएमएल फ़ाइल में मौजूद मेटाडेटा.
फ़ाइल को कोई भी नाम दिया जा सकता है. हालांकि, आम तौर पर इसे authenticator.xml
कहा जाता है.
इस एक्सएमएल फ़ाइल में एक ऐसा एलिमेंट <account-authenticator>
है जो
के ये एट्रिब्यूट हैं:
-
android:accountType
- अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
सिंक अडैप्टर फ़्रेमवर्क के मुताबिक, हर सिंक अडैप्टर में खाता टाइप होना चाहिए. यह फ़ॉर्मैट
एक डोमेन नाम डालें. फ़्रेमवर्क, खाते के टाइप का इस्तेमाल सिंक अडैप्टर के हिस्से के तौर पर करता है
करने में मदद मिलती है. जिन सर्वर के लिए लॉगिन करना ज़रूरी होता है उनके लिए, खाता टाइप के साथ
उपयोगकर्ता खाता, लॉगिन क्रेडेंशियल के हिस्से के तौर पर सर्वर को भेजा जाता है.
अगर आपके सर्वर में लॉगिन करने की ज़रूरत नहीं है, तब भी आपको खाता टाइप बताना होगा. मान, उस डोमेन नाम का उपयोग करें जिसे आप नियंत्रित करते हैं. फ़्रेमवर्क इसका इस्तेमाल आपकी साइट की सिंक अडैप्टर नहीं है, तो मान आपके सर्वर पर नहीं भेजा जाता है.
-
android:icon
- अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
ड्रॉ करने लायक की ओर पॉइंटर
संसाधन में आइकॉन शामिल है. यदि आप
res/xml/syncadapter.xml
मेंandroid:userVisible="true"
एट्रिब्यूट, तो आपको यह आइकन संसाधन उपलब्ध कराना होगा. यह इसके खाता सेक्शन में दिखता है सेटिंग ऐप्लिकेशन पर जाकर अपडेट कर सकते हैं. -
android:smallIcon
- अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
ड्रॉ करने लायक की ओर पॉइंटर
जिसमें आइकॉन का छोटा वर्शन शामिल हो. इसके बजाय इस संसाधन का उपयोग किया जा सकता है
सिस्टम के सेटिंग ऐप्लिकेशन के खाते सेक्शन में
android:icon
पर, . -
android:label
- अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
स्थानीय जगह के अनुसार बनाई जा सकने वाली स्ट्रिंग, जो उपयोगकर्ताओं को खाता टाइप की पहचान करती है. अगर सिंक अडैप्टर बनाया जाता है, तो
में
android:userVisible="true"
विशेषता तय करके दृश्यमानres/xml/syncadapter.xml
है, तो आपको यह स्ट्रिंग देनी होगी. यह इसमें दिखता है: खाते सेक्शन में, सिस्टम के सेटिंग ऐप्लिकेशन के उस आइकॉन के बगल में मौजूद होता है जिसे आपने पुष्टि करने वाला.
नीचे दिया गया स्निपेट, पुष्टि करने वाले उस व्यक्ति के लिए एक्सएमएल फ़ाइल दिखाता है जिसे आपने पहले बनाया है:
<?xml version="1.0" encoding="utf-8"?> <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="example.com" android:icon="@drawable/ic_launcher" android:smallIcon="@drawable/ic_launcher" android:label="@string/app_name"/>
मेनिफ़ेस्ट में पुष्टि करने वाले ऐप्लिकेशन की जानकारी दें
पिछले चरण में, आपने बाइंड Service
बनाया था, जो पुष्टि करने वाले को लिंक करता है
में सिंक कर सकते हैं. सिस्टम के लिए इस सेवा की पहचान करने के लिए, अपने ऐप्लिकेशन में इसके बारे में बताएं
मेनिफ़ेस्ट फ़ाइल में
<service>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
चाइल्ड एलिमेंट के रूप में एलिमेंट
<application>
:
<service android:name="com.example.android.syncadapter.AuthenticatorService"> <intent-filter> <action android:name="android.accounts.AccountAuthenticator"/> </intent-filter> <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" /> </service>
कॉन्टेंट बनाने
<intent-filter>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
एलिमेंट एक ऐसा फ़िल्टर सेट अप करता है जो इंटेंट कार्रवाई से ट्रिगर होता है
android.accounts.AccountAuthenticator
, जिसे सिस्टम की ओर से भेजा जाता है, ताकि
पुष्टि करने वाला. फ़िल्टर के ट्रिगर होने पर, सिस्टम AuthenticatorService
शुरू करता है,
पुष्टि करने वाले को रैप करने के लिए, आपने जो बाउंड Service
दिया है वह तय करता है.
कॉन्टेंट बनाने
<meta-data>
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
एलिमेंट, पुष्टि करने वाले के लिए मेटाडेटा के बारे में बताता है. कॉन्टेंट बनाने
android:name
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
एट्रिब्यूट, मेटा-डेटा को पुष्टि करने के फ़्रेमवर्क से जोड़ता है. कॉन्टेंट बनाने
android:resource
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
एलिमेंट, पुष्टि करने वाली उस मेटाडेटा फ़ाइल का नाम बताता है जिसे आपने पहले बनाया था.
पुष्टि करने वाले के अलावा, सिंक अडैप्टर के लिए कॉन्टेंट उपलब्ध कराने वाले की भी ज़रूरत होती है. अगर आपका ऐप्लिकेशन यह नहीं करता है पहले से ही कॉन्टेंट प्रोवाइडर का इस्तेमाल कर रहे हैं, तो स्टब कॉन्टेंट बनाने का तरीका जानने के लिए अगले लेसन पर जाएं कंपनी; अगर ऐसा नहीं है, तो सिंक अडैप्टर बनाना लेख देखें.