Solicitando consentimento de usuários europeus

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

De acordo com a Política de consentimento para usuários da União Europeia do Google, você precisa divulgar determinadas informações aos seus usuários no Espaço Econômico Europeu (EEE) e obter 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 cumprir as obrigações determinadas por 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, exigendo o consentimento dos usuários no EEE. Por padrão, as solicitações de anúncios ao Google veiculam anúncios personalizados, com seleção de anúncios baseada nos dados coletados anteriormente pelo usuário. O Google também permite configurar 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 solicitar o consentimento dos usuários. Ele também descreve como encaminhar o consentimento para o SDK de anúncios para dispositivos móveis do Google após a aprovação.

Pré-requisitos

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, é necessário o referenciar no arquivo build.gradle do projeto. Abra o seu e procure uma seção allprojects:

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

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 de "dependências".

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

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 faça uma sincronização com o Gradle.

Antes de usar qualquer outro método no SDK de consentimento, atualize o status de consentimento para garantir que ele tenha as informações mais recentes sobre os provedores de tecnologia de anúncio que você selecionou naAdMob IU. Se a lista de provedores de tecnologia de anúncio for alterada desde que o usuário consentiu pela última vez, o estado de consentimento vai ser definido como um estado desconhecido.

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

Se você não estiver usando a mediação, terá duas opções para implementar o SDK de consentimento e receber 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 mostra uma lista dos provedores de tecnologia de anúncio selecionados na IU do AdMob. O SDK de consentimento armazena a resposta do usuário.

A outra opção é usar o SDK de consentimento para recuperar dinamicamente a lista completa de provedores de tecnologia de anúncio de AdMob, conforme explicado em Coleta de consentimento gerenciado pelo editor. No entanto, nesse caso, você precisa determinar como a lista de provedores deve ser disponibilizada para os usuários e apresentar seu próprio formulário de consentimento.

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 consentir em receber apenas anúncios não personalizados, será necessário encaminhar o consentimento para o SDK dos anúncios para dispositivos móveis do Google.

Se você usa a AdMob mediação

É possível usar o SDK de consentimento para recuperar dinamicamente a lista completa de provedores de tecnologia de anúncio de AdMob, conforme explicado em Coleta de consentimento gerenciado pelo editor. É necessário determinar quais outros provedores de tecnologia de anúncio de outras redes precisam ser apresentados aos seus usuários para consentimento.

Como desenvolvedor de apps, você vai precisar do consentimento do usuário para os provedores de tecnologia de anúncio retornados pelo SDK de consentimento e 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 de anúncios para dispositivos móveis do Google se o usuário tiver consentido em receber apenas anúncios não personalizados.

No momento, o Google não consegue receber e lidar com o consentimento para redes de mediação. Por isso, é necessário solicitar e processar o consentimento para cada rede de publicidade separadamente. Consulte o guia de integração de cada parceiro de mediação para ver detalhes de implementação.

Atualizar status de consentimento

Ao usar o SDK de consentimento, recomendamos determinar o status do consentimento de um usuário em cada inicialização de 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 editor válidos e totalmente ativados que serão usados pelo seu app para solicitar anúncios. Encontre seu ID de editor.

  • Uma instância de ConsentInfoUpdateListener.

Se as informações de consentimento forem atualizadas, o status de consentimento será fornecido pelo método onConsentInfoUpdated() da ConsentInfoUpdateListener. O ConsentStatus retornado pode ter os valores listados abaixo:

Status de consentimento Definição
ConsentStatus.PERSONALIZED O usuário autorizou a exibição de anúncios personalizados.
ConsentStatus.NON_PERSONALIZED O usuário deu consentimento para anúncios não personalizados.
ConsentStatus.UNKNOWN O usuário não concedeu 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 de usuários da União Europeia. Você pode 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. oferece duas maneiras de solicitar o consentimento de um usuário:

Lembre-se de oferecer aos usuários a opção de Alterar ou revogar o 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 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 atentamente o texto de consentimento: o que aparece por padrão é uma mensagem que pode ser 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 substituí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 fornecem 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 optou por usar uma versão paga do app em vez de ver anúncios.
withPersonalizedAdsOption()
Indica que o formulário de consentimento precisa exibir uma opção de anúncio personalizado.
withNonPersonalizedAdsOption()
Indica que o formulário de consentimento precisa exibir 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, conforme 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 do usuário 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ê quiser coletar consentimento, use o método getAdProviders() da classe ConsentInformation para ver os provedores de tecnologia de anúncio associados aos IDs de editor usados no seu app. O consentimento é necessário para a lista completa de provedores configurados para seus IDs de 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();

Então, você poderá usar a lista de provedores de tecnologia de anúncio para ter seu 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 informar o consentimento para o 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 escolher 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 do 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 o TFUA serão desqualificadas para a publicidade e o 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 deConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown(). Por exemplo, o formulário de consentimento não é carregado se o usuário não está no EEE.

Para facilitar os testes do app dentro e fora do EEE, o SDK de consentimento é compatível com opções de depuração que podem ser definidas antes de chamar qualquer outro método no SDK.

  1. Siga as instruções na seção de atualização do status de consentimento para chamar requestConsentInfoUpdate. Em seguida, execute o app. 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 a região geográfica de sua preferência para fins 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 vão considerar a região geográfica de depuração.

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

O comportamento padrão do SDK dos 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, será possível configurar um objeto AdRequest para especificar que somente anúncios não personalizados serão solicitados. O código a seguir faz com que anúncios não personalizados sejam solicitados, independentemente do usuário estar no EEE:

Java

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

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

Kotlin

val extras = Bundle()
extras.putString("npa", "1")

val request = AdRequest.Builder()
    .addNetworkExtrasBundle(AdMobAdapter::class.java, extras)
    .build()

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

Adiar a medição de apps (opcional)

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

No entanto, se o app exigir o consentimento do usuário antes que esses eventos possam ser enviados, você pode atrasar a medição do app até inicializar o SDK de anúncios para dispositivos móveis explicitamente ou carregar 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 oferecem suporte ao 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 a seleção na AdMob IU?
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.