Buscar..


Comprensión de cuentas personalizadas / autenticación

El siguiente ejemplo es la cobertura de alto nivel de los conceptos clave y la configuración básica del esqueleto:

  1. Recopila credenciales del usuario (normalmente de una pantalla de inicio de sesión que ha creado)
  2. Autentica las credenciales con el servidor (almacena autenticación personalizada)
  3. Almacena las credenciales en el dispositivo.

Extienda un AbstractAccountAuthenticator (utilizado principalmente para recuperar la autenticación y volver a autenticarlos)

public class AccountAuthenticator extends AbstractAccountAuthenticator {

  @Override
  public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
      String authTokenType, String[] requiredFeatures, Bundle options) {
    //intent to start the login activity
  }


  @Override
  public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) {
  }

  @Override
  public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
  }

  @Override
  public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType,
      Bundle options) throws NetworkErrorException {
    //retrieve authentication tokens from account manager storage or custom storage or re-authenticate old tokens and return new ones
  }

  @Override
  public String getAuthTokenLabel(String authTokenType) {
  }

  @Override
  public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features)
      throws NetworkErrorException {
    //check whether the account supports certain features
  }

  @Override
  public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType,
      Bundle options) {
    //when the user's session has expired or requires their previously available credentials to be updated, here is the function to do it.
  }
}

Crear un servicio (el marco de Account Manager se conecta al AbstractAccountAuthenticator extendido a través de la interfaz del servicio)

public class AuthenticatorService extends Service {

    private AccountAuthenticator authenticator;

    @Override
    public void onCreate(){
        authenticator = new AccountAuthenticator(this);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return authenticator.getIBinder();
    }
}


Configuración XML del autenticador (el marco de trabajo del administrador de cuentas requiere. Esto es lo que verá en Configuración -> Cuentas en Android)

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="rename.with.your.applicationid"
    android:icon="@drawable/app_icon"
    android:label="@string/app_name"
    android:smallIcon="@drawable/app_icon" />

Cambios en el AndroidManifest.xml (reúne todos los conceptos anteriores para que se pueda utilizar mediante programación a través del AccountManager)

<application
...>
    <service
        android:name=".authenticator.AccountAuthenticatorService"
        android:exported="false"
        android:process=":authentication">
        <intent-filter>
            <action android:name="android.accounts.AccountAuthenticator"/>
        </intent-filter>
        <meta-data
            android:name="android.accounts.AccountAuthenticator"
            android:resource="@xml/authenticator"/>
    </service>
</application>

El siguiente ejemplo contendrá cómo hacer uso de esta configuración.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow