De acordo com o Consentimento dos usuários da UE do Google política, é necessário divulgar algumas informações aos seus usuários no Espaço Econômico Europeu (EEE) e com o Reino Unido e obtenham o consentimento deles para usar cookies ou outro armazenamento local, conforme os requisitos legais, e usar dados pessoais (como ID de publicidade) para veicular anúncios. Essa política reflete os requisitos da Diretiva de privacidade eletrônica da UE e os 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 o SDK da plataforma de mensagens aos usuários (UMP). O SDK da UMP foi atualizado para oferecer suporte os padrões mais recentes do IAB. Todas essas configurações agora podem ser convenientemente tratados em Ad Manager privacidade e troca de mensagens.
Pré-requisitos
- ler o Guia explicativo
- Se você estiver trabalhando em requisitos relacionados ao GDPR, leia Como os requisitos do IAB afetam o consentimento da UE mensagens
Criar um tipo de mensagem
Crie mensagens de usuário com um dos tipos de mensagens aos usuários disponíveis na seção Privacidade e de mensagens do Gerente de anúncios do Compute Engine. O SDK da UMP tenta exibir uma mensagem do usuário criada com base no Ad Manager ID do aplicativo é definido no projeto. Se nenhuma mensagem estiver configurada para o aplicativo, o SDK retornará um erro.
Para mais detalhes, consulte Sobre privacidade e mensagens.
Adicionar o ID do aplicativo
Você pode encontrar o ID do aplicativo na IU do Ad Manager. Adicione o ID pelo seguinte snippet de código:
Solicitação de informações de consentimento
Solicite uma atualização das informações de consentimento do usuário em todos os apps
ao iniciar, usando requestConsentInfoUpdate()
. Isso determina
se o usuário precisa fornecer consentimento, caso ainda não tenha feito isso, ou
se o consentimento tiver expirado.
Confira um exemplo de como verificar o status na inicialização do app:
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
// TODO: Load and present the consent form.
},
(FormError error) {
// Handle the error.
},
);
}
Carregar e mostrar um formulário de consentimento, se necessário
Depois de receber o status de consentimento mais atualizado, ligue
loadAndShowConsentFormIfRequired()
no dia
ConsentForm
para carregar um formulário de consentimento. Se o
status de consentimento for necessário, o SDK carregará um formulário e o apresentará imediatamente
dos fornecidos. O callback
é chamado depois que o formulário é dispensado. Se o consentimento não for necessário, o callback
é chamada imediatamente.
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
ConsentForm.loadAndShowConsentFormIfRequired((loadAndShowError) {
if (loadAndShowError != null) {
// Consent gathering failed.
}
// Consent has been gathered.
});
},
(FormError error) {
// Handle the error.
},
);
}
Se você precisar executar alguma ação depois que o usuário tiver feito uma escolha ou dispensado do formulário, coloque essa lógica no callback para seu formulário.
Solicitar anúncios
Antes de solicitar anúncios no seu app, verifique se você recebeu o consentimento
do usuário usando canRequestAds()
. Existem duas
lugares para verificar ao solicitar consentimento:
- Depois que o consentimento for coletado na sessão atual.
- Imediatamente depois de chamar
requestConsentInfoUpdate()
. É possível que o consentimento tenha sido obtido na sessão anterior. Como uma latência prática recomendada, recomendamos não esperar pela conclusão do retorno de chamada para que você possa comece a carregar anúncios o mais rápido possível após o lançamento do seu app.
Se ocorrer um erro durante o processo de solicitação de consentimento, ainda será preciso tentar solicitar anúncios. O SDK da UMP usa o status de consentimento dos dados sessão.
class AppExampleState extends State<AppExample> {
// Use a bool to initialize the Mobile Ads SDK and load ads once.
var _isMobileAdsInitializeCalled = false;
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
ConsentForm.loadAndShowConsentFormIfRequired((loadAndShowError) {
if (loadAndShowError != null) {
// Consent gathering failed.
}
// Consent has been gathered.
_initializeMobileAdsSDK();
});
},
(FormError error) {
// Handle the error.
},
);
// Check if you can initialize the Mobile Ads SDK in parallel while
// checking for new consent information. Consent obtained in the
// previous session can be used to request ads.
_initializeMobileAdsSDK();
}
void _initializeMobileAdsSDK() async {
if (_isMobileAdsInitializeCalled) {
return;
}
// Initialize the Mobile Ads SDK if the SDK has gathered consent aligned with
// the app's configured messages.
var canRequestAds = await ConsentInformation.instance.canRequestAds();
if (canRequestAds) {
setState(() {
_isMobileAdsInitializeCalled = true;
});
// Initialize the Mobile Ads SDK.
MobileAds.instance.initialize();
// TODO: Request an ad.
}
}
}
Opções de privacidade
Alguns formulários de consentimento exigem que o usuário modifique o consentimento a qualquer momento. Aderir as etapas a seguir para implementar um botão de opções de privacidade, se necessário.
Para fazer isso:
- Implementar um elemento da interface, como um botão na página de configurações do app, que podem acionar um formulário de opções de privacidade.
- Quando
loadAndShowConsentFormIfRequired()
terminar, marquegetPrivacyOptionsRequirementStatus()
para determinar se serão exibidos o elemento da interface que pode apresentar o formulário de opções de privacidade. - Quando um usuário interagir com seu elemento de interface, chame
showPrivacyOptionsForm()
para mostrar o formulário para que o usuário possa atualizar as opções de privacidade a qualquer momento.
class AppExampleState extends State<AppExample> {
static const _privacySettingsText = 'Privacy Settings';
// Use a bool to initialize the Mobile Ads SDK and load ads once.
var _isMobileAdsInitializeCalled = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'App Example',
home: Scaffold(
appBar: AppBar(
title: const Text('App Example'),
actions: _isMobileAdsSDKInitialized
// Regenerate the options menu to include a privacy setting.
? _privacySettingsAppBarAction()
: null
),
body: // ...
),
);
}
List<Widget> _privacySettingsAppBarAction() {
return <Widget>[
FutureBuilder(
future: ConsentInformation.instance.isPrivacyOptionsRequired(),
builder: (context, snapshot) {
final bool visibility = snapshot.data ?? false;
return Visibility(
visible: visibility,
child: PopupMenuButton<String>(
onSelected: (String result) {
if (result == _privacySettingsText) {
ConsentForm.showPrivacyOptionsForm((formError) {
if (formError != null) {
debugPrint(
"${formError.errorCode}: ${formError.message}");
}
});
}
},
itemBuilder: (BuildContext context) =>
<PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: _privacySettingsText,
child: Text(_privacySettingsText))
],
));
})
];
}
}
Teste
Se você quiser testar a integração no seu aplicativo durante o desenvolvimento, siga estas etapas para registrar o dispositivo de teste de forma programática. Não se esqueça de remover que define esses IDs de dispositivo de teste antes de lançar o app.
- Chame
requestConsentInfoUpdate()
. Verifique a saída do registro para encontrar uma mensagem semelhante ao exemplo a seguir, que mostra o ID do dispositivo e como adicioná-lo como um dispositivo de teste:
Android
Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.
iOS
<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
Copie o ID do dispositivo de teste para a área de transferência.
Modifique seu código para ligar
ConsentDebugSettings.testIdentifiers
e transmita uma lista dos IDs dos dispositivos de teste.ConsentDebugSettings debugSettings = ConsentDebugSettings( testIdentifiers: ["TEST-DEVICE-HASHED-ID"], ); ConsentRequestParameters params = ConsentRequestParameters(consentDebugSettings: debugSettings); ConsentInformation.instance.requestConsentInfoUpdate(params, () async { // ... };
Forçar uma região geográfica
O SDK da UMP oferece uma maneira de testar o comportamento do app como se o dispositivo fosse
localizados no EEE ou no Reino Unido usando the DebugGeography
field on ConsentDebugSettings
. Observe que
as configurações de depuração só funcionam em dispositivos de teste.
ConsentDebugSettings debugSettings = ConsentDebugSettings(
debugGeography: DebugGeography.debugGeographyEea,
testIdentifiers: ["TEST-DEVICE-HASHED-ID"],
);
ConsentRequestParameters params =
ConsentRequestParameters(consentDebugSettings: debugSettings);
ConsentInformation.instance.requestConsentInfoUpdate(params, () async {
// ...
};
Redefinir estado de consentimento
Ao testar seu app com o SDK da UMP, talvez seja útil redefinir o
do SDK para que você possa simular a primeira experiência de instalação de um usuário.
O SDK fornece o método reset()
para fazer isso.
ConsentInformation.instance.reset();