Todos os artigos
Playbook8 min de leitura

Marque cada compra do Google Play com um id de conta ofuscado, ou um estorno chega sem forma de rastreá-lo

O Google Play permite estampar um id estável e com hash em cada compra e o lê de volta quando uma disputa chega. Configure-o e uma revisão de estorno se vincula ao usuário exato cujo uso você precisa reportar. Ignore-o e você estará combinando um simples id de pedido com suposições sob um relógio de 24 horas.

As mãos de um desenvolvedor amarrando uma pequena etiqueta em branco a um recibo de compra de papel ao lado de um telefone Android, representando a estampagem de um id de conta ofuscado do Google Play em uma compra

Principais conclusões

  • O id de conta ofuscado é uma string que você anexa a uma compra do Google Play com setObfuscatedAccountId. O Google Play a armazena com o pedido e a retorna mais tarde como obfuscatedExternalAccountId, de modo que uma compra pode ser rastreada até o usuário do seu sistema que a realizou.
  • Nas palavras do Google, o campo permite que o Google Play detecte atividade irregular, como muitos dispositivos fazendo compras na mesma conta em um curto período. Configurá-lo alimenta a própria triagem de fraude do Google no momento da compra, antes que uma transação seja concluída.
  • O identificador é limitado a 64 caracteres e não deve carregar informações pessoais em texto claro. O Google diz que armazenar PII como e-mails neste campo faz com que as compras sejam bloqueadas, e recomenda em vez disso um hash unidirecional ou criptografia.
  • Quando um estorno bancário precisa da sua revisão, o Google Play envia uma PendingRefundReviewNotification que nomeia um pedido, não uma pessoa. O id de conta ofuscado é a chave de junção que mapeia esse pedido de volta ao registro de usuário cujo uso você precisa reportar.
  • Você responde a uma disputa chamando orders.reviewrefund dentro de 24 horas com um refundPreference, um sinalizador sampleContentProvided e evidência de consumo como consumptionPercentageMilliunits e consumptionUsageEvents. Você só pode construir essa evidência depois de saber a qual usuário o pedido pertence.
  • Para pedidos do Google Play feitos a partir de 3 de agosto de 2026, um estorno perdido cobra do desenvolvedor o preço de compra menos a taxa de serviço do Google, mais a taxa de estorno do banco. Uma disputa que você não pode responder porque não consegue identificar o pedido é agora um custo direto, não apenas uma venda perdida.
  • Configure o id em cada compra, não apenas nas assinaturas, e leia-o de volta no servidor. No cliente ele vem de Purchase.getAccountIdentifiers, e no seu backend é o campo obfuscatedExternalAccountId no registro da compra.

Uma revisão de estorno do Google Play aparece nomeando um pedido e um token de compra. Ela não diz quem é o cliente. Se você nunca estampou seu próprio identificador nessa compra, agora está combinando um simples id de pedido com sua tabela de usuários sob um relógio de 24 horas, e precisa responder com evidência de uso que talvez não consiga encontrar. O id de conta ofuscado é a solução. É uma string curta que você anexa no checkout que o Google Play armazena com a compra e devolve a você mais tarde, de modo que cada pedido pode ser rastreado até o usuário exato que o realizou. Aqui está o que é o campo, por que ele decide se você consegue responder a uma disputa, e quanto custa ignorá-lo agora que um estorno perdido é uma conta.

O que o id de conta ofuscado realmente é

O id de conta ofuscado é uma string opcional que você passa para o fluxo de faturamento do Google Play quando um cliente compra algo. Você o configura com setObfuscatedAccountId no construtor de BillingFlowParams, e o Google o armazena ao lado da compra. Não é o nome do cliente, nem o e-mail dele, nem a conta do Google dele. É o seu próprio identificador para o seu próprio usuário, escrito em uma forma que o Google pode guardar sem saber quem é a pessoa.

É uma string que você configura no checkout, não um nome

Nas palavras do Google, setObfuscatedAccountId especifica uma string ofuscada opcional que está associada de forma única à conta de usuário do comprador no seu app. A palavra ofuscada cumpre um papel real. O Google não quer o seu id de usuário em bruto nem nada que identifique a pessoa. Ele quer um token estável que mapeie um para um a um usuário do seu lado, e nada mais. O campo é limitado a 64 caracteres, o que acomoda um hash confortavelmente e pouco mais.

O Google o lê primeiro para a própria triagem de fraude

Antes de ser útil para você, o campo cumpre uma tarefa para o Google. A documentação de faturamento diz que o Google Play pode usar esse valor para detectar atividade irregular, como muitos dispositivos fazendo compras na mesma conta em um curto período, e que o Google usa esses dados para detectar comportamento suspeito e bloquear alguns tipos de transações fraudulentas antes que sejam concluídas. Então o primeiro benefício de configurá-lo está a montante, em compras mais limpas e menos daquelas fraudulentas que se transformam depois em anulações e disputas. O Google lista o id de conta ofuscado e a Voided Purchases API juntos como suas duas ferramentas centrais contra abuso por um motivo.

Por que importa quando uma revisão de estorno chega

Um reembolso que você vê chegando é fácil. O caso difícil é o estorno bancário, porque ele não começa com o seu cliente falando com você. Começa com o banco, e o Google Play o encaminha a você como uma revisão com um relógio anexado.

A disputa nomeia um pedido, não uma pessoa

Quando um cliente contesta uma cobrança com o banco dele e o Google precisa da sua contribuição, o Google Play envia uma PendingRefundReviewNotification. Essa mensagem identifica o pedido. Ela não carrega o seu id de usuário, porque o Google nunca teve o seu id de usuário. Ele só tinha o que você estampou na compra. Se isso foi nada, agora você está buscando ao contrário um simples id de pedido e token de compra em seus próprios registros, esperando ter registrado o token no momento da compra e esperando que a correspondência seja inequívoca. Se você configurou um id de conta ofuscado, a compra carrega o seu próprio hash, você busca o usuário em uma única consulta, e passa a construir evidência em vez de caçar identidade.

O que orders.reviewrefund realmente pede de você

Responder à disputa significa chamar o método orders.reviewrefund dentro de 24 horas. O Google registra a sua primeira chamada e ignora o resto, então a primeira resposta é a única resposta. Estes são os campos que ele quer, e cada um dos campos de evidência assume que você já sabe a qual usuário o pedido pertence.

CampoObrigatórioO que carrega
pendingRefundTokenSimO token da PendingRefundReviewNotification que você está respondendo
refundPreferenceSimAPPROVE, DECLINE ou NEUTRAL, sua recomendação sobre se o Play deve reembolsar
sampleContentProvidedSimSe você forneceu uma amostra grátis, um teste ou uma descrição do recurso antes da compra
consumptionPercentageMilliunitsOpcionalQuanto da compra o cliente consumiu, de 0 a 100,000 milliunits
consumptionUsageEventsOpcionalUma lista de eventos, cada um uma instância em que o usuário consumiu ou usou o que comprou
Uma pequena etiqueta de papel em branco amarrada com barbante repousando sobre um extrato bancário impresso ao lado de um smartphone mostrando uma lista desfocada de transações, representando a marcação de uma compra do Google Play para que uma disputa posterior possa ser rastreada até um usuário

Quanto realmente custa ignorá-lo

Durante a maior parte da história do Google Play, um estorno que você não podia defender era uma venda perdida e um dar de ombros. Isso mudou. Para pedidos feitos a partir de 3 de agosto de 2026, um estorno perdido cobra do desenvolvedor o preço de compra menos a taxa de serviço do Google, mais a taxa de estorno do banco. A disputa que você não pode responder é agora um item de despesa.

Vamos acompanhar um pedido. Um cliente contesta uma compra de $9.99 com o banco dele. O Google Play envia a revisão, e você tem 24 horas. Se você marcou a compra, encontra o usuário, vê que ele consumiu a maior parte do que comprou, e responde reviewrefund com uma preferência DECLINE e a evidência de consumo, dando ao Google um caso real para contestar uma disputa ilegítima. Se você não a marcou, ou não consegue identificar o pedido a tempo ou responde sem nada, a disputa é decidida sem o seu lado, e em um pedido posterior a 3 de agosto você paga os $9.99 menos a taxa do Google de volta, mais uma taxa fixa de estorno bancário que muitas vezes fica perto de $20. Em uma venda pequena, essa taxa fixa sozinha pode ser maior do que o que você ganhou líquido.

  • A receita perdida: sua parcela líquida da venda, revertida.
  • A taxa de estorno do banco: um custo fixo que a rede de cartões define, cobrado por cima em pedidos feitos após 3 de agosto de 2026, que um simples reembolso nunca carrega.
  • O gasto desperdiçado: a computação, as chamadas de API de terceiros e o armazenamento que a conta já usou, perdidos independentemente de você conseguir responder.
  • O padrão que você não consegue ver: sem um id de conta estável você também não consegue perceber que o mesmo usuário está contestando repetidamente, então o abuso em série se lê como perdas isoladas não relacionadas.

Como configurá-lo sem ter compras bloqueadas

Duas regras cobrem quase todos os erros que as equipes cometem com este campo. Aplique hash ao id, e configure-o em todos os lugares.

Aplique hash ao seu id de usuário, nunca envie PII

Não coloque um e-mail, um número de telefone ou qualquer dado pessoal em bruto neste campo. O Google é explícito que armazenar PII como e-mails em texto claro faz com que as compras sejam bloqueadas, e recomenda um hash unidirecional ou criptografia para gerar o valor. O padrão limpo é um hash unidirecional do seu id de usuário interno, calculado da mesma forma toda vez para que o mesmo usuário sempre produza a mesma string de 64 caracteres. Também não use o id de conta do Google da pessoa nem o seu id de desenvolvedor. O valor deve significar algo apenas para o seu sistema.

Configure-o em cada compra, e leia-o de volta no seu servidor

