Android.accounts.AccountManager
Service process
보통 서버에 접속하는 어플리케이션들은 이러한 절차를 통하게 된다.
-
get(Context)
를 사용해서 AccountManager의 인스턴스를 얻는다. -
getAccountByType(String)
이나getAccountByTypeAndFeatures(String, String[], AccountManagerCallback, Handler)
를 사용해서 이용가능한 계정을 나열한다. 보통 어플리케이션들은 하나의 특정 타입(타입은 Authenticator를 식별한다)을 가진 계정에 관심을 갖게 된다. 계정 Feature들은 특정 계정 서브타입과 Capabilities를 식별하기 위해 사용된다. Account Type과 Feature 두 가지 모두는 Authenticator용의 문자열들이다. 그리고 그것의 Prefered Authenticator들과 일치하는 어플리케이션에 의해 알려져야 한다. - 가능하면 사용자에게 선호하는 계정에 대한 요청을 통해 이용가능한 계정 중에 하나 이상을 선택한다. 적합한 계정을 이용할 수 없다면
addAccount(String, String, String[], Bundle, Activity.AccountManagerCallback, Handler)
는 사용자에게 적당한 타입의 계정을 생성하도록 하기 위해 호출된다. - 어플리케이션이 전에 기억되어진 계정 선택을 사용한다면 계정이 아직도
getAccountByType(String)
이 리턴한 계정 리스트에 있다는 것이 보장되어야 한다. 디바이스 상에서 계정을 위한 Auth token을 더이상 요청하지 않으면 정의되지 않은 실패가 발생한다. -
getAuthToken(Account, String, Bundle, Activity, AccountManagerCallback, Handler)
메소드나 관련 Helper들 중 하나를 사용 해서 선택된 계정들을 위한 Auth token을 요청한다. - Auth token을 사용하는 요청을 만든다. Auth token의 폼, 요청의 포맷, 그리고 사용된 프로토콜은 모두 개발자가 접근 중인 서비스에 특화된다. 어플리케이션은 유용하다면 어떠한 네트워크와 프로토콜 라이브러리도 사용할 수 있다.
- 요청이 Authentication 에러를 발생하고 실패한다면 캐쉬된 Auth token이 오래되었거나 더 이상 서버에 의해 인정되지 않음을 의미한다. 어플리케이션은 캐쉬로부터 Token을 제거하기 위해
invalidateAuthToken(String, String)
을 호출해야 한다. 그렇지 않으면 요청들은 계속 실패할 것이다. Auth token을 무효화한 후에 즉시 상단의 "Auth token을 요청한다" 단계로 돌아간다. 만약 두 번째 실패하면 그것은 진짜 Authentication 실패로 취급되고 사용자는 노티를 받게 되거나 다른 적절한 액션들이 취해진다.