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をセットする
を行います。