Se o app for distribuído pelo Google Play, e você quiser vender produtos ou ofertas digitais assinaturas, use o Google Play Faturamento. O Google Play Faturamento oferece ferramentas para gerenciar seu catálogo, preços e assinaturas, relatórios úteis e um fluxo de finalização de compra com a tecnologia do Google Play Loja que os usuários já conhecem.
Para apps criados com Atividades confiáveis na Web e fornecidos pela Google Play Store, você agora podem usar a API Payment Request e a API Digital Goods para integração Google Play Faturamento Ela está disponível no Chrome 101 e versões mais recentes para Android e ChromeOS.
Neste guia, você vai aprender a adicionar o suporte do Google Play Faturamento ao seu PWA e empacotá-lo para na Google Play Store para o ChromeOS e a Play Store.
Você vai usar duas APIs da plataforma da Web para adicionar suporte ao Play Faturamento ao seu PWA. A A API Digital Goods é usada para coletar informações da SKU e verificar compras e direitos. na Play Store. A API Payment Request é usada para configurar a Google Play Store como forma de pagamento e para concluir o fluxo de compra.
Como gerar receita com apps na Play Store
Existem duas maneiras de gerar receita com o app usando o Google Play Faturamento na Play Store:
- As compras no app permitem vender bens virtuais duráveis e consumíveis, como outros ou remover anúncios.
- Com as assinaturas, seus usuários têm acesso contínuo a conteúdos ou serviços por uma taxa recorrente como assinaturas de notícias ou assinaturas.
Requisitos
Para configurar o Google Play Faturamento, você precisará de:
- Uma conta de desenvolvedor do Google Play e uma conta do comerciante do Google Payments que estejam vinculados entre si.
- Uma página "Detalhes do app" da Play Store com um lançar na faixa de teste público, fechado ou interno.
- Saiba como criar e configurar os produtos e as assinaturas do seu app na Play Store.
- Um projeto gerado por bolhas com uma configuração do Digital Asset Links em funcionamento.
Atualizar o projeto Bubblewrap
Se você não tiver o Bubblewrap instalado, será necessário instalá-lo. Consulte a Guia de início rápido para conferir detalhes sobre como começar. Se você já tem o protetor de bolhas, atualize para a versão 1.8.2 ou superior.
O bolhas também tem o recurso por trás de uma sinalização. Em
para ativá-lo, você terá que modificar a configuração do projeto em twa-manifest.json
,
localizados na raiz do projeto e ative alphaDependencies
e playBilling
Atributo:
...,
"enableNotifications": true,
"features": {
"playBilling": {
"enabled": true
}
},
"alphaDependencies": {
"enabled": true
},
...
Com o arquivo de configuração atualizado, execute bubblewrap update
para aplicar a configuração ao
projeto, seguido por bubblewrap build
, para gerar um novo pacote Android e fazer upload deste
para a Play Store.
Recurso que detecta a disponibilidade da API Digital Goods e do Google Play Faturamento
No momento, a API Digital Goods só é compatível com o Chrome quando o PWA está sendo executado em um
Atividade na Web Confiável e é possível detectar se ela está disponível verificando
getDigitalGoodsService
no objeto window
:
if ('getDigitalGoodsService' in window) {
// Digital Goods API is supported!
}
A API Digital Goods pode estar disponível em qualquer navegador e oferecer suporte a diferentes lojas. Para
verifique se um back-end de armazenamento específico é compatível, você vai precisar invocar
getDigitalGoodsService()
transmitindo o ID da loja como um parâmetro. A Google Play Store é identificada
pela string https://play.google.com/billing
:
if ('getDigitalGoodsService' in window) {
// Digital Goods API is supported!
try {
const service =
await window.getDigitalGoodsService('https://play.google.com/billing');
// Google Play Billing is supported!
} catch (error) {
// Google Play Billing is not available. Use another payment flow.
return;
}
}
Recuperar detalhes de uma SKU
A API Digital Goods fornece getDetails()
, que permite recuperar informações como o
título, descrição e, mais importante, preço do back-end de pagamentos.
Você pode então usar essas informações em sua interface de uso e fornecer mais detalhes ao usuário:
const skuDetails = await service.getDetails(['shiny_sword', 'gem']);
for (item of skuDetails) {
// Format the price according to the user locale.
const localizedPrice = new Intl.NumberFormat(
navigator.language,
{style: 'currency', currency: item.price.currency}
).format(item.price.value);
// Render the price to the UI.
renderProductDetails(
item.itemId, item.title, localizedPrice, item.description);
}
Criar o fluxo de compra
O construtor de uma PaymentRequest usa dois parâmetros: uma lista de formas de pagamento e uma lista de detalhes de pagamento.
Ao acessar a Atividade na Web Confiável, você precisa usar a forma de pagamento do Google Play Faturamento:
definindo https://play.google.com/billing
como o identificador e adicionando a SKU do produto como um
membro de dados:
async function makePurchase(service, sku) {
// Define the preferred payment method and item ID
const paymentMethods = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku,
}
}];
...
}
Mesmo que os detalhes de pagamento sejam obrigatórios, o Play Faturamento ignorará esses valores e usará os definidos na criação da SKU no Play Console para que possam ser preenchidos com valores falsos:
const paymentDetails = {
total: {
label: `Total`,
amount: {currency: `USD`, value: `0`}
}
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
Chame show()
no objeto da solicitação de pagamento para iniciar o fluxo de pagamento. Se a promessa for bem-sucedida
o pagamento foi bem-sucedido. Em caso de falha, é provável que o usuário tenha cancelado o pagamento.
Se a promessa for bem-sucedida, você vai precisar verificar e confirmar a compra. Para se proteger contra fraudes, essa etapa precisa ser implementada usando seu back-end. Consulte o Documentação do Play Faturamento para saber como implementar a verificação no back-end. Se você não confirmar a compra, após três dias, o usuário receberá um reembolso, e o Google Play revogará a compra.
...
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
const paymentResponse = await request.show();
const {purchaseToken} = paymentResponse.details;
// Call backend to validate and acknowledge the purchase.
if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
// Optional: tell the PaymentRequest API the validation was
// successful. The user-agent may show a "payment successful"
// message to the user.
const paymentComplete = await paymentResponse.complete('success');
} else {
// Optional: tell the PaymentRequest API the validation failed. The
// user agent may show a message to the user.
const paymentComplete = await paymentResponse.complete('fail');
}
} catch(e) {
// The purchase failed, and we can handle the failure here. AbortError
// usually means a user cancellation
}
...
Opcionalmente, consume()
pode ser chamado em um purchaseToken para marcar a compra como usada.
e permitir que sejam comprados novamente.
Juntando tudo, um método de compra é semelhante ao seguinte:
async function makePurchase(service, sku) {
// Define the preferred payment method and item ID
const paymentMethods = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku,
}
}];
// The "total" member of the paymentDetails is required by the Payment
// Request API, but is not used when using Google Play Billing. We can
// set it up with bogus details.
const paymentDetails = {
total: {
label: `Total`,
amount: {currency: `USD`, value: `0`}
}
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
const paymentResponse = await request.show();
const {purchaseToken} = paymentResponse.details;
// Call backend to validate and acknowledge the purchase.
if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
// Optional: consume the purchase, allowing the user to purchase
// the same item again.
service.consume(purchaseToken);
// Optional: tell the PaymentRequest API the validation was
// successful. The user-agent may show a "payment successful"
// message to the user.
const paymentComplete =
await paymentResponse.complete('success');
} else {
// Optional: tell the PaymentRequest API the validation failed.
// The user agent may show a message to the user.
const paymentComplete = await paymentResponse.complete('fail');
}
} catch(e) {
// The purchase failed, and we can handle the failure here.
// AbortError usually means a user cancellation
}
}
Verificar o status de compras existentes
A API Digital Goods permite verificar se o usuário tem direitos (no app) compras que ainda não foram consumidas ou assinaturas em andamento) de compras anteriores que feitas, em outro dispositivo, em uma instalação anterior, resgatadas a partir de um código promocional ou na última vez que abriram o app.
const service =
await window.getDigitalGoodsService('https://play.google.com/billing');
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
// Update the UI with items the user is already entitled to.
console.log(`Users has entitlement for ${p.itemId}`);
}
Também é um bom momento para verificar compras que foram feitas anteriormente, mas não foram confirmadas. Recomendamos confirmar as compras o mais rápido possível para garantir que direitos sejam refletidas de modo adequado no app.
const service =
await window.getDigitalGoodsService("https://play.google.com/billing");
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);
// Update the UI with items the user is already entitled to.
console.log(`Users has entitlement for ${p.itemId}`);
}
Testar sua integração
Em um dispositivo Android de desenvolvimento
É possível ativar a API de produtos e softwares digitais em um dispositivo Android de desenvolvimento para testes:
- Verifique se você está usando o Android 9 ou uma versão mais recente com o modo de desenvolvedor ativado.
- Instale o Chrome 101 ou mais recente.
- Para ativar as seguintes sinalizações no Chrome, acesse
chrome://flags
e pesquise o sinalizar pelo nome:#enable-debug-for-store-billing
- Verifique se o site está hospedado com o uso de um protocolo https. O uso de http fará com que a API seja
undefined
Em um dispositivo ChromeOS
A API Digital Goods estará disponível no ChromeOS estável a partir da versão 89. Na Enquanto isso, é possível testar a API de produtos e softwares digitais:
- Instale o app pela Play Store no dispositivo.
- Verifique se o site está hospedado com o uso de um protocolo https. O uso de http fará com que a API seja
undefined
Com usuários de teste e equipes de controle de qualidade
A Play Store tem affordances para testes, incluindo contas e SKUs de teste de usuários. Consulte a documentação do teste do Google Play Faturamento para mais informações.
O que fazer em seguida?
Conforme discutido neste documento, a API Play Billing tem componentes do lado do cliente, que são gerenciados pela API Digital Goods e por componentes do lado do servidor.
- Confira o exemplo de Peter Conn em https://github.com/PEConn/beer
- Confira a documentação do Google Play sobre a verificação de compras.
- Use uma das bibliotecas de cliente da API Google Play Developer, que estão disponíveis em vários idiomas.
- Se estiver implementando um modelo de assinaturas no aplicativo, confira as Documentação de assinaturas do Play Faturamento.
- Implemente as Notificações do desenvolvedor em tempo real (RTDN, na sigla em inglês) e inscreva-se para receber notificações. back-end é notificado quando o estado de uma assinatura muda em vez de pesquisar o status em Google Play.
- Implemente
linkedPurchaseToken
para evitar assinaturas duplicadas. Leia esta postagem do blog em e como implementá-los corretamente.