Solicitar indicadores de idade

Este documento descreve como solicitar indicadores de idade usando a API Play Age Signals.

O SDK Play Age Signals 0.0.4 apresenta uma arquitetura de duas funções projetada para simplificar as solicitações de indicadores de idade e oferecer suporte ao nosso modelo baseado na escolha do usuário. Para solicitar indicadores de idade, use este fluxo de trabalho de alto nível:

Chame o método requestAgeSignalsAccess(Activity), que retorna ageSignalsStatus. O valor de ageSignalsStatus pode ser SHARED, NOT_SHARED ou VERIFICATION_REQUIRED.

  • Se ageSignalsStatus == NOT_SHARED: seu app não vai receber indicadores de idade na resposta da API.
  • Se ageSignalsStatus == SHARED: chame o método checkAgeSignals(). Se o usuário ou o familiar responsável decidir compartilhar os indicadores de idade, você vai receber esses indicadores como parte da resposta da API e poderá decidir como processar a resposta.
  • Se ageSignalsStatus == VERIFICATION_REQUIRED: a idade do usuário é desconhecida e ele está em uma jurisdição ou região aplicável em que a confirmação de idade e o compartilhamento de indicadores de idade são obrigatórios. Para receber um indicador de idade do Google Play nessas regiões, peça ao usuário para acessar a Google Play Store e resolver o status.

O método requestAgeSignalsAccess(Activity) retorna valores diferentes dependendo se o compartilhamento obrigatório de idade é aplicável em uma região:

  • Para usuários qualificados nos estados dos EUA com leis que exigem que as app stores forneçam informações de idade verificadas aos desenvolvedores, o aviso no app não é acionado. Em vez disso, os usuários vão precisar verificar ou configurar a supervisão quando acessarem o app Google Play Store. Use o valor de ageSignalsStatus para determinar o status da verificação:
  • Para usuários em outras regiões em que o compartilhamento de idade é baseado na escolha do usuário ou do responsável:
    • Se a configuração do usuário for Perguntar antes de compartilhar, o aviso no app será mostrado. Se o usuário concordar em compartilhar a idade, o valor de ageSignalsStatus será SHARED. Caso contrário, será NOT_SHARED.
    • Se a configuração do usuário for Sempre compartilhar, a solicitação no app não será mostrada, e o valor de ageSignalsStatus será SHARED.
    • Se a configuração do usuário for Nunca compartilhar, a solicitação no app não será mostrada, e o valor de ageSignalsStatus será NOT_SHARED.
    • Para usuários supervisionados, os familiares responsáveis podem compartilhar a idade da criança nas configurações do app Family Link. Se os responsáveis decidirem compartilhar a idade, o valor de ageSignalsStatus será SHARED. Caso contrário, será NOT_SHARED.

A imagem a seguir mostra a configuração de faixa etária Perguntar antes de compartilhar nas configurações do Google Play.

Menu de configurações do Google Play mostrando opções de compartilhamento de idade: "Perguntar antes de compartilhar", "Sempre compartilhar" e "Nunca compartilhar"
Figura 1. Gerencie o compartilhamento de idade nas configurações do Google Play.

A imagem a seguir mostra a solicitação de compartilhamento de faixa etária no app exibida aos usuários quando a idade é solicitada pela API e a configuração é Perguntar antes de compartilhar.

Caixa de diálogo de consentimento no app pedindo que o usuário compartilhe a faixa etária com o app.
Figura 2. Solicitação de compartilhamento da faixa etária no app.

A imagem a seguir mostra como o usuário pode ativar ou desativar o compartilhamento de idade em um app específico.

Caixa de diálogo de configurações de um app específico mostrando um botão de alternância para ativar ou desativar o compartilhamento de faixa etária
Figura 3. Ative ou desative o compartilhamento de idade para um app específico.

O exemplo a seguir mostra como solicitar indicadores de idade:

Kotlin

// 1. Initialize the AgeSignalsManager (usually in onCreate or class initialization)
val ageSignalsManager = AgeSignalsManagerFactory.create(applicationContext)

// 2. Request or check for age signals access.
// Passing the current Activity allows the Play Store to render the age sharing prompt UI if required.
val accessRequest = AgeSignalsAccessRequest.builder()
    .setActivity(this)
    .build()

ageSignalsManager.requestAgeSignalsAccess(accessRequest)
    .addOnSuccessListener { accessResult ->
        if (accessResult.ageSignalsStatus() == AgeSignalsStatus.SHARED) {
            // The user (or parent) has agreed to share age range, or is in an eligible auto-share region.
            // Retrieve the actual age signals.
            retrieveAgeSignals(ageSignalsManager)
        } else {
            // Age signals are not shared (user didn't share age range, parent rejected the request, or not eligible).
        }
    }
    .addOnFailureListener { exception ->
        // Handle API/Play Store connection and system errors
        handleAgeSignalsError(exception)
    }

private fun retrieveAgeSignals(manager: AgeSignalsManager) {
    // 3. Perform the actual age signals query once sharing is active.
    manager.checkAgeSignals(AgeSignalsRequest.builder().build())
        .addOnSuccessListener { ageSignalsResult ->
            val installId = ageSignalsResult.installId()
            val ageLower = ageSignalsResult.ageLower()
            val ageUpper = ageSignalsResult.ageUpper()
            val significantChangeDate = ageSignalsResult.significantChangeApprovalDate()
            val ageRangeSource = ageSignalsResult.ageRangeSource()

            if (ageLower != null) {
                if (ageUpper != null) {
                    // The user is in a specific closed age range [ageLower, ageUpper] (e.g. [13, 15])
                } else {
                    // The user is in the highest open-ended age band [ageLower, null] (e.g. [18, null])
                }
            } else {
                // Both bounds are null: The user is not sharing their age (e.g. they are a verified adult)
            }
        }
        .addOnFailureListener { exception ->
            handleAgeSignalsError(exception)
        }
}

Java

// 1. Initialize the AgeSignalsManager (usually in onCreate or class initialization)
AgeSignalsManager ageSignalsManager = AgeSignalsManagerFactory.create(getApplicationContext());

// 2. Request or check for age signals access.
// Passing the current Activity allows the Play Store to render the age sharing prompt UI if required.
AgeSignalsAccessRequest accessRequest = AgeSignalsAccessRequest.builder()
    .setActivity(this)
    .build();

ageSignalsManager.requestAgeSignalsAccess(accessRequest)
    .addOnSuccessListener(accessResult -> {
        Integer status = accessResult.ageSignalsStatus();
        if (status == AgeSignalsStatus.SHARED) {
            // The user (or parent) has agreed to share age range, or is in an eligible auto-share region.
            // Retrieve the actual age signals.
            retrieveAgeSignals(ageSignalsManager);
        } else {
            // Age signals are not shared (user didn't share age range, parent rejected the request, or not eligible).
        }
    })
    .addOnFailureListener(exception -> {
        // Handle API/Play Store connection and system errors
    });

private void retrieveAgeSignals(AgeSignalsManager manager) {
    // 3. Perform the actual age signals query once sharing is active.
    manager.checkAgeSignals(AgeSignalsRequest.builder().build())
        .addOnSuccessListener(ageSignalsResult -> {
            String installId = ageSignalsResult.installId();
            Integer ageLower = ageSignalsResult.ageLower();
            Integer ageUpper = ageSignalsResult.ageUpper();
            Date significantChangeDate = ageSignalsResult.significantChangeApprovalDate();
            @AgeRangeSource Integer ageRangeSource = ageSignalsResult.ageRangeSource();

            if (ageLower != null) {
                if (ageUpper != null) {
                    // The user is in a specific closed age range [ageLower, ageUpper] (e.g. [13, 15])
                } else {
                    // The user is in the highest open-ended age band [ageLower, null] (e.g. [18, null])
                }
            } else {
                // Both bounds are null: The user is not sharing their age (e.g. they are a verified adult)
            }
        })
        .addOnFailureListener(exception -> {
            handleAgeSignalsError(exception);
        });
}

Pontos principais sobre o código

  • O método requestAgeSignalsAccess(Activity) realiza uma verificação de bloqueio dos indicadores de idade atuais do usuário e do status de compartilhamento desses indicadores.
  • Depois que você chamar requestAgeSignalsAccess(Activity), o Google Play vai mostrar um comando no app integrado apenas para usuários sem supervisão. Os familiares responsáveis por usuários supervisionados podem compartilhar a idade da criança gerenciando as configurações de compartilhamento de idade no app Family Link.
  • Se o usuário dispensar ou recusar o compartilhamento de idade, a solicitação no app será mostrada algumas vezes antes de ser suprimida.
  • O método checkAgeSignals() recebe o valor dos indicadores de idade na resposta da API. Esse método retorna ageRangeSource, ageUpper, ageLower e outros valores de mudança significativa.