Anexe o id a cada fluxo de faturamento, tanto produtos de compra única quanto assinaturas, para que nenhuma compra fique sem rótulo. Após a compra, leia-o de volta em dois lugares. No cliente, Purchase.getAccountIdentifiers retorna um objeto cujo getObfuscatedAccountId dá a você a string que você configurou. No seu backend, o registro de compra do lado do servidor o carrega como o campo obfuscatedExternalAccountId, e a cópia do servidor é a que se deve confiar, porque uma disputa chega ao seu servidor, não ao dispositivo.

Use setObfuscatedProfileId quando uma conta tem muitos perfis

Se o seu app permite que uma conta tenha vários perfis, um lar de streaming ou um jogo com vários personagens, configure também setObfuscatedProfileId. É o mesmo tipo de string com hash, de 64 caracteres e sem PII, restrita ao perfil que fez a compra. O Google observa que configurar um id de perfil também exige que o id de conta seja passado, então envie ambos. O resultado é que uma disputa mapeia não apenas para a conta, mas para o perfil exato que gastou o dinheiro.

O paralelo do iOS, em uma linha

A App Store tem a mesma ideia sob um nome diferente. No iOS você anexa um appAccountToken, um UUID, a uma compra, e ele volta na transação e na CONSUMPTION_REQUEST que a Apple envia quando um cliente pede um reembolso. A forma do problema é idêntica nas duas lojas. O fluxo de disputa ou reembolso faz referência a uma transação, e o seu próprio identificador é o que a vincula de volta a um usuário cujo uso você pode reportar.

DetalheGoogle PlayApp Store
Campo que você configuraid de conta ofuscado via setObfuscatedAccountIdappAccountToken
FormatoString com hash, 64 caracteres, sem PIIUUID
Onde ele voltaobfuscatedExternalAccountId na compraappAccountToken na transação
A janela que ele alimentaorders.reviewrefund, 24 horasCONSUMPTION_REQUEST, 12 horas
O que você reportaPorcentagem de consumo e eventos de usoOs campos de consumo da Apple

Nada disso é difícil de construir. É fácil de ignorar, porque o dia em que você escreve o código de checkout não é o dia em que um estorno chega, e o custo de ignorá-lo é invisível até então. O RefundHalt configura e rastreia o identificador de conta nas duas lojas, mantém o vínculo compra-usuário para que uma disputa sempre se resolva a um cliente real, e responde ao orders.reviewrefund do Google Play e à CONSUMPTION_REQUEST da Apple dentro das janelas deles com a evidência de consumo registrada no momento da venda. O relógio de 24 horas não é o momento de descobrir que você não consegue dizer quem comprou a coisa.

Perguntas frequentes

O que é o id de conta ofuscado no faturamento do Google Play?
É uma string opcional que você anexa a uma compra com setObfuscatedAccountId que está associada de forma única à conta de usuário do comprador no seu app. O Google Play a armazena com o pedido, a usa para detectar atividade irregular como muitos dispositivos comprando em uma única conta, e a devolve a você mais tarde como obfuscatedExternalAccountId para que você possa vincular uma compra a um usuário específico.
Posso colocar o e-mail ou o id de um usuário no campo de id de conta ofuscado?
Não. O Google diz que armazenar informações de identificação pessoal como e-mails em texto claro neste campo faz com que as compras sejam bloqueadas. Use um hash unidirecional ou criptografia para gerar o valor, mantenha-o dentro de 64 caracteres, e não use o id de conta do Google da pessoa nem o seu id de desenvolvedor.
Como o id de conta ofuscado ajuda com um estorno do Google Play?
Uma revisão de estorno, a PendingRefundReviewNotification, nomeia o pedido, não o seu usuário. O id de conta ofuscado é a chave de junção que mapeia esse pedido ao registro de usuário correto, para que você possa responder a orders.reviewrefund dentro de 24 horas com evidência de consumo real em vez de adivinhar a qual cliente o pedido pertence.
Devo configurar o id de conta ofuscado em assinaturas ou apenas em compras únicas?
Configure-o em cada compra, tanto produtos de compra única quanto assinaturas. Qualquer compra sem rótulo é uma que você não consegue rastrear até um usuário quando uma disputa ou anulação chega, e disputas podem cair em qualquer tipo de pedido.
Qual é a diferença entre o id de conta ofuscado e o id de perfil ofuscado?
O id de conta mapeia uma compra para uma conta de usuário no seu app. O id de perfil a mapeia para um perfil específico dentro dessa conta, para apps onde uma conta tem vários perfis ou personagens. Ambos são strings com hash, de 64 caracteres e sem PII, e o Google observa que configurar um id de perfil também exige passar o id de conta.

Fontes e leituras adicionais

RefundHalt

O piloto automático de reembolsos para App Store e Google Play

Continue lendo

A próxima solicitação de reembolso já está a caminho.

Configure a RefundHalt no tempo que você levaria para ler mais um e-mail de suporte sobre um reembolso que não conseguiu contestar.