Zoeken…


Basic Account Authenticator-service

Het Android Account Authenticator-systeem kan worden gebruikt om de client te authenticeren met een externe server. Er zijn drie gegevens vereist:

  • Een service die wordt geactiveerd door de android.accounts.AccountAuthenticator . De onBind methode moet een subklasse van AbstractAccountAuthenticator retourneren.
  • Een activiteit om de gebruiker om inloggegevens te vragen (aanmeldingsactiviteit)
  • Een XML-bronbestand om het account te beschrijven

1. De service:

Plaats de volgende machtigingen in uw 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" />

Declareer de service in het manifestbestand:

<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>

Merk op dat de android.accounts.AccountAuthenticator is opgenomen in de intent-filter tag. De xml-bron (hier authenticator genoemd) is gespecificeerd in de meta-data tag.

De serviceklasse:

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. De XML-bron:

<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" />

Wijs niet direct een string toe aan android:label of wijs ontbrekende tekentekens toe. Het zal zonder waarschuwing crashen.

3. Breid de klasse AbstractAccountAuthenticator uit:

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;
    }
}

De methode addAccount() in de klasse AbstractAccountAuthenticator is belangrijk omdat deze methode wordt aangeroepen bij het toevoegen van een account vanuit het scherm "Account toevoegen" onder instellingen. AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE is belangrijk, omdat het het object AccountAuthenticatorResponse zal bevatten dat nodig is om de accountcodes terug te geven na succesvolle gebruikersverificatie.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow