Solicitando consentimento de usuários europeus

De acordo com a Política de consentimento para usuários da União Europeia do Google, você precisa divulgar algumas informações aos seus usuários no Espaço Econômico Europeu (EEE) e solicitar o consentimento deles para usar cookies ou outro armazenamento local, quando exigido por lei, e usar dados pessoais (como AdID) para veicular anúncios. Essa política reflete os requisitos da Diretiva de privacidade eletrônica da UE e do Regulamento geral de proteção de dados (GDPR).

Para ajudar os editores a cumprirem com as obrigações de acordo com essa política, o Google oferece um SDK de consentimento. O SDK de consentimento é uma biblioteca de código aberto que fornece funções utilitárias para coletar o consentimento dos usuários. O código-fonte completo está disponível no GitHub.

Os anúncios veiculados pelo Google podem ser categorizados como personalizados ou não personalizados, ambos exigem o consentimento dos usuários no EEE. Por padrão, as solicitações feitas para o Google veiculam anúncios personalizados, com seleção de anúncios baseada nos dados coletados anteriormente dos usuários. O Google também oferece suporte à configuração de solicitações de anúncios para veicular anúncios não personalizados. Saiba mais sobre anúncios personalizados e não personalizados.

Neste guia, descrevemos como usar o SDK de consentimento para receber o consentimento dos usuários. Ele também descreve como encaminhar consentimento para o SDK dos anúncios para dispositivos móveis do Google após o consentimento.

Prerequisites

Os apps podem importar o SDK de consentimento com uma dependência do Gradle que aponta para o repositório Maven do Google. Para usar esse repositório, você precisa referenciá-lo no arquivo build.gradle do projeto no app. Abra a sua e procure uma seção de allprojects:

Exemplo de build.gradle no nível do projeto (trecho)

allprojects {
    repositories {
        google()
        jcenter()
    }
}

Adicione a diretiva google() acima se ela ainda não estiver presente.

Em seguida, abra o arquivo build.gradle do app e procure uma seção "quoquo;dependencies"

Exemplo de build.gradle no nível do app (trecho)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.ads.consent:consent-library:1.0.6'
}

Adicione a linha em negrito acima, que instrui o Gradle a extrair a versão mais recente do SDK de consentimento. Depois de fazer isso, salve o arquivo e execute uma sincronização do Gradle.

Antes de usar qualquer outro método no SDK de consentimento, atualize o status do consentimento para garantir que ele tenha as informações mais recentes sobre os provedores de tecnologia de anúncio selecionados naAdMob IU. Se a lista de provedores de tecnologia de anúncio tiver mudado desde o último consentimento do usuário, o estado de consentimento será definido novamente como desconhecido.

Se você não usa a mediação

Se você não está usando a mediação, há duas opções para implementar o SDK de consentimento para coletar consentimento.

Uma opção é usar o SDK de consentimento para apresentar um formulário de consentimento renderizado pelo Google aos seus usuários. O formulário de consentimento exibe uma lista dos provedores de tecnologia de anúncio que você selecionou na IU do AdMob. O SDK de consentimento armazena a resposta de consentimento do usuário.

A outra opção é usar o SDK de consentimento para recuperar dinamicamente a lista completa de provedores de tecnologia de anúncios da AdMob, conforme explicado na coleta de consentimento gerenciada pelo editor. No entanto, nesse caso, você precisará determinar como a lista de provedores será disponibilizada aos usuários e apresentar seu próprio formulário de consentimento a eles.

Depois que o usuário fizer uma escolha de consentimento, peça ao SDK de consentimento para armazenar a escolha de consentimento do usuário, conforme explicado em Como armazenar o consentimento gerenciado do editor.

Se o usuário consentiu o recebimento de anúncios não personalizados, depois que você solicitar o consentimento, será necessário encaminhar o consentimento para o SDK dos anúncios para dispositivos móveis do Google.

Se você usa a mediação AdMob

É possível usar o SDK de consentimento para recuperar dinamicamente a lista completa de provedores de tecnologia de anúncio da AdMob, conforme explicado na coleta de consentimento gerenciada pelo editor. Você precisará determinar quais provedores de tecnologia de anúncio adicionais de outras redes de anúncios precisam ser apresentados aos seus usuários para consentimento.

Como desenvolvedor de apps, você precisará coletar o consentimento do usuário para os provedores de tecnologia de anúncio retornados pelo SDK de consentimento e pelos provedores de outras redes de publicidade. Você também precisará armazenar manualmente as respostas de consentimento do usuário e encaminhar o consentimento para o SDK dos anúncios para dispositivos móveis do Google se o usuário consentiu para receber apenas anúncios não personalizados.

Atualmente, o Google não consegue obter e lidar com o consentimento para redes de mediação. Portanto, você precisará receber e processar o consentimento para cada rede de publicidade separadamente. Para ver detalhes da implementação, consulte o guia de integração de cada parceiro de mediação.

Atualizar status de consentimento

Ao usar o SDK de consentimento, é recomendável determinar o status do consentimento de um usuário em cada inicialização do app. Para fazer isso, chame requestConsentInfoUpdate() em uma instância de ConsentInformation.

import com.google.ads.consent.*;

public class MainActivity extends Activity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        ConsentInformation consentInformation = ConsentInformation.getInstance(context);
        String[] publisherIds = {"pub-0123456789012345"};
        consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                 // User's consent status successfully updated.
            }

            @Override
            public void onFailedToUpdateConsentInfo(String errorDescription) {
                 // User's consent status failed to update.
            }
        });
        ...
    }
    ...
}

A chamada para requestConsentInfoUpdate() requer dois argumentos:

  • Uma matriz de IDs de editores válidos, totalmente ativados, de que o app solicita anúncios. Encontre seu ID do editor.

  • Uma instância do ConsentInfoUpdateListener.

Se as informações de consentimento forem atualizadas, o status de consentimento atualizado será fornecido por meio do método onConsentInfoUpdated() do ConsentInfoUpdateListener. Os ConsentStatus retornados podem ter os valores listados abaixo:

Status de consentimento Definição
ConsentStatus.PERSONALIZED O usuário deu consentimento para anúncios personalizados.
ConsentStatus.NON_PERSONALIZED O usuário deu consentimento para anúncios não personalizados.
ConsentStatus.UNKNOWN O usuário não deu nem recusou o consentimento para anúncios personalizados ou não personalizados.

Depois que as informações de consentimento forem atualizadas, também será possível verificar ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown() para ver se o usuário está no Espaço Econômico Europeu ou se o local da solicitação é desconhecido.

Se o método isRequestLocationInEeaOrUnknown() retornar false, o usuário não está localizado no Espaço Econômico Europeu e o consentimento não é necessário de acordo com a Política de consentimento do usuário da UE. É possível fazer solicitações de anúncios ao SDK dos anúncios para dispositivos móveis do Google.

Se o método isRequestLocationInEeaOrUnknown() retornar true:

SDK de consentimento do Google. fornece duas maneiras de solicitar o consentimento de um usuário:

Não esqueça de oferecer aos usuários a opção de Alterar ou revogar consentimento.

O formulário de consentimento renderizado pelo Google é um formulário configurável em tela cheia exibido sobre o conteúdo do app. Você pode configurar o formulário para apresentar ao usuário combinações de estas opções:

  • Consentimento para visualizar anúncios personalizados
  • Consentimento para visualizar anúncios não personalizados
  • Usar uma versão paga do app em vez de ver anúncios

Leia o texto de consentimento com atenção: o que é exibido por padrão é uma mensagem que podeser apropriada se você usa o Google para gerar receita com seu app. No entanto, não podemos fornecer aconselhamento jurídico sobre o texto de consentimento adequado. Para atualizar o texto do formulário de consentimento renderizado pelo Google, modifique o arquivo consentform.html incluído no SDK de consentimento conforme necessário.

O formulário de consentimento renderizado pelo Google é configurado e exibido usando a classe ConsentForm. O código a seguir demonstra como criar um ConsentForm com todas as três opções de consentimento:

URL privacyUrl = null;
try {
    // TODO: Replace with your app's privacy policy URL.
    privacyUrl = new URL("https://www.your.com/privacyurl");
} catch (MalformedURLException e) {
    e.printStackTrace();
    // Handle error.
}
ConsentForm form = new ConsentForm.Builder(context, privacyUrl)
    .withListener(new ConsentFormListener() {
        @Override
        public void onConsentFormLoaded() {
            // Consent form loaded successfully.
        }

        @Override
        public void onConsentFormOpened() {
            // Consent form was displayed.
        }

        @Override
        public void onConsentFormClosed(
                ConsentStatus consentStatus, Boolean userPrefersAdFree) {
            // Consent form was closed.
        }

        @Override
        public void onConsentFormError(String errorDescription) {
            // Consent form error.
        }
    })
    .withPersonalizedAdsOption()
    .withNonPersonalizedAdsOption()
    .withAdFreeOption()
    .build();

Os métodos acima preparam o formulário de consentimento renderizado pelo Google com as seguintes opções:

withListener()
Registra um listener para o ConsentForm. Cada um dos métodos substituíveis em ConsentFormListener corresponde a um evento no ciclo de vida do formulário de consentimento.
Métodos modificáveis
onConsentFormLoaded O formulário de consentimento foi carregado.
onConsentFormError Falha ao carregar o formulário de consentimento. O parâmetro errorDescription fornece uma descrição do erro.
onConsentFormOpened O formulário de consentimento foi aberto.
onConsentFormClosed O formulário de consentimento foi fechado. Os parâmetros do método mostram as seguintes informações:
  • consentStatus é um valor de ConsentStatus que descreve o status de consentimento atualizado do usuário.
  • userPrefersAdFree tem um valor de true quando o usuário escolhe usar uma versão paga do app em vez de ver anúncios.
withPersonalizedAdsOption()
Indica que o formulário de consentimento vai mostrar uma opção de anúncio personalizado.
withNonPersonalizedAdsOption()
Indica que o formulário de consentimento vai mostrar uma opção de anúncio não personalizado.
withAdFreeOption()
Indica que o formulário de consentimento precisa exibir uma opção de app sem anúncios.

Depois de criar um objeto ConsentForm, carregue o formulário de consentimento invocando o método load() de ConsentForm, conforme mostrado abaixo:

form.load();

Para apresentar ao usuário o formulário de consentimento renderizado pelo Google, chame show() em uma instância de ConsentForm, como demonstrado abaixo:

form.show();

Depois que o usuário seleciona uma opção e fecha o formulário, o SDK de consentimento salva a escolha e aciona o evento onConsentFormClosed. Você pode detectar esse evento e encaminhar o consentimento para o SDK dos anúncios para dispositivos móveis do Google.

Coleta de consentimento gerenciada pelo editor

Se você optar por solicitar consentimento, poderá usar o método getAdProviders() da classe ConsentInformation para encontrar os provedores de tecnologia de anúncio associados aos IDs do editor usados no seu app. O consentimento é necessário para a lista completa dos provedores de tecnologia de anúncio configurados para seus IDs do editor.

Antes de chamar getAdProviders(), aguarde o método onConsentInfoUpdate() de ConsentInfoUpdateListener, conforme descrito na seção Atualizar status de consentimento.

List<AdProvider> adProviders =
    ConsentInformation.getInstance(context).getAdProviders();

É possível usar a lista de provedores de tecnologia de anúncio para ter consentimento.

Após receber o consentimento, registre o ConsentStatus correspondente à resposta do usuário usando o método setConsentStatus() da classe ConsentInformation.

ConsentInformation.getInstance(context)
    .setConsentStatus(ConsentStatus.PERSONALIZED);

Depois de denunciar o consentimento ao SDK de consentimento, encaminhe o consentimento para o SDK dos anúncios para dispositivos móveis do Google.

Para permitir que os usuários atualizem o consentimento, basta repetir as etapas descritas na seção Coletar consentimento quando o usuário atualizar o status de consentimento.

Se um editor estiver ciente de que o usuário está abaixo da idade de consentimento, todas as solicitações de anúncios precisarão definir a TFUA (tag para usuários abaixo da idade de consentimento na Europa). Para incluir essa tag em todas as solicitações de anúncios feitas pelo seu app,chame setTagForUnderAgeOfConsent(true). Essa configuração entra em vigor para todas as solicitações de anúncios futuras.

ConsentInformation.getInstance(context).setTagForUnderAgeOfConsent(true);

Quando a configuração do TFUA estiver ativada, o formulário de consentimento renderizado pelo Google não será carregado. Todas as solicitações de anúncios que incluem a TFUA serão desqualificadas para publicidade e remarketing personalizados. A TFUA desativa solicitações para provedores de tecnologia de anúncio terceirizados, como pixels de medição de anúncios e servidores de anúncios de terceiros.

Para remover o TFUA das solicitações de anúncios, chame setTagForUnderAgeOfConsent(false).

Teste

O SDK de consentimento tem comportamentos diferentes, dependendo do valor de ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown(). Por exemplo, o formulário de consentimento não carrega se o usuário não está localizado no EEE.

Para facilitar os testes do seu app dentro e fora do EEE, o SDK de consentimento é compatível com opções de depuração que você pode definir antes de chamar outros métodos no SDK de consentimento.

  1. Siga as instruções na seção Atualizar status de consentimento para chamar requestConsentInfoUpdate. Em seguida, execute o aplicativo. Verifique a saída do logcat para o seguinte registro:

    I/ConsentInformation: Use
    ConsentInformation.getInstance(context).addTestDevice("33BE2250B43518CCDA7DE426D04EE231")
    to get test ads on this device.
  2. Designe seu dispositivo como um dispositivo de teste usando o ID de publicidade do logcat:

    ConsentInformation.getInstance(context).addTestDevice("33BE2250B43518CCDA7DE426D04EE231");
  3. Por fim, chame setDebugGeography para definir sua região preferida de teste.

    // Geography appears as in EEA for test devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);
    // Geography appears as not in EEA for debug devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_NOT_EEA);

Depois de concluir essas etapas, as chamadas para atualizar o status de consentimento considerarão a região geográfica de depuração.

O código nesta seção pode ser usado com qualquer versão do SDK de anúncios para dispositivos móveis do Google. Ele também pode ser usado independentemente de você ter usado o SDK de consentimento para obter consentimento.

O comportamento padrão do SDK de anúncios para dispositivos móveis do Google é veicular anúncios personalizados. Se um usuário consentiu em receber apenas anúncios não personalizados, você pode configurar um objeto AdRequest para especificar que somente anúncios não personalizados devem ser solicitados. O código a seguir faz com que anúncios não personalizados sejam solicitados, independentemente de o usuário estar ou não no EEE:

Bundle extras = new Bundle();
extras.putString("npa", "1");

AdRequest request = new AdRequest.Builder()
    .addNetworkExtrasBundle(AdMobAdapter.class, extras)
    .build();

Se forem solicitados anúncios não personalizados, o URL de solicitação de anúncio inclui atualmente &npa=1 . No entanto, observe que este é um detalhe de implementação interna do SDK de anúncios para dispositivos móveis do Google e está sujeito a alterações.

Atrasar a medição de apps (opcional)

Por padrão, o SDK dos anúncios para dispositivos móveis do Google inicializa a medição de apps e começa a enviar dados de eventos no nível do usuário para o Google imediatamente quando o app é iniciado. Esse comportamento de inicialização garante que você ative as métricas do usuário da AdMob sem precisar fazer outras alterações no código.

No entanto, se o app exigir o consentimento do usuário para que esses eventos possam ser enviados, será possível atrasar a medição do app até que você inicialize explicitamente o SDK dos anúncios para dispositivos móveis ou carregue um anúncio.

Para atrasar a medição do app, adicione a seguinte tag <meta-data> ao seu AndroidManifest.xml.

<manifest>
     <application>
        <!-- Delay app measurement until MobileAds.initialize() is called. -->
        <meta-data
            android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
            android:value="true"/>
    </application>
</manifest>

Perguntas frequentes

Quantos provedores de tecnologia de anúncio são compatíveis com o SDK de consentimento?
O SDK de consentimento não impõe um limite ao número de provedores de tecnologia de anúncio que um editor opta por ativar.
A lista de provedores de tecnologia de anúncio retornados pelo SDK será atualizada automaticamente se eu mudar minha seleção na IU do AdMob ?
Sim. Se você fizer mudanças na lista de provedores de tecnologia de anúncio na AdMob IU, as alterações serão propagadas para os servidores de anúncios do Google em aproximadamente uma hora.