Android
Autenticatore Android
Ricerca…
Servizio di autenticazione account di base
Il sistema Autenticatore account Android può essere utilizzato per rendere il client autenticato con un server remoto. Sono richieste tre informazioni:
- Un servizio, attivato da
android.accounts.AccountAuthenticator
. Il suo metodoonBind
dovrebbe restituire una sottoclasse diAbstractAccountAuthenticator
. - Un'attività per richiedere all'utente le credenziali (attività di accesso)
- Un file di risorse xml per descrivere l'account
1. Il servizio:
Inserisci le seguenti autorizzazioni nel tuo 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" />
Dichiarare il servizio nel file manifest:
<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>
Tieni presente che android.accounts.AccountAuthenticator
è incluso nel tag intent-filter
. La risorsa xml (denominata authenticator
qui) è specificata nel tag meta-data
.
La classe di servizio:
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 risorsa 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" />
Non assegnare direttamente una stringa ad android:label
o assegna i drawable mancanti. Crollerà senza preavviso.
3. Estendi 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;
}
}
Il metodo addAccount()
nella classe AbstractAccountAuthenticator
è importante poiché questo metodo viene chiamato quando si aggiunge un account dalla schermata "Aggiungi account" in Impostazioni. AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE
è importante, poiché includerà l'oggetto AccountAuthenticatorResponse necessario per restituire le chiavi dell'account in seguito alla verifica dell'utente.