Android
Autentificador de Android
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étodoonBind
debería devolver una subclase deAbstractAccountAuthenticator
. - 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.