O SDK da plataforma de mensagens de usuários (UMP) do Google é uma ferramenta de privacidade e mensagens para ajudar você a gerenciar as escolhas de privacidade. Para mais informações, consulte Sobre privacidade e mensagens.
Criar um tipo de mensagem
Crie mensagens de usuário com um dos Tipos de mensagens para os usuários disponíveis na seção Privacidade e de mensagens do AdMob do Compute Engine. O SDK da UMP tenta exibir uma mensagem de privacidade criada com o AdMob ID do aplicativo é definido no projeto.
Para mais detalhes, consulte Sobre privacidade e mensagens.
Importar o SDK
CocoaPods (preferencial)
A maneira mais fácil de importar o SDK para um projeto iOS é usar CocoaPods Abra o Podfile e adicione esta linha ao destino do app:
pod 'GoogleUserMessagingPlatform'
Em seguida, execute o comando:
pod install --repo-update
Se você ainda não conhece o CocoaPods, consulte Como usar CocoaPods, para detalhes sobre como criar e usar Podfiles.
Gerenciador de pacotes do Swift
O SDK da UMP também oferece suporte ao Gerenciador de pacotes do Swift. Siga estas etapas para e importar o pacote Swift.
No Xcode, instale o pacote Swift do SDK da UMP acessando Arquivo > Adicionar pacotes...
No prompt exibido, pesquise o pacote Swift do SDK da UMP no GitHub. repositório:
https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git
Selecione a versão do pacote Swift do SDK da UMP que você quer usar. Para novos projetos, recomendamos usar a Up to Next Major Version.
O Xcode resolve as dependências do pacote e faz o download delas no plano de fundo. Para mais detalhes sobre como adicionar dependências de pacote, consulte a documentação artigo.
Download manual
A outra maneira de importar o SDK é manualmente.
Em seguida, arraste a estrutura para seu projeto Xcode, selecionando Copiar itens, se necessário.
Em seguida, é possível incluir o framework em qualquer arquivo necessário usando:
Swift
import UserMessagingPlatform
Objective-C
#include <UserMessagingPlatform/UserMessagingPlatform.h>
Adicionar o ID do aplicativo
Você pode encontrar o ID do aplicativo na
interface da AdMob.
Adicione o ID
Info.plist
pelo seguinte snippet de código:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
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 requestConsentInfoUpdateWithParameters:completionHandler:
. Essa solicitação verifica
o seguinte:
- Se o consentimento é obrigatório. Por exemplo, o consentimento é necessário para a pela primeira vez ou a decisão de consentimento anterior expirou.
- Define se um ponto de entrada de opções de privacidade é obrigatório. Algumas mensagens de privacidade exigem que os apps permitam que os usuários modifiquem as opções de privacidade a qualquer momento.
Veja um exemplo de como conferir o status de uma UIViewController
no
viewDidLoad()
.
Swift
override func viewDidLoad() {
super.viewDidLoad()
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: nil) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// TODO: Load and present the privacy message form.
}
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:nil
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
// TODO: Load and present the privacy message form.
}];
}
Carregue e apresente um formulário de mensagem de privacidade, se necessário
Depois de receber o status de consentimento mais atualizado, ligue
loadAndPresentIfRequiredFromViewController:completionHandler:
para carregar os formulários necessários
pedir o consentimento do usuário; Após o carregamento, os formulários são apresentados imediatamente.
Swift
override func viewDidLoad() {
super.viewDidLoad()
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: nil) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
UMPConsentForm.loadAndPresentIfRequired(from: self) {
[weak self] loadAndPresentError in
guard let self else { return }
if let consentError = loadAndPresentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// Consent has been gathered.
}
}
}
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:nil
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
if (loadAndPresentError) {
// Consent gathering failed.
NSLog(@"Error: %@", loadAndPresentError.localizedDescription);
return;
}
// Consent has been gathered.
}];
}];
}
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 completion handler para seu formulário.
Opções de privacidade
Alguns formulários de mensagens de privacidade são apresentados com base em uma política de privacidade renderizada pelo editor. de opções do Google, permitindo que os usuários gerenciem as opções de privacidade a qualquer momento. Para saber mais sobre qual mensagem é exibida aos usuários nas opções de privacidade ponto de entrada, consulte Tipos de mensagens para os usuários disponíveis.
Para implementar um ponto de entrada de opções de privacidade, siga estas etapas:
- Verifique
UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus
. - Se um ponto de entrada de opções de privacidade for necessário, adicione um elemento de interface visível e interativo ao seu app.
- Acione o formulário de opções de privacidade usando
presentPrivacyOptionsFormFromViewController:completionHandler:
:
O exemplo de código abaixo demonstra essas etapas:
Swift
@IBOutlet weak var privacySettingsButton: UIBarButtonItem!
var isPrivacyOptionsRequired: Bool {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus == .required
}
override func viewDidLoad() {
// ...
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
// ...
UMPConsentForm.loadAndPresentIfRequired(from: self) {
//...
// Consent has been gathered.
// Show the button if privacy options are required.
self.privacySettingsButton.isEnabled = isPrivacyOptionsRequired
}
}
// ...
}
// Present the privacy options form when a user interacts with the
// privacy settings button.
@IBAction func privacySettingsTapped(_ sender: UIBarButtonItem) {
UMPConsentForm.presentPrivacyOptionsForm(from: self) {
[weak self] formError in
guard let self, let formError else { return }
// Handle the error.
}
}
Objective-C
@interface ViewController ()
@property(weak, nonatomic) IBOutlet UIBarButtonItem *privacySettingsButton;
@end
- (BOOL)isPrivacyOptionsRequired {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus ==
UMPPrivacyOptionsRequirementStatusRequired;
}
- (void)viewDidLoad {
// ...
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable requestConsentError) {
// ...
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
// ...
// Consent has been gathered.
// Show the button if privacy options are required.
strongSelf.privacySettingsButton.enabled = isPrivacyOptionsRequired;
}];
}];
}
// Present the privacy options form when a user interacts with your
// privacy settings button.
- (IBAction)privacySettingsTapped:(UIBarButtonItem *)sender {
[UMPConsentForm presentPrivacyOptionsFormFromViewController:self
completionHandler:^(NSError *_Nullable formError) {
if (formError) {
// Handle the error.
}
}];
}
Solicitar anúncios
Antes de solicitar anúncios no seu app, verifique se você recebeu o consentimento
do usuário usando UMPConsentInformation.sharedInstance.canRequestAds
. Existem duas
lugares para verificar ao solicitar consentimento:
- Após o consentimento ser coletado na sessão atual.
- Imediatamente depois de chamar
requestConsentInfoUpdateWithParameters:completionHandler:
. É 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.
Swift
class ViewController: UIViewController {
// Use a boolean to initialize the Google Mobile Ads SDK and load ads once.
private var isMobileAdsStartCalled = false
override func viewDidLoad() {
super.viewDidLoad()
// Request an update for the consent information.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: nil) {
[weak self] requestConsentError in
guard let self else { return }
if let consentError = requestConsentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
UMPConsentForm.loadAndPresentIfRequired(from: self) {
[weak self] loadAndPresentError in
guard let self else { return }
if let consentError = loadAndPresentError {
// Consent gathering failed.
return print("Error: \(consentError.localizedDescription)")
}
// Consent has been gathered.
if UMPConsentInformation.sharedInstance.canRequestAds {
self.startGoogleMobileAdsSDK()
}
}
}
// Check if you can initialize the Google Mobile Ads SDK in parallel
// while checking for new consent information. Consent obtained in
// the previous session can be used to request ads.
if UMPConsentInformation.sharedInstance.canRequestAds {
startGoogleMobileAdsSDK()
}
}
private func startGoogleMobileAdsSDK() {
DispatchQueue.main.async {
guard !self.isMobileAdsStartCalled else { return }
self.isMobileAdsStartCalled = true
// Initialize the Google Mobile Ads SDK.
GADMobileAds.sharedInstance().start()
// TODO: Request an ad.
// GADInterstitialAd.load(...)
}
}
}
Objective-C
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
__weak __typeof__(self) weakSelf = self;
// Request an update for the consent information.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:nil
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
// Consent gathering failed.
NSLog(@"Error: %@", requestConsentError.localizedDescription);
return;
}
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
[UMPConsentForm loadAndPresentIfRequiredFromViewController:strongSelf
completionHandler:^(NSError *loadAndPresentError) {
if (loadAndPresentError) {
// Consent gathering failed.
NSLog(@"Error: %@", loadAndPresentError.localizedDescription);
return;
}
// Consent has been gathered.
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
if (UMPConsentInformation.sharedInstance.canRequestAds) {
[strongSelf startGoogleMobileAdsSDK];
}
}];
}];
// Check if you can initialize the Google Mobile Ads SDK in parallel
// while checking for new consent information. Consent obtained in
// the previous session can be used to request ads.
if (UMPConsentInformation.sharedInstance.canRequestAds) {
[self startGoogleMobileAdsSDK];
}
}
- (void)startGoogleMobileAdsSDK {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Initialize the Google Mobile Ads SDK.
[GADMobileAds.sharedInstance startWithCompletionHandler:nil];
// TODO: Request an ad.
// [GADInterstitialAd loadWithAdUnitID...];
});
}
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
requestConsentInfoUpdateWithParameters:completionHandler:
. 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:
<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
UMPDebugSettings().testDeviceIdentifiers
e transmita uma lista dos IDs dos dispositivos de teste.Swift
let parameters = UMPRequestParameters() let debugSettings = UMPDebugSettings() debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"] parameters.debugSettings = debugSettings // Include the UMPRequestParameters in your consent request. UMPConsentInformation.sharedInstance.requestConsentInfoUpdate( with: parameters, completionHandler: { error in ... })
Objective-C
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init]; UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ]; parameters.debugSettings = debugSettings; // Include the UMPRequestParameters in your consent request. [UMPConsentInformation.sharedInstance requestConsentInfoUpdateWithParameters:parameters completionHandler:^(NSError *_Nullable error){ ... }];
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
property of type UMPDebugGeography
on UMPDebugSettings
. Observe que
as configurações de depuração só funcionam em dispositivos de teste.
Swift
let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings()
debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
debugSettings.geography = .EEA
parameters.debugSettings = debugSettings
// Include the UMPRequestParameters in your consent request.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
with: parameters,
completionHandler: { error in
...
})
Objective-C
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];
debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
debugSettings.geography = UMPDebugGeographyEEA;
parameters.debugSettings = debugSettings;
// Include the UMPRequestParameters in your consent request.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable error){
...
}];
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.
Swift
UMPConsentInformation.sharedInstance.reset()
Objective-C
[UMPConsentInformation.sharedInstance reset];