खोज…


मूल खाता प्रमाणक सेवा

एंड्रॉइड अकाउंट ऑथेंटिकेटर सिस्टम का उपयोग क्लाइंट को रिमोट सर्वर से प्रमाणित करने के लिए किया जा सकता है। जानकारी के तीन टुकड़े आवश्यक हैं:

  • 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 ऑब्जेक्ट शामिल होगा जो सफल उपयोगकर्ता सत्यापन पर खाता कुंजियाँ वापस करने के लिए आवश्यक है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow