Android
Authentificateur Android
Recherche…
Service d'authentification de compte de base
Le système d'authentification de compte Android peut être utilisé pour authentifier le client avec un serveur distant. Trois informations sont requises:
- Un service, déclenché par
android.accounts.AccountAuthenticator
. Sa méthodeonBind
devrait renvoyer une sous-classe deAbstractAccountAuthenticator
. - Une activité pour demander à l'utilisateur des informations d'identification (activité de connexion)
- Un fichier de ressources xml pour décrire le compte
1. Le service:
Placez les autorisations suivantes dans votre fichier 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" />
Déclarez le service dans le fichier manifeste:
<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>
Notez que android.accounts.AccountAuthenticator
est inclus dans la balise intent-filter
. La ressource xml (nommée authenticator
ici) est spécifiée dans la balise meta-data
.
La classe de service:
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. La ressource 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" />
N'attribuez pas directement une chaîne à android:label
ou attribuez des tirables manquants. Il va planter sans avertissement.
3. Étendez la classe 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;
}
}
La méthode addAccount()
de la classe AbstractAccountAuthenticator
est importante car cette méthode est appelée lors de l'ajout d'un compte à partir de l'écran "Ajouter un compte" dans les paramètres sous. AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE
est important, car il inclura l'objet AccountAuthenticatorResponse nécessaire pour renvoyer les clés du compte lors de la vérification de l'utilisateur.