수색…


기본 계정 인증 자 서비스

안드로이드 계정 인증 시스템은 클라이언트를 원격 서버로 인증하는 데 사용할 수 있습니다. 세 가지 정보가 필요합니다.

  • android.accounts.AccountAuthenticator 에 의해 트리거되는 서비스입니다. 그것의 onBind 메쏘드는 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 태그 내에 포함되어 있습니다. 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() 메소드가 중요합니다. 성공적인 사용자 확인시 계정 키를 반환하는 데 필요한 AccountAuthenticatorResponse 개체가 포함되므로 AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE 가 중요합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow