Bug 10617080 Fixed typo: "Determine if AccountManager for You" --> "Determine if AccountManager is for You" Change-Id: I5b8f1368dad72bbbeb581132f480baf46a029be8
138 lines
5.6 KiB
Plaintext
138 lines
5.6 KiB
Plaintext
page.title=Remembering Your User
|
|
parent.title=Remembering and Authenticating Users
|
|
parent.link=index.html
|
|
|
|
trainingnavtop=true
|
|
next.title=Authenticating to OAuth2 Services
|
|
next.link=authenticate.html
|
|
|
|
@jd:body
|
|
|
|
|
|
<div id="tb-wrapper">
|
|
<div id="tb">
|
|
<h2>This lesson teaches you to</h2>
|
|
<ol>
|
|
<li><a href="#ForYou">Determine if AccountManager is for You</a></li>
|
|
<li><a href="#TaskTwo">Decide What Type of Account to Use</a></li>
|
|
<li><a href="#GetPermission">Request GET_ACCOUNT permission</a></li>
|
|
<li><a href="#TaskFive">Query AccountManager for a List of Accounts</a></li>
|
|
<li><a href="#IdentifyUser">Use the Account Object to Personalize Your App</a></li>
|
|
<li><a href="#IdIsEnough">Decide Whether an Account Name is Enough</a></li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<p>Everyone likes it when you remember their name. One of the simplest, most
|
|
effective things you can do to make your app more lovable is to remember who
|
|
your user is—especially when the user upgrades to a new device or starts carrying
|
|
a tablet as well as a phone. But how do you know who your user is? And how do
|
|
you recognize them on a new device?</p>
|
|
|
|
<p>For many applications, the answer is the {@link android.accounts.AccountManager} APIs. With the
|
|
user's permission, you can use Account Manager to fetch the account names
|
|
that the user has stored on their device.</p>
|
|
|
|
<p>Integration with the user's accounts allows you to do a variety of things such as:</p>
|
|
<ul>
|
|
<li>Auto-fill forms with the user's email address.</li>
|
|
<li>Retrieve an ID that is tied to a user, not the device.</li>
|
|
</ul>
|
|
|
|
|
|
<h2 id="ForYou">Determine if AccountManager is for You</h2>
|
|
|
|
<p>Applications typically try to remember the user using one of three techniques:</p>
|
|
<ol type="a">
|
|
<li>Ask the user to type in a username </li>
|
|
<li>Retrieve a unique device ID to remember the device</li>
|
|
<li>Retrieve a built-in account from {@link android.accounts.AccountManager}</li>
|
|
</ol>
|
|
|
|
<p>Option (a) is problematic. First, asking the user to type something before
|
|
entering your app will automatically make your app less appealing. Second,
|
|
there's no guarantee that the username chosen will be unique. </p>
|
|
|
|
<p>Option (b) is less onerous for the user, but it's
|
|
<a href="http://android-developers.blogspot.com/2011/03/identifying-app-installations.html">tricky
|
|
to get right</a>. More
|
|
importantly, it only allows you to remember the user on one device. Imagine the
|
|
frustration of someone who upgrades to a shiny new device, only to find that
|
|
your app no longer remembers them.</p>
|
|
|
|
<p>Option (c) is the preferred technique. Account Manager allows you to get
|
|
information about the accounts that are stored on the user's device. As we'll
|
|
see in this lesson, using Account Manager lets you remember your user, no matter
|
|
how many devices the user may own, by adding just a couple of extra taps to your
|
|
UI.</p>
|
|
|
|
|
|
<h2 id="TaskTwo">Decide What Type of Account to Use</h2>
|
|
|
|
<p>Android devices can store multiple accounts from many different providers.
|
|
When you query {@link android.accounts.AccountManager} for account names, you can choose to filter
|
|
by
|
|
account type. The account type is a string that uniquely identifies the entity
|
|
that issued the account. For instance, Google accounts have type "com.google,"
|
|
while Twitter uses "com.twitter.android.auth.login."</p>
|
|
|
|
|
|
<h2 id="GetPermission">Request GET_ACCOUNT permission</h2>
|
|
|
|
<p>In order to get a list of accounts on the device, your app needs the {@link
|
|
android.Manifest.permission#GET_ACCOUNTS}
|
|
permission. Add a <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code
|
|
<uses-permission>}</a> tag in your manifest file to request
|
|
this permission:</p>
|
|
|
|
<pre>
|
|
<manifest ... >
|
|
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
|
...
|
|
</manifest>
|
|
</pre>
|
|
|
|
|
|
<h2 id="TaskFive">Query AccountManager for a List of Accounts</h2>
|
|
|
|
<p>Once you decide what account type you're interested in, you need to query for accounts of that
|
|
type. Get an instance of {@link android.accounts.AccountManager} by calling {@link
|
|
android.accounts.AccountManager#get(android.content.Context) AccountManager.get()}. Then use that
|
|
instance to call {@link android.accounts.AccountManager#getAccountsByType(java.lang.String)
|
|
getAccountsByType()}.</p>
|
|
|
|
<pre>
|
|
AccountManager am = AccountManager.get(this); // "this" references the current Context
|
|
|
|
Account[] accounts = am.getAccountsByType("com.google");
|
|
</pre>
|
|
|
|
<p>This returns an array of {@link android.accounts.Account} objects. If there's more than one
|
|
{@link android.accounts.Account} in
|
|
the array, you should present a dialog asking the user to select one.</p>
|
|
|
|
|
|
<h2 id="IdentifyUser">Use the Account Object to Personalize Your App</h2>
|
|
|
|
<p>The {@link android.accounts.Account} object contains an account name, which for Google accounts
|
|
is an
|
|
email address. You can use this information in several different ways, such as:
|
|
<ul>
|
|
<li> As suggestions in forms, so the user doesn't need to input account information by
|
|
hand.</li>
|
|
<li> As a key into your own online database of usage and personalization information.</li>
|
|
</ul>
|
|
</p>
|
|
|
|
|
|
<h2 id="IdIsEnough">Decide Whether an Account Name is Enough</h2>
|
|
|
|
<p>An account name is a good way to remember the user, but the {@link android.accounts.Account}
|
|
object by
|
|
itself doesn't protect your data or give you access to anything besides the user's account name. If your app
|
|
needs to allow the user to go online to access private data, you'll need something stronger: authentication.
|
|
The next lesson explains how to authenticate to existing online services. The lesson after that
|
|
deals with writing a custom authenticator so that you can install your own
|
|
account types.</p>
|