モケラ

Tech Sheets

mokelab

Authenticatorを実装する

最終更新日:2015-07-01

アカウント機能サポートの第1ステップはAuthenticatorと呼ばれるクラスの実装です。

ここまで実装したものはgithubのこのブランチにあります。

Authenticatorクラスを追加する

AbstractAccountAuthenticatorクラスを継承したクラスを追加します。コンストラクタでは引数のContextをフィールドにセットしておきます。

public class Authenticator extends AbstractAccountAuthenticator {

    private final Context mContext;

    public Authenticator(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    public Bundle editProperties(AccountAuthenticatorResponse accountAuthenticatorResponse, String s) {
        return null;
    }

    @Override
    public Bundle addAccount(AccountAuthenticatorResponse response, String s, String s1, String[] strings, Bundle options) throws NetworkErrorException {
        Intent intent = new Intent(mContext, LoginActivity.class);
        intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);

        final Bundle bundle = new Bundle();
        bundle.putParcelable(AccountManager.KEY_INTENT, intent);
        return bundle;
    }

    @Override
    public Bundle confirmCredentials(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, Bundle bundle) throws NetworkErrorException {
        return null;
    }

    @Override
    public Bundle getAuthToken(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String s, Bundle bundle) throws NetworkErrorException {
        return null;
    }

    @Override
    public String getAuthTokenLabel(String s) {
        return null;
    }

    @Override
    public Bundle updateCredentials(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String s, Bundle bundle) throws NetworkErrorException {
        return null;
    }

    @Override
    public Bundle hasFeatures(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String[] strings) throws NetworkErrorException {
        return null;
    }
}

いろいろなメソッドの実装を求められますが、最初はnullを返すだけの状態でOKです。

addAccount()を実装する

まずはアカウント追加機能に対応させてみます。addAccount()で適切な処理を記述します。

@Override
public Bundle addAccount(AccountAuthenticatorResponse response, String s, String s1, String[] strings, Bundle options) throws NetworkErrorException {
    Intent intent = new Intent(mContext, LoginActivity.class);
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);

    final Bundle bundle = new Bundle();
    bundle.putParcelable(AccountManager.KEY_INTENT, intent);
    return bundle;
}

アカウント追加機能では、多くの場合、追加用の画面を表示することになると思います。追加用の画面を表示し、そこで追加処理を行うようにするには、

  • 画面遷移用のIntentを作成する。extraにAccountAuthenticatorResponseオブジェクトをセットしておく(上記コード参照)
  • 戻り値用のBundleオブジェクトを作成する。extraに先ほど作成したIntentをセットする

を行います。

一覧に戻る