Android
Android प्रमाणिक
खोज…
मूल खाता प्रमाणक सेवा
एंड्रॉइड अकाउंट ऑथेंटिकेटर सिस्टम का उपयोग क्लाइंट को रिमोट सर्वर से प्रमाणित करने के लिए किया जा सकता है। जानकारी के तीन टुकड़े आवश्यक हैं:
-
android.accounts.AccountAuthenticator
द्वारा ट्रिगर की गई एक सेवा। इसकीonBind
विधि कोAbstractAccountAuthenticator
का एक उपवर्ग वापस करना चाहिए। - क्रेडेंशियल के लिए उपयोगकर्ता को संकेत देने के लिए गतिविधि (लॉगिन गतिविधि)
- खाते का वर्णन करने के लिए एक xml संसाधन फ़ाइल
1. सेवा:
अपने AndroidManifest.xml में निम्नलिखित अनुमतियाँ रखें:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
सेवा को घोषणा फ़ाइल में घोषित करें:
<service android:name="com.example.MyAuthenticationService">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
ध्यान दें कि android.accounts.AccountAuthenticator
intent-filter
टैग के भीतर शामिल है। meta-data
टैग में xml संसाधन (यहाँ authenticator
नाम दिया गया है) निर्दिष्ट है।
सेवा वर्ग:
public class MyAuthenticationService extends Service {
private static final Object lock = new Object();
private MyAuthenticator mAuthenticator;
public MyAuthenticationService() {
super();
}
@Override
public void onCreate() {
super.onCreate();
synchronized (lock) {
if (mAuthenticator == null) {
mAuthenticator = new MyAuthenticator(this);
}
}
}
@Override
public IBinder onBind(Intent intent) {
return mAuthenticator.getIBinder();
}
}
2. xml संसाधन:
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.example.account"
android:icon="@drawable/appicon"
android:smallIcon="@drawable/appicon"
android:label="@string/app_name" />
सीधे android:label
को एक स्ट्रिंग असाइन न करें android:label
या लापता आरेखों को असाइन करें। यह बिना किसी चेतावनी के दुर्घटनाग्रस्त हो जाएगा।
3. AbstractAccountAuthenticator वर्ग बढ़ाएँ:
public class MyAuthenticator extends AbstractAccountAuthenticator {
private Context mContext;
public MyAuthenticator(Context context) {
super(context);
mContext = context;
}
@Override
public Bundle addAccount(AccountAuthenticatorResponse response,
String accountType,
String authTokenType,
String[] requiredFeatures,
Bundle options) throws NetworkErrorException {
Intent intent = new Intent(mContext, LoginActivity.class);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
Bundle bundle = new Bundle();
bundle.putParcelable(AccountManager.KEY_INTENT, intent);
return bundle;
}
@Override
public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) throws NetworkErrorException {
return null;
}
@Override
public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
return null;
}
@Override
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException {
return null;
}
@Override
public String getAuthTokenLabel(String authTokenType) {
return null;
}
@Override
public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) throws NetworkErrorException {
return null;
}
@Override
public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException {
return null;
}
}
AbstractAccountAuthenticator
वर्ग में addAccount()
विधि महत्वपूर्ण है क्योंकि यह विधि सेटिंग्स में "खाता जोड़ें" स्क्रीन से खाता जोड़ते समय कहा जाता है। AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE
महत्वपूर्ण है, क्योंकि इसमें AccountAuthenticatorResponse ऑब्जेक्ट शामिल होगा जो सफल उपयोगकर्ता सत्यापन पर खाता कुंजियाँ वापस करने के लिए आवश्यक है।