Szukaj…


Podstawowa usługa uwierzytelniania konta

Systemu uwierzytelniania konta Android można użyć do uwierzytelnienia klienta za pomocą zdalnego serwera. Wymagane są trzy informacje:

  • Usługa uruchamiana przez android.accounts.AccountAuthenticator . Jego metoda onBind powinna zwrócić podklasę AbstractAccountAuthenticator .
  • Działanie monitujące użytkownika o poświadczenia (działanie związane z logowaniem)
  • Plik zasobów xml opisujący konto

1. Usługa:

Umieść następujące uprawnienia w pliku 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" />

Zadeklaruj usługę w pliku manifestu:

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

Zauważ, że android.accounts.AccountAuthenticator jest zawarty w tagu intent-filter . Zasób xml (tutaj nazywany authenticator ) jest określony w znaczniku meta-data .

Klasa usług:

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. Zasób 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" />

Nie przypisuj bezpośrednio łańcucha android:label lub nie dodawaj brakujących ciągów. Awaria bez ostrzeżenia.

3. Rozszerz klasę 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;
    }
}

Metoda addAccount() w klasie AbstractAccountAuthenticator jest ważna, ponieważ ta metoda jest wywoływana podczas dodawania konta z ekranu „Dodaj konto” w ustawieniach. AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE jest ważny, ponieważ będzie zawierać obiekt AccountAuthenticatorResponse, który jest potrzebny do zwrócenia kluczy konta po pomyślnej weryfikacji użytkownika.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow