Suche…


Benutzerdefinierte Konten / Authentifizierung

Das folgende Beispiel zeigt eine umfassende Abdeckung der Schlüsselkonzepte und des grundlegenden Skelettaufbaus: -

  1. Sammelt Anmeldeinformationen vom Benutzer (normalerweise über einen von Ihnen erstellten Anmeldebildschirm)
  2. Authentifiziert die Anmeldeinformationen beim Server (speichert benutzerdefinierte Authentifizierung)
  3. Speichert die Anmeldeinformationen auf dem Gerät

Erweitern eines AbstractAccountAuthenticator (wird hauptsächlich zum Abrufen der Authentifizierung und zum erneuten Authentifizieren verwendet)

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

Erstellen Sie einen Dienst (das Account Manager-Framework stellt über die Dienstschnittstelle eine Verbindung zum erweiterten AbstractAccountAuthenticator her.)

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();
    }
}


Authenticator-XML-Konfiguration (Das Account Manager-Framework erfordert. Dies wird unter Einstellungen -> Konten in Android angezeigt.)

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

Änderungen an der AndroidManifest.xml (Bringen Sie alle oben genannten Konzepte zusammen, um sie programmgesteuert über den AccountManager nutzbar zu machen.)

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

Das nächste Beispiel enthält Informationen zur Verwendung dieses Setups.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow