Implementar planos de dados

O Android 9 permite que as operadoras forneçam diretamente detalhes autorizados do plano aos usuários no app Configurações para reduzir a confusão e oferecer suporte a chamadas. Em dispositivos com Android 4.0 e versões mais recentes, os usuários podem configurar manualmente os detalhes do plano de dados específico da operadora no app Configurações, por exemplo, definindo avisos e limites para gerenciar o uso de dados.

Configuração por operadora

Para configurar planos de dados, as operadoras podem adicionar funcionalidades aos apps Android usando as APIs SubscriptionPlan. As APIs foram projetadas para oferecer suporte a uma ampla variedade de tipos de planos de dados, incluindo planos recorrentes e não recorrentes, além de planos que mudam com o tempo.

Confira um exemplo de como configurar um tipo comum de plano de dados que se repete mensalmente:

SubscriptionManager sm =
    context.getSystemService(SubscriptionManager.class);
sm.setSubscriptionPlans(subId, Lists.newArrayList(
    SubscriptionPlan.Builder.createRecurringMonthly(
            ZonedDateTime.parse("2016-12-03T10:00:00Z"))
        .setTitle("G-Mobile")
        .setDataLimit(4_000_000_000L,
            SubscriptionPlan.LIMIT_BEHAVIOR_BILLED)
        .setDataUsage(200_493_293L, dataUsageTimestamp)
        .build()));

O dispositivo só permite que um app configure planos de dados em uma destas condições:

As duas primeiras condições permitem que o app da operadora seja instalado pelo usuário sem precisar ser pré-instalado na imagem do sistema na fábrica. O SO exige (e o CDD requer) que todos os detalhes do plano de dados configurados sejam protegidos e disponibilizados apenas para o app da operadora que originalmente forneceu os detalhes ao SO.

Um design sugerido é que um app da operadora use um serviço de manutenção ocioso para atualizar os detalhes do plano de dados diariamente, mas as operadoras podem usar uma ampla variedade de mecanismos, como receber detalhes do plano de dados por mensagens SMS internas da operadora. A melhor maneira de implementar serviços de manutenção ociosa é com um trabalho JobScheduler que usa setRequiresDeviceIdle() e setRequiresCharging().

Uso por SO

O SO usa os detalhes do plano de dados fornecidos pelas APIs SubscriptionPlan das seguintes maneiras:

  • Os detalhes do plano são exibidos no app Configurações para mostrar aos usuários o uso de dados preciso e fornecer links diretos para o app da operadora para oportunidades de upgrade/upsell.
  • Os limites de aviso e notificação de uso de dados são configurados automaticamente com base nos detalhes do plano. O aviso é definido em 90% do limite.
  • Se a operadora indicar temporariamente que a rede está "congestionada", o SO vai atrasar os trabalhos do JobScheduler que podem ser adiados, reduzindo a carga na rede da operadora.
  • Se a operadora indicar temporariamente que a rede é "ilimitada", o SO poderá informar que a conexão de celular é "ilimitada" até que a operadora remova a substituição ou até que o valor de tempo limite (se fornecido) seja atingido.
  • Ao comparar o uso atual de dados do usuário com o limite geral, o SO estima o uso normal de dados do usuário no final do ciclo de faturamento e aloca de forma conservadora 10% de qualquer excedente de dados para melhorar a experiência do usuário, por exemplo, permitindo que os apps usem dados de vários caminhos.

Personalização e validação

O app Configurações do Android mostra todos os detalhes do plano de dados configurados pela operadora, garantindo que os usuários vejam o status mais preciso do relacionamento com a operadora e oferecendo um caminho para o app da operadora fazer upgrade do plano. Recomendamos que os fabricantes de dispositivos que optarem por personalizar o app Configurações continuem mostrando esses detalhes.

As APIs SubscriptionManager descritas nesta página são testadas pelo android.telephony.cts.SubscriptionManagerTest, o que garante que os detalhes do plano de dados podem ser configurados por apps de operadora e que as mudanças são propagadas no SO.