Como otimizar as taxas de aceite do App Tracking Transparency (ATT)? Melhorar a experiência de permissão do ATT envolve fornecer um contexto claro de pré-permissão, redigir uma descrição precisa em NSUserTrackingUsageDescription e escolher um momento relevante na jornada do usuário para apresentar a solicitação de autorização do sistema. O efeito na taxa de autorização deve ser medido empiricamente.
O Identificador para Anunciantes (IDFA) é um identificador de dispositivo redefinível fornecido pela Apple, usado para atribuição de campanhas e medição no iOS. Sob a estrutura do App Tracking Transparency (ATT), os aplicativos podem acessar o IDFA somente após receberem a permissão explícita do usuário por meio do prompt de autorização do
ATTrackingManager.
| Termo | Definição |
|---|---|
| IDFA | Identificador de publicidade em nível de plataforma da Apple regido pelo App Tracking Transparency. |
| App Tracking Transparency | A estrutura da Apple que exige a autorização do usuário antes de rastreá-lo em aplicativos e sites. |
| ATTrackingManager | A API nativa AppTrackingTransparency usada para solicitar autorização de rastreamento. |
| Iniciador de Pré-Permissão | Uma tela personalizada no aplicativo apresentada antes do prompt do sistema para explicar o motivo da solicitação de autorização. |
A Economia do Acesso ao IDFA e Otimização do Consentimento do ATT
O Papel do Acesso Autorizado ao IDFA na Medição Moderna do iOS
O acesso autorizado ao IDFA pode dar suporte a fluxos de trabalho de medição e atribuição de campanhas em nível de usuário quando o uso de dados de rastreamento do aplicativo estiver em conformidade com o ATT e os requisitos de seus parceiros de medição e marketing. Quando a autorização de rastreamento não estiver disponível, as equipes que ainda precisam de medição de marketing podem usar abordagens mediadas pela plataforma permitidas de forma independente, como o AdAttributionKit ou integrações existentes do SKAdNetwork.
Quando autorizado, o IDFA fornece uma chave de junção determinística para integrações de redes de anúncios suportadas, permitindo a reconciliação de conversões em nível de campanha sem modelagem estatística. Quando a autorização é negada, os aplicativos migram a medição para estruturas nativas da plataforma.
O Problema com Prompts Imediatos na Primeira Abertura
Solicitar aos usuários a autorização de rastreamento imediatamente na primeira abertura é tecnicamente permitido pela Apple, mas pode fornecer menos contexto para uma decisão informada, pois o usuário ainda não experimentou a funcionalidade do aplicativo:
- Ausência de Confiança no Produto: Os novos usuários ainda não desenvolveram confiança na funcionalidade do aplicativo, no valor da marca ou nas práticas de segurança de dados.
- Contexto Oculto: O diálogo nativo do sistema aparece sem explicação prévia, levando os usuários mais cautelosos a escolherem a opção de não permitir o rastreamento.
- Fadiga de Permissões: Sobrepor vários diálogos de permissão do sistema (como notificações push, ATT e localização) durante a inicialização inicial do aplicativo cria atrito e aumenta o abandono no onboarding. A documentação da API da Apple observa que, se um alerta de permissão existente já estiver pendente, as solicitações de autorização subsequentes não serão exibidas.

Avaliando o Desempenho de Aceite Empiricamente
A taxa de consentimento alcançável varia de acordo com a categoria do aplicativo, a confiança do público, o momento do prompt e a clareza do texto. As equipes devem avaliar variantes de otimização usando testes A/B controlados em vez de assumir benchmarks fixos da indústria.
Veja Também: IDFA ──> Modelo de Atribuição Mobile
Mecânica Técnica da Estrutura AppTrackingTransparency
Os Quatro Estados de Status de Autorização
O acesso ao IDFA é regido estritamente pelo enum ATTrackingManager.AuthorizationStatus:
notDetermined(0): O diálogo de autorização ainda não foi apresentado ao usuário.restricted(1): O dispositivo está restrito por controles parentais, perfis de configuração educacionais ou MDMs corporativos; a permissão de rastreamento não pode ser concedida e o botão nas configurações fica desativado.denied(2): O aplicativo não tem autorização para acessar dados relacionados a rastreamento após o usuário recusar a solicitação.authorized(3): O usuário autoriza o rastreamento. Em dispositivos iOS e iPadOS compatíveis, isso normalmente permite o acesso a um identificador de publicidade diferente de zero.

A Regra do Prompt Único do Sistema
O sistema operacional iOS aplica uma regra de apresentação única para ATTrackingManager.requestTrackingAuthorization. Uma vez que o usuário interage com o modal nativo selecionando “Permitir” ou a opção de não permitir, o sistema lembra o status determinado e não exibe o prompt novamente durante aquela instalação do aplicativo.
Embora o prompt do sistema não apareça uma segunda vez, os usuários podem ajustar manualmente sua autorização de rastreamento a qualquer momento nos Ajustes do iOS.
Como o iOS Aplica a Zeragem de Identificadores Quando a Autorização de Rastreamento é Negada
No iOS 14.5 e posterior, o identificador de publicidade normalmente retorna todos os zeros (00000000-0000-0000-0000-000000000000) quando a autorização de rastreamento não foi concedida. Os desenvolvedores devem verificar tanto o status de autorização do ATT quanto o valor do identificador retornado sob demanda, em vez de assumir que uma string em cache permanece válida entre as inicializações do aplicativo.
Arquitetura de UX de Alta Conversão: A Estratégia do Iniciador de Pré-Permissão
Anatomia de um Iniciador de Contexto Eficaz: Restrições do HIG da Apple
De acordo com as Diretrizes de Interface Humana da Apple sobre Privacidade, os aplicativos podem apresentar uma tela personalizada de pré-alerta antes de um prompt de permissão do sistema se for necessário contexto adicional. No entanto, a Apple impõe regras rígidas de design sobre esses iniciadores de pré-permissão:
- Botão de Ação Única: A tela de pré-permissão deve fornecer apenas um único botão (como “Continuar” ou “Avançar”) que leve diretamente ao prompt do sistema. Ela não deve oferecer um botão “Cancelar”, “Fechar” ou “Agora Não” que contorne ou adie o alerta do sistema.
- Sem imitação de UI: A tela do iniciador nunca deve imitar visualmente a caixa de alerta do sistema iOS nativo ou exibir botões simulados rotulados como “Permitir”.
- Sem Coerção Visual: A interface não deve usar gráficos, setas ou estilos de alto contraste projetados para manipular ou direcionar os usuários a selecionar “Permitir” no prompt subsequente do sistema.
Em Conformidade com a Diretriz 5.1.2 de Revisão da App Store
Sob a Seção 5.1.2 das Diretrizes de Revisão da App Store da Apple, a Apple estabelece limites claros em relação às solicitações de permissão:
- Proibição de Rastreamento Incentivado: É estritamente proibido que os aplicativos ofereçam incentivos financeiros, moeda virtual, conteúdo premium ou descontos em troca da concessão de consentimento do ATT. Fazer isso viola a Diretriz 5.1.2 e pode resultar na rejeição do aplicativo.
- Sem Bloqueio de Funcionalidades Principais: Os aplicativos não podem bloquear recursos centrais, impedir a criação de contas ou degradar o desempenho do aplicativo se um usuário recusar a autorização de rastreamento.
- Primazia da Escolha do Usuário: A escolha real de rastreamento do usuário deve ser sempre feita no prompt nativo do sistema Apple.

Stage 1: User Onboarding / Core Value Realization
│
▼
Stage 2: Contextual Pre-Permission Primer Screen
(Single "Continue" Action ── Explains Purpose)
│
▼
Stage 3: Native iOS ATTrackingManager System Modal
(User Selects "Allow" or "Ask App not to Track")
│
┌────────────┴────────────┐
▼ ▼
[.authorized] [.denied]
ATT Authorized Graceful Fallback
(IDFA normally to Platform APIs
available) (AdAttributionKit / SKAN)
Otimizando a String NSUserTrackingUsageDescription
Configurando o Info.plist para Transparência de Propósito
A chave NSUserTrackingUsageDescription no arquivo Info.plist define a string explicativa exibida diretamente no alerta nativo do sistema ATT da Apple. De acordo com a documentação da Apple, esta string deve ser concisa, específica e explicar com precisão como os dados de rastreamento são utilizados.
Testando Variantes Claras de Strings de Propósito Sem Alterar a Divulgação Subjacente
Ao testar variações de strings, cada variante testada deve descrever com precisão e totalidade as práticas reais de rastreamento do aplicativo:
- Foco em Personalização: Explica como os dados são usados para personalizar recomendações de conteúdo e sugestões de produtos.
- Foco em Relevância de Anúncios: Explica como os dados são usados para entregar promoções relevantes e evitar anúncios repetitivos.
- Foco em Medição de Campanhas: Explica como os dados são usados para medir o desempenho de parcerias de marketing.
A configuração abaixo ilustra um exemplo de NSUserTrackingUsageDescription. Utilize-o apenas se a redação descrever com precisão as práticas reais de rastreamento do aplicativo:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSUserTrackingUsageDescription</key>
<string>Seus dados serão usados para fornecer recomendações personalizadas de produtos, ofertas promocionais relevantes e medir o desempenho de campanhas de marketing.</string>
</dict>
</plist>
Engenharia do Gatilho de Temporização Ótima do Prompt no Ciclo de Vida do Usuário
Considerações de Temporização na Jornada do Usuário
Embora solicitar a autorização do ATT na primeira abertura seja tecnicamente permitido, apresentar o prompt após o usuário experimentar a utilidade inicial do produto pode fornecer um contexto mais relevante para a solicitação de autorização:
- Gatilho Pós-Onboarding: Apresentar o prompt após o usuário concluir a configuração da conta e definir as preferências iniciais.
- Gatilho de Marco Contextual: Apresentar o prompt após a conclusão de uma ação principal do usuário (por exemplo, terminar um tutorial de onboarding em um jogo, salvar um item favorito em um aplicativo de compras ou favoritar um artigo em um aplicativo de conteúdo).
Implementação em Engenharia do ATTrackingManager em Swift
Tratamento do Estado Ativo do Aplicativo e Segurança de Threads
De acordo com a documentação da API da Apple, ATTrackingManager.requestTrackingAuthorization exibe o diálogo modal apenas quando o estado do aplicativo é .active. Se outro prompt de permissão estiver ativo ou pendente, o alerta do sistema não aparecerá e solicitações concorrentes não serão enfileiradas pelo sistema operacional.

A implementação abaixo separa o gerenciamento do estado de autorização de uma visualização personalizada e ilustrativa de pré-permissão:
import UIKit
import AppTrackingTransparency
import AdSupport
final class ATTManager {
static let shared = ATTManager()
private init() {}
/// Evaluates current authorization status
var currentStatus: ATTrackingManager.AuthorizationStatus {
return ATTrackingManager.trackingAuthorizationStatus
}
/// Determines if tracking authorization can be presented
var canRequestAuthorization: Bool {
return currentStatus == .notDetermined
}
/// Requests tracking authorization with application active state verification
/// - Parameter completion: Closure returning the resolved authorization status
func requestAuthorization(completion: @escaping (ATTrackingManager.AuthorizationStatus) -> Void) {
guard canRequestAuthorization else {
completion(currentStatus)
return
}
// Verify application is active before invoking requestTrackingAuthorization
guard UIApplication.shared.applicationState == .active else {
print("ATT request skipped: application is not active. Call again once active if status remains notDetermined.")
completion(currentStatus)
return
}
DispatchQueue.main.async {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
switch status {
case .authorized:
// Read the current advertising identifier on demand; do not persist a cached IDFA.
let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
print("ATT Authorized - IDFA available: \(idfa)")
case .denied:
print("ATT Denied - Advertising identifier returns zeroes")
case .restricted:
print("ATT Restricted by system profile")
case .notDetermined:
print("ATT State unresolved")
@unknown default:
print("ATT Unknown state encountered")
}
completion(status)
}
}
}
}
}
/// Illustrative custom UIViewController for a HIG-aligned pre-permission primer
final class ATTPrimerViewController: UIViewController {
private let continueButton = UIButton(type: .system)
private let titleLabel = UILabel()
private let descriptionLabel = UILabel()
var onContinueTapped: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
private func setupUI() {
view.backgroundColor = .systemBackground
// Prevent interactive swipe-to-dismiss when presented modally to ensure single-path navigation
isModalInPresentation = true
titleLabel.text = "Ajude-nos a Personalizar Sua Experiência"
titleLabel.font = .boldSystemFont(ofSize: 20)
titleLabel.textAlignment = .center
titleLabel.numberOfLines = 0
descriptionLabel.text = "Usamos dados para adaptar recomendações de produtos e enviar ofertas promocionais relevantes. Na próxima tela, você verá o prompt de permissão padrão da Apple para confirmar sua escolha."
descriptionLabel.font = .systemFont(ofSize: 15)
descriptionLabel.textAlignment = .center
descriptionLabel.textColor = .secondaryLabel
descriptionLabel.numberOfLines = 0
// Apple HIG guidance calls for a single Continue or Next action
continueButton.setTitle("Continuar", for: .normal)
continueButton.titleLabel?.font = .boldSystemFont(ofSize: 17)
continueButton.addTarget(self, action: #selector(handleContinue), for: .touchUpInside)
let stack = UIStackView(arrangedSubviews: [titleLabel, descriptionLabel, continueButton])
stack.axis = .vertical
stack.spacing = 20
stack.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stack)
NSLayoutConstraint.activate([
stack.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stack.centerYAnchor.constraint(equalTo: view.centerYAnchor),
stack.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 32),
stack.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -32)
])
}
@objc private func handleContinue() {
// Presentation and dismissal mechanics are illustrative and should be adapted to the app's navigation architecture.
dismiss(animated: true) { [weak self] in
self?.onContinueTapped?()
}
}
}
Recuperação Pós-Negação: Guiando os Usuários para os Ajustes do Sistema Sem Violar as Políticas
Quando Introduzir Fluxos Secundários de Ajustes
Quando um usuário seleciona a opção de não permitir o rastreamento, o status de autorização é definido como .denied. Chamadas subsequentes para requestTrackingAuthorization retornam .denied sem exibir um diálogo. No entanto, se um usuário iniciar posteriormente um recurso que se beneficie explicitamente do rastreamento (como solicitar configurações de publicidade personalizada em seu perfil de conta), o aplicativo poderá fornecer um caminho não coercitivo para os Ajustes do iOS.
Usando UIApplication.openSettingsURLString
Para guiar o usuário até o painel de configurações do aplicativo, use UIApplication.openSettingsURLString:
if let settingsURL = URL(string: UIApplication.openSettingsURLString),
UIApplication.shared.canOpenURL(settingsURL) {
UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil)
}
Observe que esta API abre a página de configurações dedicada do aplicativo; ela não fornece um link direto para a tela global de Ajustes > Privacidade e Segurança > Rastreamento.
Limites das Políticas da App Store
- Sem Insistência Recorrente: Não exiba banners recorrentes solicitando que os usuários ativem o rastreamento nos ajustes.
- Sem Bloqueio de Recursos: Nunca desative funcionalidades principais só porque o rastreamento permanece desativado nos ajustes.
Matriz de Decisão Comparativa: Estratégias de Pré-Permissão versus Prompts na Primeira Abertura
| Dimensão | Prompt Padrão na Primeira Abertura | Modal de Permissão com Bloqueio Rígido | Iniciador de Pré-Permissão Alinhado ao HIG |
|---|---|---|---|
| Contexto do Usuário Antes do Prompt | Baixo (Sem engajamento com o produto) | Variável (Bloqueia o acesso) | Contextual (Apresentado após interação relevante) |
| Orientações de UI/Permissão da Apple | Permitido quando a solicitação e o uso de dados estão em conformidade | Não permitido quando o acesso ou compensação depende do rastreamento | Permitido quando as restrições de pré-alerta do HIG e as regras de rastreamento são seguidas |
| Restrições de UI de Pré-Alerta da Apple | N/A | N/A | Ação única de Continuar/Avançar; sem alertas falsos |
| Temporização da Interrupção de Permissão | Imediatamente na abertura | Bloqueio | Marco contextual |
| Taxa de Aceite Observada | Deve ser medida empiricamente | Não permitido | Deve ser medida empiricamente |
Perguntas Frequentes (FAQ)
Um aplicativo pode oferecer moeda virtual ou descontos em troca da concessão de permissão do ATT?
Um aplicativo pode exibir um segundo prompt do ATT se o usuário selecionar inicialmente a opção de não permitir?
Um iniciador de pré-permissão viola as diretrizes da App Store da Apple?
Resumo e Estrutura de Decisão
Melhorar a experiência de permissão do ATT exige uma divulgação clara de propósito e uma temporização consciente do contexto. Quando explicações adicionais são necessárias, um iniciador de pré-permissão alinhado ao HIG pode fornecer contexto antes do prompt do sistema, alinhando a experiência de permissão às diretrizes de interface e rastreamento publicadas pela Apple.
Se o contexto de atribuição ou onboarding ainda for necessário após a negação do ATT, os aplicativos poderão usar mecanismos permitidos de forma independente, como o AdAttributionKit, integrações existentes do SKAdNetwork ou direcionamento contextual verdadeiramente primário que permaneça dentro das regras de rastreamento da Apple.
Para comportamento de atribuição e direcionamento contextual específicos do produto, revise a documentação do OpoInstall e avalie a implementação em relação aos requisitos de rastreamento aplicáveis da Apple.
Materiais Relacionados
-
Conceitos: App Tracking Transparency, Otimização de IDFA, Iniciadores de Pré-Permissão, Funis de Consentimento
-
Tecnologias: StoreKit Framework, AppTrackingTransparency Framework, OpoInstall Mobile SDK
-
Padrões: Diretrizes de Interface Humana da Apple sobre Privacidade, Seção 5.1.2 das Diretrizes de Revisão da App Store
-
APIs:
ATTrackingManager.requestTrackingAuthorization,UIApplication.openSettingsURLString,ASIdentifierManager
Documentação Oficial
Share this article



