본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] AbstractAccountAuthenticator 에 대해 알아보자.

by 돼지왕 왕돼지 2017. 7. 6.
반응형

 [android] AbstractAccountAuthenticator 에 대해 알아보자.


http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html


AbstractAccountAuthenticator, account-authenticator, AccountAuthenticatorActivity, AccountAuthenticatorResponse, accountmanagerresponse, accountPreferences, accounttype, account_preferences, Action, activity, addAccount, addAccountFromCredentials, Android, android.accounts.accountauthenticator, AuthenticationService, authenticator, authenticator.xml, Bundle, confirmCredentials, editProperties, getAccountCredentialsForCloning, getAccountRemovalAllowed, getAuthToken, getAuthTokenLabel, getIBinder, hasFeatures, Icon, intent, intent filter, key_account_manager_response, KEY_INTENT, Label, metadata, onerror, onresult, Param, PreferenceCategory, PreferenceScreen, request, Resource, Return, Service, smallicon, targetclass, targetpackage, unique string, updateCredentials, [android] AbstractAccountAuthenticator, 계정 생성


-

계정을 생성하기 위해서는 AbstractAccountAuthenticator 를 구현한 녀석을 가지고 있어야 한다. 

또한 android.accounts.AccountAuthenticator action 을 처리하는 Service 도 구현해야 한다.

해당 service 에서는 Authenticator 의 getIBinder() 를 수행한 녀석을 IBinder 로 return 해주어야 한다.



-

AuthenticationService 는 다음과 같은 intent filter 와 metadata 를 가지고 있어야 한다.

<service name="...">
    <intent-filter>
        <action android:name="android.accounts.AccountAuthenticator" />
    </intent-filter>

    <meta-data android:name="android.accounts.AccountAuthenticator"
              android:resource="@xml/authenticator" />
</service>

meta-data 에서 참조하는 resource 는 다음과 같은 foramt 을 갖는다.


xml/authenticator.xml

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="com.cklee.test"
    android:icon="@drawable/icon"
    android:smallIcon="@drawable/smallIcon"
    android:label="@string/app_name"
    android:accountPreferences="@xml/account_preferences"
 />


accountType 은 Account class 의 type 에 매핑되는 녀석으로 unique 한 string 이어야 한다.

icon 은 설정의 계정에 나오는 아이콘이고, smallIcon 은 연락처앱에 표시되는 계정 아이콘이다.


accountPreference 는 다음과 같은 format 을 갖으며, 설정의 계정 항목에 나오는 내용을 표시한다.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/title_fmt" />
    <PreferenceScreen
         android:key="key1"
         android:title="@string/key1_action"
         android:summary="@string/key1_summary">
         <intent
             android:action="key1.ACTION"
             android:targetPackage="key1.package"
             android:targetClass="key1.class" />
     </PreferenceScreen>
 </PreferenceScreen>


-

AbstractAccountAuthenticator 를 구현하는 방법은 아래와 같다.

     Authenticator 에 전달되는 param 을 기반으로 Bundle 에 결과물을 담아서 return 한다.

     Authenticator 가 전달되는 param 외에 정보가 더 필요하다면, Intent 를 통해 Activity 를 호출해 추가정보를 받을 수 있다. 이 때 Bundle 은 KEY_INTENT 를 통해 return 되어야 한다. Activity 가 result 를 돌려줄 때는 KEY_ACCOUNT_MANAGER_RESPONSE 에 AccountAuthenticatorResponse 를 전달해야 한다. onResult(Bundle) 이나 onError(int, String) 을 호출해야 한다.

      Authenticator 가 동기적으로 어떤 요청을 수행할 수 없다면, null 을 return 하고, AccountManagerResponse 를 이용하여 요청 수행이 끝나면 전달할 수 있다.

 

 

-

request 처리를 위해서 AccountAuthenticatorActivity 를 사용하는 것이 권장된다.



-

abstract Bundle    addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options)

Bundle    addAccountFromCredentials(AccountAuthenticatorResponse response, Account account, Bundle accountCredentials)

abstract Bundle    confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options)

abstract Bundle    editProperties(AccountAuthenticatorResponse response, String accountType)

Bundle    getAccountCredentialsForCloning(AccountAuthenticatorResponse response, Account account)

Bundle    getAccountRemovalAllowed(AccountAuthenticatorResponse response, Account account)

abstract Bundle    getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options)

abstract String    getAuthTokenLabel(String authTokenType)

final IBinder    getIBinder()

abstract Bundle    hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features)

abstract Bundle    updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options)




반응형

댓글