サーチ…


基本的なアカウント認証サービス

Androidアカウントオーセンティケータシステムを使用して、クライアントをリモートサーバーで認証することができます。 3つの情報が必要です。

  • サービスは、 android.accounts.AccountAuthenticatorによってトリガーされます。そのonBindメソッドは、 AbstractAccountAuthenticatorサブクラスを返す必要がありAbstractAccountAuthenticator
  • ユーザーに資格情報の入力を促すアクティビティ(ログインアクティビティ)
  • アカウントを記述するxmlリソースファイル

1.サービス:

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

マニフェストファイルでサービスを宣言します。

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

android.accounts.AccountAuthenticatorintent-filterタグに含まれています。 meta-dataタグにはxmlリソース(ここではauthenticatorという名前)が指定されていmeta-data

サービスクラス:

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

android:label文字列を直接割り当てたり、欠落しているドロアブルを割り当てたりしないでください。警告なしでクラッシュします。

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

AbstractAccountAuthenticatorクラスのaddAccount()メソッドは、設定の下の[アカウントの追加]画面からアカウントを追加するときに呼び出されるため、重要です。 AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSEは、成功したユーザー検証でアカウントキーを返すために必要なAccountAuthenticatorResponseオブジェクトを含むため、重要です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow