Android AccountManager는 무엇을 사용해야하나요?


154

Android SDK에서 AccountManager를 보았고 계정 정보를 저장하는 데 사용됩니다. 따라서 나는 그것이 의도 한 것에 대한 일반적인 토론을 찾을 수 없습니다. 계정 관리자의 의도와 구매에 대한 유용한 토론에 대해 아는 사람이 있습니까? 이것이 어떤 유형의 계정에 적합한 지에 대한 의견이 있으십니까? 일반적인 웹 서비스에 대한 사용자 계정 정보를 넣을 위치입니까?


참고 2.1 이상을 대상으로하고 있으므로 합리적인 선택 인 경우 AccountManager를 사용할 수 있습니다
Phil

7
이 게시물 에이 질문에 대한 섹션이 있습니다 : udinic.wordpress.com/2013/04/24/…
Udinic

@ Udinic-감사합니다. 많은 도움!
채드 빙엄

이 주제는이 사이트에서 다루고 있습니다 : www.digigene.com/android/accounts-in-android/
Ali Nem

안드로이드에는 계정 관리를위한 라이브러리도 있습니다 .
Ali Nem

답변:


94

이 질문은 조금 낡았지만 여전히 좋은 생각입니다.

AccountManager, SyncAdapterContentProvider함께 이동합니다.

하지만 당신은 할 수 있습니다:

AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager 사용자에게 자격 증명을 정의하기위한 중앙 지점 (설정> 계정)을 제공합니다.
  • Android는를 통해 동기화를 수행 할 수있는 시점을 결정 SyncAdapter합니다. 배터리를 최적화하는 데 좋습니다 (예 : 네트워크가 다운 된 경우 동기화가 수행되지 않음)
  • ContentProvider응용 프로그램간에 데이터를 공유하는 편리한 방법입니다. 참고 : Android 에는 다른 프로세스 간 통신 방법이 있습니다.
  • ContentProvider일정은 백그라운드에서 데이터베이스 액세스 스레드 (가) AsyncQueryHanlder를 조회하는 데 도움이 ContentProvider명시 적으로 스레드를 처리 할 필요가없는 동안 응용 프로그램이 아닙니다 응답 (ANR) 오류를 방지 백그라운드 스레드에서.
  • ContentProvider관계로 ContentResolver의 관찰자 : 콘텐츠가 변경 될 때 통지를보기 쉽다이 수단

결론 : 프레임 워크 AccountManager/ SyncAdapter/ ContentProvider는 웹 리소스의 데이터를 동기화하려는 경우 도움이됩니다. API 7에서는 가짜 / 멍청한 구현 이 필요합니다.

  • 데이터 만 저장하려면 데이터 저장을위한 간단한 메커니즘을 고려해야합니다.
  • 유일한 리소스 만 가져와야하는 경우 AsyncTaskLoader
  • 이미지를 비동기 적으로로드하려면 Square Picasso 와 같은 특수 라이브러리를 사용할 수 있습니다
  • 주어진 시간에 일부 코드 만 실행하려는 경우 서비스 / 알람을 고려할 수 있습니다
  • API> = 7에서만 사용 가능 (더 이상 중요하지 않음)

마지막으로, 당신은을 사용하는 경우 SyncAdapter, 심각하게 고려 중포 기지 클라우드 메시징 신선한 업데이트 및 최적화 된 배터리 사용을 위해 "푸시 알림"일명 (이전에 Google 클라우드 메시징).


1
SDK 샘플에서 AccountAuthentificatorActivity 는 유일한 옵션입니다.
rds

아직이 클래스에 익숙하지 않지만이 클래스가 사용자 상호 작용없이 함수 호출을 가진 계정을 추가 할 수 있습니까? 예를 들어 Microsoft Exchange 계정, Google 계정, POP3 / IMAP 계정을 추가하는 것과 같습니다. 감사.
dackyD


@rds에게 감사하지만 귀하의 설명에 따르면 샘플 코드로는 충분하지 않은 것 같습니다. 내 목표에 도달하려면 SyncAdapter와 ContentProvider를 구현해야합니다. 내가 틀렸다면 나를 바로
잡으십시오

절대적으로 맞습니다. 그것은 나의 첫 단락의 의미였습니다. 그들은 함께 가고 다른 것들 없이는 그것을 사용할 수 없습니다.
rds

23

AccountManager 클래스는 전화 계정과 통합되어 있습니다. 따라서 모든 가이드를 따르고 올바르게 작동하면 "설정-> 계정 및 동기화"메뉴에 계정이 표시됩니다. 거기에서 사용자 정의하거나 삭제할 수도 있습니다. 또한 accountManager에는 계정에 대한 인증 티켓 캐시가 있습니다. 계정을 동기화하지 않으려는 경우에도 사용할 수 있습니다 (내가 아는 한).

해당 메뉴에 계정을 표시하지 않으려면 AccountManager를 사용하지 말고 계정 데이터를 다른 곳에 저장하십시오 (공유 환경 설정에있을 수 있음) http://developer.android.com/guide/topics/data/data -storage.html


14

에서 http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/ :

퍼즐의 첫 번째 조각을 계정 인증 자라고하며, "계정 및 동기화"설정에서 사용자 계정이 표시되는 방법을 정의합니다. Account Authenticator를 구현하려면 3 가지가 필요합니다. onBind 메소드에서 AbstractAccountAuthenticator의 서브 클래스를 리턴하는 서비스, 사용자에게 신임 정보를 입력하도록하는 활동 및 사용자에게 표시 될 때 계정이 어떻게 보이는지 설명하는 xml 파일. 또한 android.permission.AUTHENTICATE_ACCOUNTS 권한을 AndroidManifest.xml에 추가해야합니다.


3
좋은 기사이지만 AccountManager가 연락처와 이메일을 동기화하는 계정에만 해당되거나 사용자 ID와 비밀번호가있는 계정에 사용할 수 있다고 생각하십니까?
Phil

@ 필 : AccountManager를 사용한 적이 없어서 말할 수 없습니다. 2.0과 함께 제공되므로 SDK가 낮은 장치에서 실행하려는 경우 로그인을 처리하는 다른 방법을 찾아야합니다.
Macarse

6
어떤 방식 으로든 저장 한 모든 종류의 데이터를 동기화하여 모든 종류의 계정에 대해 계정 관리자를 사용할 수 있습니다. 북마크를 sqlite 데이터베이스에 동기화하는 데 사용하는 예제는 github.com/maxpower47/PinDroid 를 확인하십시오 .
maxpower47

7

AccountManager다음과 같은 이유로 좋은 :

  • 첫 번째는 단일 계정 유형으로 앱 기능에 대한 액세스 수준이 다른 여러 계정 이름을 저장하는 것입니다. 예를 들어, 비디오 스트리밍 앱에서 하나는 두 개의 계정 이름을 가질 수 있습니다. 하나는 제한된 수의 비디오에 대한 데모 액세스 권한이 있고 다른 하나는 모든 비디오에 대한 전체 월 액세스 권한이 있습니다. Accounts그러나이 멋진 외관을 요구하지 않고도 앱에서 쉽게 관리 할 수 ​​있기 때문에을 사용하는 주된 이유는 아닙니다 Accounts.
  • 사용의 또 다른 장점은 Accounts인증이 백그라운드에서 수행되고 사용자에게 특정 조건에서만 비밀번호를 요청하기 때문에 사용자가 권한 부여 된 기능을 요청할 때마다 사용자 이름 및 비밀번호로 기존 권한을 제거하는 것입니다. 나는 나중에 그것을 얻을 것이다.
  • Accounts안드로이드에서이 기능을 사용하면 자신의 계정 유형을 정의 할 필요가 없습니다. 인증을 위해 Google 계정을 사용하여 앱을 방문했을 수 있습니다. 그러면 새 계정을 만들고 사용자의 자격 증명을 기억해야하는 번거 로움이 줄어 듭니다.
  • Accounts 설정 → 계정을 통해 독립적으로 추가 할 수 있습니다
  • 를 사용하여 크로스 플랫폼 사용자 권한을 쉽게 관리 할 수 ​​있습니다 Accounts. 예를 들어, 클라이언트는 반복적 인 로그인없이 Android 기기와 PC에서 동시에 보호 된 자료에 액세스 할 수 있습니다.
  • 보안 관점에서 서버에 대한 모든 요청에서 동일한 비밀번호를 사용하면 비보안 연결에서 도청이 가능합니다. 비밀번호 도용을 방지하기 위해 비밀번호 암호화로는 충분하지 않습니다.
  • 마지막으로, AccountsAndroid에서이 기능 을 사용하는 중요한 이유 Accounts는 클라이언트 (사용자)의 자격 증명을 손상시키지 않고 인증 자 및 리소스 소유자 에 의존하는 비즈니스에 관련된 두 당사자를 분리하는 것 입니다. 용어는 다소 모호해 보일 수 있지만 다음 단락을 읽을 때까지 포기하지 마십시오… 😉

비디오 스트리밍 앱의 예를 통해 후자를 자세히 설명하겠습니다. 회사 A는 특정 회원에게 프리미엄 스트리밍 서비스를 제공하기 위해 회사 B와 계약 한 비디오 스트리밍 비즈니스의 소유자입니다. 회사 B는 사용자를 인식하기 위해 사용자 이름과 비밀번호 방법을 사용합니다. 회사 A가 B의 프리미엄 회원을 인식 할 수있는 한 가지 방법은 B에서 해당 회원의 목록을 가져오고 유사한 사용자 이름 / 암호 일치 메커니즘을 이용하는 것입니다. 이런 식으로 인증 자와 리소스 소유자는 동일합니다 (회사 A). 두 번째 비밀번호를 기억해야하는 사용자의 의무 이외에, A의 서비스를 사용하기 위해 회사 B의 프로파일과 동일한 비밀번호를 설정했을 가능성이 높습니다. 이는 바람직하지 않습니다.

위의 단점을 해결하기 위해 OAuth가 도입되었습니다. 승인의 공개 표준 인 위의 예에서 OAuth는 적격 사용자 (타사)에게 액세스 토큰이라는 일부 토큰을 발행하고 회사 A (자원 소유자)에게 토큰. 따라서 토큰이 없다는 것은 자격이 없음을 의미합니다.

나는 이것에 대해 더 자세히 설명하고 여기AccountManager 내 웹 사이트 에서 더 자세히 설명 했다.

이것은 AccountManager를 사용하는 간단한 응용 프로그램입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.