Android
Androidオーセンティケータ
サーチ…
基本的なアカウント認証サービス
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.AccountAuthenticator
はintent-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