Buscar..


Servicio Autenticador de Cuenta Básico

El sistema de autenticación de cuenta de Android se puede utilizar para que el cliente se autentique con un servidor remoto. Se requieren tres piezas de información:

  • Un servicio, activado por android.accounts.AccountAuthenticator . Su método onBind debería devolver una subclase de AbstractAccountAuthenticator .
  • Una actividad para solicitar al usuario las credenciales (actividad de inicio de sesión)
  • Un archivo de recursos xml para describir la cuenta.

1. El servicio:

Coloque los siguientes permisos en su 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" />

Declara el servicio en el archivo manifiesto:

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

Tenga en cuenta que android.accounts.AccountAuthenticator está incluido dentro de la etiqueta intent-filter . El recurso xml (denominado authenticator aquí) se especifica en la etiqueta de meta-data .

La clase de servicio:

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. El recurso 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" />

No asigne directamente una cadena a android:label o asigne los elementos dibujables que faltan. Se estrellará sin previo aviso.

3. Extienda la clase 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;
    }
}

El método addAccount() en la clase AbstractAccountAuthenticator es importante ya que se llama a este método cuando se agrega una cuenta desde la pantalla "Agregar cuenta" en la configuración debajo de. AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE es importante, ya que incluirá el objeto AccountAuthenticatorResponse que se necesita para devolver las claves de la cuenta luego de la verificación exitosa del usuario.



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