Enviar um lembrete ao usuário

Todo mundo gosta de ser lembrado. Uma das coisas mais simples e eficazes que você pode fazer para tornar seu app mais agradável é lembrar quem é seu usuário, especialmente quando ele faz upgrade para um novo dispositivo ou começa a carregar um tablet e um smartphone. Mas como você sabe quem é seu usuário? E como reconhecê-los em um novo dispositivo?

Para muitos aplicativos, a resposta são as APIs AccountManager. Com a permissão do usuário, você pode usar o gerente de contas para buscar os nomes de contas que o usuário armazenou no dispositivo.

A integração com as contas do usuário permite que você faça várias coisas, como:

  • Preencha automaticamente formulários com o endereço de e-mail do usuário.
  • Recupere um ID vinculado a um usuário, não a um dispositivo.

Determinar se o AccountManager é para você

Normalmente, os aplicativos tentam se lembrar do usuário usando uma destas três técnicas:

  1. Peça para o usuário digitar um nome de usuário.
  2. Recuperar um código do dispositivo exclusivo para se lembrar do dispositivo.
  3. Recuperar uma conta integrada do AccountManager.

A opção (1) é problemática. Primeiro, pedir para o usuário inserir algo antes de usar o app automaticamente torna o app menos atraente. Em segundo lugar, não há garantia de que o nome de usuário escolhido seja único.

A opção (2) é menos onerosa para o usuário, mas é complicada acertar (link em inglês). Mais importante, ele só permite que você se lembre do usuário em um dispositivo. Imagine a frustração de alguém que faz upgrade para um dispositivo novo e descobre que seu app não se lembra mais dele.

A opção (3) é a técnica preferida. O gerente de contas permite receber informações sobre as contas armazenadas no dispositivo do usuário. O gerente de contas permite que você se lembre do seu usuário, independentemente do número de dispositivos que ele tenha, adicionando apenas alguns toques extras à interface.

Decidir que tipo de conta usar

Os dispositivos Android podem armazenar várias contas de vários provedores diferentes. Ao consultar AccountManager para nomes de contas, você pode optar por filtrar por tipo de conta. O tipo de conta é uma string que identifica exclusivamente a entidade que emitiu a conta. Por exemplo, as Contas do Google têm o tipo com.google, enquanto o Twitter usa com.twitter.android.auth.login.

Solicitar permissão GET_ACCOUNTS

Para ter uma lista de contas no dispositivo, seu app precisa da permissão GET_ACCOUNTS. Adicione uma tag <uses-permission> ao arquivo de manifesto para solicitar essa permissão:

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

Informar os usuários e solicitar consentimento

Para ver a lista de contas de usuário, chame getAccounts() ou getAccountsByType(). No entanto, lembre-se de que a API retorna dados pessoais e sensíveis do usuário e, sempre que o app acessar, coletar, usar ou compartilhar dados pessoais e sensíveis, você precisará divulgar esse fato claramente aos usuários. Para apps publicados no Google Play, as políticas que protegem os dados do usuário exigem que você faça o seguinte:

  1. Divulgue para o usuário como seu app acessa, coleta, usa ou compartilha dados pessoais e sensíveis. Saiba mais sobre divulgação aceitável e consentimento.
  2. Forneça uma Política de Privacidade que descreva seu uso desses dados dentro e fora do dispositivo.

Para saber mais, acesse a Política do Google Play sobre dados do usuário.

Consultar o AccountManager para receber uma lista de contas

Depois de decidir em qual tipo de conta você tem interesse, é necessário consultar as contas desse tipo. Consiga uma instância de AccountManager chamando AccountManager.get(). Em seguida, use essa instância para chamar 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");

Isso retorna uma matriz de objetos Account. Se houver mais de um Account na matriz, apresente uma caixa de diálogo solicitando que o usuário selecione uma delas.

Usar o objeto de conta para personalizar seu app

O objeto Account contém um nome de conta, que, no caso das Contas do Google, é um endereço de e-mail. É possível usar essas informações de várias maneiras, incluindo:

  • Como sugestões em formulários, para que o usuário não precise inserir informações da conta.
  • Como uma chave para seu próprio banco de dados on-line de informações de uso e personalização.

Decidir se um nome de conta é o suficiente

Um nome de conta é uma boa maneira de se lembrar do usuário, mas o objeto Account por si só não protege seus dados nem dá acesso a nada além do nome da conta do usuário. Se o app precisar permitir que o usuário fique on-line para acessar dados particulares, você vai precisar de algo mais forte: a autenticação. Saiba como se autenticar em serviços on-line atuais e como criar um autenticador personalizado para instalar seus próprios tipos de conta.