Este guia explica como usar a API Google Play Developer para criar e gerenciar um catálogo de produtos para seu app do Google Play.
Para vender produtos no seu app usando o sistema de faturamento do Google Play, você precisa configurar um catálogo com todos os produtos que quer disponibilizar para compra pelos usuários. Isso pode ser feito pelo Play Console ou automatizar o gerenciamento de catálogo usando a API Google Play Developer. A automação pode ajudar a garantir que seu catálogo esteja sempre atualizado e escalar para catálogos grandes em que a coordenação manual é impraticável. Neste guia, você vai aprender a usar a API Play Developer para criar e gerenciar um catálogo de produtos para seu app do Google Play. Consulte nosso guia Como se preparar para ver instruções sobre como configurar a API Google Play Developer para sua integração de back-end.
APIs de gerenciamento de catálogo
Para saber mais sobre os diferentes tipos de produtos que você pode vender com o sistema de faturamento do Google Play, leia Noções básicas sobre os tipos de produtos no app e considerações sobre o catálogo. O Google oferece dois conjuntos principais de APIs para gerenciamento de catálogo no Google Play, correspondentes às duas principais categorias de produtos:
- Produtos únicos
- Produtos por assinatura
Produtos únicos
O endpoint inappproducts
permite gerenciar produtos únicos
no back-end. Isso inclui a criação, atualização e exclusão
de produtos, além do gerenciamento de preços e disponibilidade.
Dependendo de como você lida com compras únicas de produtos, você vai modelar
produtos consumíveis (que podem ser comprados quantas vezes quiser) ou direitos
permanentes (que não podem ser feitos duas vezes pelo mesmo usuário). Você pode decidir quais
produtos únicos devem ser de consumo ou não.
Produtos por assinatura
O endpoint monetization.subscriptions
ajuda a gerenciar produtos de
assinatura no back-end do desenvolvedor. Você pode criar, atualizar
e excluir assinaturas ou controlar a disponibilidade regional e os preços delas.
Além do endpoint monetization.subscriptions
, também oferecemos
monetization.subscriptions.basePlans
e
monetization.subscriptions.basePlans.offers
para gerenciar os planos básicos e as ofertas das assinaturas.
Métodos de lote
Os endpoints inappproducts
e monetization.subscriptions
oferecem vários métodos de lote que permitem recuperar ou gerenciar até
100 entidades no mesmo app ao mesmo tempo.
Os métodos em lote, quando usados com a tolerância de latência ativada, oferecem suporte a um maior throughput e são particularmente úteis para desenvolvedores de catálogos grandes para a criação inicial ou reconciliação de catálogos.
Atualizar a latência de propagação em relação à taxa de transferência
Depois que uma solicitação de criação ou modificação de produto é concluída, as mudanças podem não ficar
imediatamente visíveis para os usuários finais nos dispositivos devido a atrasos no processamento
de rede ou de back-end.
Por padrão, todas as solicitações de modificação de produto são sensíveis à latência. Isso significa
que elas são otimizadas para propagação rápida por sistemas de back-end, normalmente
refletidas nos dispositivos do usuário final em minutos. No entanto, há um limite por hora
no número de solicitações de modificação.
Para casos em que você precisa criar ou atualizar muitos produtos (por exemplo, durante
a criação inicial de um catálogo grande), use métodos em lote com o
campo latencyTolerance
definido como
PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT
.
Isso vai aumentar significativamente a taxa de atualização. As atualizações tolerantes a latência
levam até 24 horas para serem propagadas aos dispositivos do usuário final.
Configuração de cota
Há vários limites de cota que você precisa conhecer ao usar a API Play Developer para gerenciar seu catálogo de produtos:
- As APIs Google Play Developer têm um limite padrão de 200.000 consultas por dia. Esse limite de cota se aplica à agregação de uso em todos os endpoints, incluindo APIs de gerenciamento de catálogo.
- Os endpoints de modificação de produtos também aplicam um limite de 7.200 consultas por hora. Esse é um limite único para produtos únicos e assinaturas e para todas as solicitações de modificação, incluindo criação, atualização, ativação e exclusão. As chamadas de método de modificação em lote são contabilizadas como uma consulta para essa cota, independente do número de solicitações individuais incluídas ou da sensibilidade de latência.
- As modificações sensíveis à latência também têm um limite de 7.200 modificações por hora. Para métodos em lote, cada solicitação de modificação aninhada é contabilizada separadamente para fins desta cota. Essa cota tem implicações práticas apenas para os usuários da API de lote que executam atualizações sensíveis à latência, já que, em outros casos, a cota 2 será esgotada antes ou ao mesmo tempo que essa cota.
Confira alguns exemplos ilustrativos para entender o uso de cota de diferentes solicitações:
- Uma única solicitação
get
para buscar um item consome 1 token da cota 1 e nenhum token da cota 2 e 3, já que eles se referem apenas a endpoints de modificação. - Uma solicitação
get
em lote para buscar até 100 itens também vai consumir 1 token da cota 1 e nenhum token das cotas 2 e 3. - Uma única solicitação
modification
para um item consome 1 token da cota 1 e 1 token da cota 2. Se a solicitação for sensível à latência, ela também consumirá 1 token da cota 3. Como a cota C tem o mesmo limite que a cota 2, ela não tem implicações práticas para os usuários que usam apenas métodos de modificação única. - Uma solicitação
modification
em lote de 100 itens tolerantes a latência consome 1 token da cota 1 e 1 token da cota 2. Essa configuração de cota deve permitir uma margem ampla para manter seu catálogo atualizado. No entanto, se o algoritmo não estiver ciente dessa cota e ultrapassar essa taxa, você poderá receber um erro por chamada adicional. - Uma solicitação
modification
em lote de 100 itens sensíveis à latência consome 1 token da cota 1, 1 token da cota 2 e 100 tokens da cota 3.
Recomendações de uso da API Catalog Management
Ao seguir essas diretrizes, você otimiza suas interações com a API, garantindo uma experiência de gerenciamento de catálogos tranquila e eficiente.
Monitorar o uso
Você precisa estar ciente dos processos de uso intenso. Por exemplo, no início da integração, os endpoints de gerenciamento de catálogos têm mais probabilidade de consumir mais cota para criar o catálogo inicial completo, o que pode afetar o uso de produção de outros endpoints, como a API de status de compra, se você estiver próximo do limite de uso geral. Você precisa monitorar o consumo de cota para garantir que não esteja excedendo as cotas da API. Há várias maneiras de monitorar o uso. Por exemplo, é possível usar o painel de cotas das APIs do Google Cloud ou qualquer outra ferramenta de monitoramento de API interna ou de terceiros.
Otimizar o uso de cota da API
É altamente recomendável otimizar o consumo de taxa para minimizar a probabilidade de erros de API. Para implementar isso de maneira eficaz, recomendamos que você:
- Escolha a estratégia de gerenciamento de catálogo certa. Depois de entender a cota da API, você precisa escolher a estratégia certa para que seu aplicativo alcance as metas de gerenciamento de catálogo de forma eficiente.
- Faça apenas o número mínimo de chamadas necessárias para refletir as mudanças.
- Não envie chamadas de modificação redundantes ou desnecessárias para as APIs. Isso pode exigir que você mantenha um registro de alterações no catálogo de back-end.
- Não ultrapasse o limite de 7.200 consultas por hora de modificação de produtos. Talvez você queira criar processos de sincronização que exijam um grande número de modificações de produtos em um curto período, como a criação inicial de um catálogo. Se você espera que esses processos ultrapassem o limite por hora, implemente esperas conforme necessário para diminuir o uso a um nível seguro. Considere usar métodos de lote com atualizações tolerantes a latência para alcançar um maior throughput.
- Prepare-se proativamente para a expansão. À medida que seu aplicativo cresce, talvez seja necessário aumentar o uso da API e dos vários endpoints. Leia a documentação sobre cotas da API Google Play Developer para saber como aumentar a cota quando você estiver chegando ao uso máximo.
- Programe estrategicamente processos pesados. Tente programar seus processos de catálogo pesados em picos de uso críticos. Por exemplo, evite executar uma sincronização completa do catálogo durante os horários de pico de vendas da semana.
Adicionar a lógica de tratamento de erros de cota
Não importa o quanto você cria sua lógica de gerenciamento de catálogo com eficiência, ela precisa
ser resiliente a limites de cota inesperados, já que a cota diária é
compartilhada por endpoints usados em módulos independentes da sua integração. Inclua
erros de limitação de cota no tratamento de erros e implemente as
esperas adequadas.
Cada chamada feita para as APIs Google Play Developer gera uma resposta. Em caso de falha de chamada, você vai receber uma resposta de falha que inclui um código de status de resposta HTTP e um objeto errors
, fornecendo mais detalhes sobre o domínio de erro e uma mensagem de depuração.
Por exemplo, se você ultrapassar o limite diário, poderá encontrar um erro
semelhante ao seguinte:
{
"code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"message" : "Daily Limit Exceeded. The quota will be reset at midnight Pacific Time (PT). You may monitor your quota usage and adjust limits in the API
Console: https://console.developers.google.com/apis/api/androidpublisher.googleapis.com/quotas?project=xxxxxxx",
"reason" : "dailyLimitExceeded",
"extendedHelp" : "https://console.developers.google.com/apis/api/androidpublisher.googleapis.com/quotas?project=xxxxxx"
} ],
}
Implementação do gerenciamento de catálogo
Os desenvolvedores usam os endpoints de publicação de produtos da API Google Play Developer para manter o catálogo sincronizado entre o back-end e o Google Play. Manter o catálogo do Google Play sempre atualizado com as informações mais recentes do back-end tem vantagens para criar uma melhor experiência do usuário. Exemplo:
- Você poderá consultar a lista completa de ofertas disponíveis e gerenciar as tags de oferta e de plano básico para influenciar sua própria qualificação e a lógica de oferta.
- Você pode conferir os diferentes preços e detalhes do produto que os usuários veem nas plataformas e garantir que eles sejam consistentes.
- Você terá os detalhes do produto em mãos no back-end ao processar novas compras, sem precisar aumentar a latência e o risco de falha ao fazer outras chamadas para a API Google Play Developer durante fluxos críticos do usuário.
Há alguns limites e considerações que você precisa ter em mente ao criar seu catálogo de produtos no Google Play. Depois de entender esses limites e saber como estruturar seu catálogo, é hora de decidir a estratégia de sincronização.
Estratégias de sincronização de catálogos
Os endpoints de publicação da API Google Play Developer permitem que você faça atualizações no seu catálogo conforme as mudanças ocorrem. Às vezes, pode ser necessário fazer uma abordagem de atualizações periódicas, em que você envia uma série de mudanças no mesmo processo. Cada abordagem exige escolhas de design diferentes. Cada estratégia de sincronização se adapta melhor a alguns casos de uso do que a outros, e você pode ter um conjunto de necessidades que exigem as duas, dependendo da situação. Às vezes, você pode querer fazer uma atualização em um produto assim que souber de uma nova mudança, por exemplo, para processar uma atualização urgente de produto (ou seja, um preço incorreto precisa ser corrigido assim que possível). Em outros momentos, você pode usar uma sincronização em segundo plano periódica para garantir que o back-end e os catálogos do Google Play estejam sempre consistentes. Leia alguns casos de uso comuns em que você pode querer implementar essas diferentes estratégias de gerenciamento de catálogo.
Quando enviar atualizações conforme seu catálogo local muda
O ideal é que as atualizações aconteçam assim que houver qualquer mudança no catálogo de produtos do back-end para minimizar discrepâncias.
Esse tipo de atualização é uma boa opção quando:
- É necessário garantir que seus produtos estejam sempre atualizados.
- Você precisa fazer algumas mudanças nos produtos todos os dias.
- Você precisa atualizar os produtos que já estão em produção e sendo vendidos.
Essa abordagem é mais simples de implementar e permite manter seu catálogo sincronizado com a janela de discrepância de menor valor.
Quando usar atualizações periódicas
As atualizações periódicas são executadas de forma assíncrona em relação à edição do produto no back-end e são uma boa opção quando:
- Não é necessário garantir que seus produtos sejam atualizados em pouco tempo.
- Você precisa planejar atualizações em massa ou processos de conciliação.
- Você já tem um sistema de gerenciamento de conteúdo ou catálogo para lidar com seus produtos digitais e que atualiza o catálogo constantemente
No caso de catálogos grandes, use métodos de lote com atualizações tolerantes a latência para alcançar a capacidade máxima.
Criar seu catálogo de produtos
Se você tiver um catálogo grande para fazer upload no Google Play, automatize a carga inicial. Esse tipo de processo pesado funciona melhor se uma estratégia periódica for combinada com métodos de lote tolerantes a latência.
Criar produtos únicos
Para a criação inicial de um catálogo grande de produtos, recomendamos usar o
método inappproducts.batchUpdate
com o campo allowMissing
definido como
true
e o campo latencyTolerance
definido como
PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT
.
Isso vai minimizar o tempo necessário para criar o catálogo dentro dos limites de cota.
Para catálogos menores, use o método inapp_products.insert
.
Como alternativa, use o método inappproducts.update
com o
parâmetro allowMissing
, conforme descrito na seção "Atualizações do produto".
Essa abordagem tem a vantagem de eliminar a necessidade de que o script tenha
estado e possa ser reiniciado do zero se algo der errado.
Criar produtos de assinatura
Para a criação inicial de catálogos grandes de assinaturas, recomendamos usar o
método monetization.subscriptions.batchUpdate
com o campo allowMissing
definido como true
e o campo latencyTolerance
definido
como PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT
.
Isso vai minimizar o tempo necessário para criar o catálogo dentro dos limites de cota.
Para catálogos de assinaturas menores, a API Play Developer oferece o
método monetization.subscriptions.create
.
Como alternativa, é possível criar assinaturas usando o
método monetization.subscriptions.patch
com o
parâmetro allowMissing
, conforme descrito na seção "Atualizações do produto".
Todos os métodos anteriores criam assinaturas com os planos básicos
(fornecidos no objeto Subscription). Esses planos de base são inicialmente
inativos. Para gerenciar o status dos planos básicos, use o endpoint
monetization.subscriptions.basePlans
, incluindo a ativação de um
plano básico para disponibilizá-lo para compra.
Além disso, o endpoint monetization.subscriptions.basePlans.offers
permite criar e gerenciar ofertas.
Atualizações do produto
Os métodos a seguir permitem modificar os produtos atuais de maneira eficiente, garantindo que as ofertas estejam alinhadas aos ajustes mais recentes.
Atualizar produtos únicos
Há três métodos disponíveis para ajudar a atualizar os produtos únicos atuais.
inappproducts.patch
: o endpoint de patch é usado para atualizar um recurso parcialmente. Isso significa que você pode atualizar campos específicos especificados no corpo da solicitação. O endpoint de patch é usado normalmente quando você só precisa atualizar alguns campos de um recurso.inappproducts.update
: o endpoint de atualização é usado para atualizar um recurso por completo. Isso significa que você vai precisar enviar todo o objeto de recurso no corpo da solicitação. O endpoint de atualização normalmente é usado quando você precisa atualizar todos os campos em um recurso. Quando o parâmetroallowMissing
é definido comotrue
e o ID do produto fornecido ainda não existe, o endpoint insere o produto em vez de falhar.inappproducts.batchUpdate
: é uma versão em lote do endpoint de atualização, que permite modificar vários produtos com uma única consulta. Use-o com o campolatencyTolerance
definido comoPRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT
para aumentar a capacidade.
Atualizar produtos de assinatura
Para atualizar assinaturas atuais, use o método
monetization.subscriptions.patch
. Esse método
usa os seguintes parâmetros obrigatórios:
packageName
: o nome do pacote do app ao qual a assinatura pertence.productId
: o ID de produto exclusivo da assinatura.regionsVersion
: a versão da configuração da região.
A menos que você esteja criando uma nova assinatura usando o parâmetro allowMissing
,
é necessário informar o parâmetro updateMask
. Esse parâmetro é uma
lista separada por vírgulas de campos que você quer atualizar.
Por exemplo, se você quiser atualizar apenas uma listagem de um produto por assinatura,
especifique o campo listings
para o parâmetro updateMask
.
É possível usar monetization.subscriptions.batchUpdate
para atualizar várias assinaturas ao mesmo tempo.
Use-o com o campo latencyTolerance
definido como
PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT
para aumentar a
taxa de transferência.
Para ativar, desativar, excluir planos básicos ou migrar assinantes para as
versões mais recentes de preços de planos básicos, use o endpoint monetization.subscriptions.basePlans
.
Além disso, é possível atualizar as ofertas dos planos básicos com o
método
monetization.subscriptions.basePlans.offers.patch
.
Reconciliação de catálogo
Se você atualizar o catálogo do Google Play sempre que o catálogo do back-end mudar ou periodicamente, se tiver um sistema de gerenciamento de catálogo ou um banco de dados fora do catálogo do Google Play, pode haver situações em que ele não será sincronizado com o catálogo na configuração do app no Google Play. Isso pode ser devido a mudanças manuais de emergência no catálogo no console, a uma falha no sistema de gerenciamento de catálogo ou à perda dos dados mais recentes.
Você pode criar um processo de reconciliação de catálogo para evitar uma janela de discrepância prolongada.
Consideração do sistema de diferenciação
Recomendamos criar um sistema de comparação para detectar inconsistências e reconciliar os dois sistemas. Confira alguns pontos a serem considerados ao criar um sistema de diferenças para ajudar a manter seus catálogos sincronizados:
- Entenda os modelos de dados:a primeira etapa é entender os modelos de dados do CMS do desenvolvedor e da API Google Play Developer. Isso inclui conhecer os diferentes tipos de dados armazenados em cada sistema e como os diferentes elementos de dados são mapeados entre si.
- Definir as regras de diferença:depois de entender os modelos de dados, é necessário definir as regras de diferença. Essas regras vão determinar como os dados nos dois sistemas são comparados. Por exemplo, você pode corresponder IDs de produtos e comparar os principais atributos da assinatura e os planos e ofertas básicas associados.
- Implementar um algoritmo de comparação:depois de definir as regras de comparação, é necessário implementar o algoritmo de comparação. Esse algoritmo vai usar os dados dos
dois sistemas e compará-los de acordo com as regras que você definiu. Para receber
os dados do catálogo do Google Play, use os métodos
inappproducts.list
,inappproducts.batchGet
,monetization.subscriptions.list
emonetization.subscriptions.batchGet
. - Gerar relatórios de diferença:o algoritmo de diferença vai gerar um relatório de diferença. Esse relatório mostra as diferenças entre os dois sistemas.
- Reconciliar diferenças:depois de gerar o relatório de diferenças, é necessário resolver as diferenças. Isso pode envolver a atualização dos dados no seu CMS ou no Google Play usando os endpoints de gerenciamento de catálogo da API para desenvolvedores, dependendo de como você normalmente atualiza o catálogo. Para reconciliar produtos fora de sincronização, use os endpoints de atualização, conforme descrito na seção "Atualizações de produtos".
Descontinuação do produto
A API Google Play Developer oferece vários métodos para ajudar os desenvolvedores a
descontinuar os produtos:
inappproducts.delete
e
inappproducts.batchDelete
para produtos únicos e
monetization.subscriptions.delete
para assinaturas. A descontinuação de um produto pode ser necessária em vários cenários,
como:
- Criação por engano.
- Descontinuar um recurso ou serviço.
Recomendamos incorporar a descontinuação do produto à sua estratégia de gerenciamento de catálogo.
Descontinuar produtos únicos
Para excluir produtos únicos com a API Google Play Developer, use o
método
inappproducts.delete
ou
inappproducts.batchDelete
.
Descontinuar produtos por assinatura
É possível excluir assinaturas usando o
método
monetization.subscriptions.delete
. Não é possível remover uma assinatura quando pelo menos um plano básico foi
ativado.