사용자 저장

누구나 다른 사람이 자신의 이름을 기억해 주면 좋아합니다. 더 많은 사랑을 받는 앱을 만들기 위해 할 수 있는 가장 간단하고 효과적인 방법 중 하나는 특히 사용자가 새 기기로 업그레이드하거나 태블릿과 휴대전화를 함께 휴대하기 시작할 때 사용자가 누구인지 기억하는 것입니다. 사용자가 누구인지 어떻게 알까요? 새 기기에서는 어떻게 인식할까요?

많은 애플리케이션에서 AccountManager API가 그 답입니다. 사용자의 권한이 있으면 계정 관리자를 사용하여 사용자가 기기에 저장한 계정 이름을 가져올 수 있습니다.

사용자 계정과 통합하면 다음과 같은 다양한 작업을 할 수 있습니다.

  • 사용자의 이메일 주소로 양식을 자동 완성합니다.
  • 기기가 아닌 사용자와 연결된 ID를 가져옵니다.

AccountManager가 적합한지 확인하기

애플리케이션은 일반적으로 다음 3가지 기법 중 하나를 사용하여 사용자를 기억합니다.

  1. 사용자에게 사용자 이름을 입력하도록 요청합니다.
  2. 고유한 기기 ID를 회수하여 기기 기억하기
  3. AccountManager에서 기본 제공 계정을 가져옵니다.

옵션(1)에는 문제가 있습니다. 첫째, 앱을 사용하기 전에 사용자에게 무언가를 입력하도록 요청하면 앱의 매력이 자동으로 낮아집니다. 둘째, 선택한 사용자 이름이 고유하지 않을 수도 있습니다.

옵션 (2)는 사용자에게는 덜 부담스럽지만 제대로 하기가 어렵습니다. 더 중요한 점은 하나의 기기에서만 사용자를 기억할 수 있다는 것입니다. 반짝이는 새 기기로 업그레이드한 사용자가 더 이상 사용자를 기억하지 못하는 불만을 상상해 보세요.

옵션(3)이 선호되는 기법입니다. 계정 관리자를 사용하면 사용자 기기에 저장된 계정에 관한 정보를 가져올 수 있습니다. 계정 관리자를 사용하면 UI에 탭 몇 개만 추가하면 되므로 사용자가 소유한 기기 수와 관계없이 사용자를 기억할 수 있습니다.

사용할 계정 유형 결정하기

Android 기기는 서로 다른 제공업체의 여러 계정을 저장할 수 있습니다. AccountManager에 계정 이름을 쿼리할 때는 계정 유형을 기준으로 필터링할 수 있습니다. 계정 유형은 계정을 발급한 법인을 고유하게 식별하는 문자열입니다. 예를 들어 Google 계정의 유형은 com.google이고 Twitter는 com.twitter.android.auth.login를 사용합니다.

GET_ACCOUNTS 권한 요청

기기의 계정 목록을 가져오려면 앱에 GET_ACCOUNTS 권한이 필요합니다. 매니페스트 파일에 <uses-permission> 태그를 추가하여 이 권한을 요청합니다.

<manifest ... >
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    ...
</manifest>

사용자에게 알리고 동의 얻기

getAccounts() 또는 getAccountsByType()를 호출하여 사용자 계정 목록을 가져올 수 있습니다. 그러나 API는 개인 정보 및 민감한 사용자 데이터를 반환하며 앱에서 개인 정보 및 민감한 정보에 액세스하거나 이러한 정보를 수집, 사용 또는 공유할 때마다 이 사실을 사용자에게 명확하게 공개해야 합니다. Google Play에 게시된 앱의 경우 사용자 데이터를 보호하는 정책에 따라 다음을 실행해야 합니다.

  1. 앱에서 개인 정보 및 민감한 정보에 액세스하거나 이를 수집, 사용 또는 공유하는 방법을 사용자에게 공개합니다. 허용되는 공개 및 동의에 관해 자세히 알아보세요.
  2. 기기 안팎에서 이 데이터가 사용되는 것을 설명하는 개인정보처리방침을 제공합니다.

자세한 내용은 사용자 데이터에 관한 Google Play 정책을 참고하세요.

AccountManager로 계정 목록 쿼리하기

관심 있는 계정 유형을 결정했으면 해당 유형의 계정을 쿼리해야 합니다. AccountManager.get()를 호출하여 AccountManager의 인스턴스를 가져옵니다. 그런 다음 이 인스턴스를 사용하여 getAccountsByType()를 호출합니다.

Kotlin

val am: AccountManager = AccountManager.get(this) // "this" references the current Context

val accounts: Array<out Account> = am.getAccountsByType("com.google")

Java

AccountManager am = AccountManager.get(this); // "this" references the current Context

Account[] accounts = am.getAccountsByType("com.google");

그러면 Account 객체의 배열이 반환됩니다. 배열에 Account가 두 개 이상 있으면 사용자에게 하나를 선택하라는 대화상자를 표시합니다.

Account 객체를 사용하여 앱 맞춤설정하기

Account 객체에는 계정 이름이 포함되며, 이 계정 이름은 Google 계정에서 이메일 주소입니다. 다음과 같은 여러 방법으로 이 정보를 사용할 수 있습니다.

  • 사용자가 직접 계정 정보를 입력할 필요가 없도록 양식에서 추천 내용으로 사용합니다.
  • 자체 사용량 및 맞춤설정 정보 온라인 데이터베이스의 키로 사용합니다.

계정 이름이 충분한지 결정하기

계정 이름은 사용자를 기억하는 좋은 방법이지만 Account 객체 자체는 데이터를 보호하지 않으며 사용자의 계정 이름 이외의 항목에 대한 액세스 권한을 부여하지 않습니다. 앱에서 사용자가 비공개 데이터에 액세스하기 위해 온라인으로 전환할 수 있도록 해야 한다면 더 강력한 기능이 필요합니다. 바로 인증이 필요합니다. 자체 계정 유형을 설치할 수 있도록 기존 온라인 서비스에 인증하는 방법커스텀 인증자를 작성하는 방법을 알아보세요.