Se la tua app è distribuita tramite Google Play e vuoi vendere prodotti digitali oppure offrire gli abbonamenti devono utilizzare la fatturazione Google Play. Il servizio Fatturazione Google Play offre strumenti per gestire il tuo catalogo, prezzi e abbonamenti, report utili e un flusso di pagamento tramite Google Play un negozio noto agli utenti.
Per le app create utilizzando Attività web attendibili e fornite tramite il Google Play Store, ora puoi utilizzare l'API Payment Request e l'API Digital Goods per l'integrazione Fatturazione Google Play. È disponibile su Chrome 101 e versioni successive per Android e ChromeOS.
In questa guida imparerai ad aggiungere il supporto per la Fatturazione Google Play alla tua PWA e a pacchettizzarlo per distribuzione sul Google Play Store sia per ChromeOS che per il Play Store.
Utilizzerai due API della piattaforma web per aggiungere il supporto per Fatturazione Play alla tua PWA. La L'API Digital Goods viene utilizzata per raccogliere informazioni sugli SKU e verificare la presenza di acquisti e diritti. dal Play Store. L'API Payment Request viene utilizzata per configurare il Google Play Store come metodo di pagamento e completare il flusso di acquisto.
Come monetizzare le applicazioni sul Play Store
La tua applicazione può monetizzare con Fatturazione Google Play sul Play Store in due modi:
- Gli acquisti in-app consentono di vendere beni virtuali durevoli e di consumo, come ulteriori funzionalità o la rimozione di annunci.
- Abbonamenti: offrono agli utenti l'accesso continuativo a contenuti o servizi dietro pagamento di una tariffa ricorrente. ad esempio abbonamenti alle notizie o abbonamenti.
Requisiti
Per configurare il servizio Fatturazione Google Play, ti serviranno:
- Un account sviluppatore Google Play e un account commerciante Google Payments che siano collegati tra loro.
- Una scheda del Play Store con un per il canale di test pubblico, chiuso o interno.
- Per creare e configurare i prodotti e gli abbonamenti della tua app sul Play Store.
- Un progetto generato dal riquadro a capo con una configurazione di Digital Asset Links funzionante.
Aggiornare il progetto Bubble wrap
Se Bubble wrap non è installato, dovrai installarlo. Consulta le Guida rapida per i dettagli su come iniziare. Se è già disponibile, assicurati assicurati di eseguire l'aggiornamento alla versione 1.8.2 o successiva.
Il pluriball ha anche la funzione dietro una bandiera. Nella
per abilitarlo, dovrai modificare la configurazione del progetto in twa-manifest.json
,
che si trova nella directory principale del progetto e abilita sia alphaDependencies
sia playBilling
funzionalità:
...,
"enableNotifications": true,
"features": {
"playBilling": {
"enabled": true
}
},
"alphaDependencies": {
"enabled": true
},
...
Con il file di configurazione aggiornato, esegui bubblewrap update
per applicare la configurazione al
seguito da bubblewrap build
, per generare un nuovo pacchetto Android e caricarlo
sul Play Store.
Funzionalità che rileva la disponibilità dell'API Digital Goods e del servizio Fatturazione Google Play
L'API Digital Goods è attualmente supportata da Chrome solo quando la PWA viene eseguita all'interno di un
Attività web attendibile ed è possibile determinare se è disponibile controllando la
getDigitalGoodsService
nell'oggetto window
:
if ('getDigitalGoodsService' in window) {
// Digital Goods API is supported!
}
L'API Digital Goods potrebbe essere disponibile in qualsiasi browser e supportare diversi negozi. Per
per controllare se il backend di un determinato store è supportato, dovrai richiamare
getDigitalGoodsService()
trasmette l'ID negozio come parametro. Il Google Play Store è identificato
in base alla stringa 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;
}
}
Recuperare i dettagli di uno SKU
L'API Digital Goods fornisce getDetails()
, che consente di recuperare informazioni come
titolo, descrizione e, soprattutto, prezzo del prodotto provenienti dal backend dei pagamenti.
Puoi quindi utilizzare queste informazioni nell'interfaccia di utilizzo e fornire ulteriori dettagli all'utente:
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);
}
Crea il flusso di acquisto
Il costruttore di una PaymentRequest utilizza due parametri: un elenco di metodi di pagamento e un elenco dati di pagamento.
Quando ti trovi nell'Attività web attendibile, devi utilizzare il metodo di pagamento tramite fatturazione di Google Play,
impostando https://play.google.com/billing
come identificatore e aggiungendo lo SKU di prodotto come
membro dati:
async function makePurchase(service, sku) {
// Define the preferred payment method and item ID
const paymentMethods = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku,
}
}];
...
}
Anche se i dettagli di pagamento sono obbligatori, il servizio Fatturazione Play ignorerà questi valori e utilizzerà i impostati durante la creazione dello SKU in Play Console, in modo che possano essere riempiti con valori fasulli:
const paymentDetails = {
total: {
label: `Total`,
amount: {currency: `USD`, value: `0`}
}
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
Chiama il show()
sull'oggetto della richiesta di pagamento per avviare il flusso di pagamento. Se la promessa ha esito positivo
il pagamento potrebbe essere andato a buon fine. Se il pagamento non va a buon fine, è probabile che l'utente abbia interrotto il pagamento.
Se la promessa ha esito positivo, dovrai verificare e confermare l'acquisto. Per proteggerti da attività fraudolente, questo passaggio deve essere implementato utilizzando il tuo backend. Consulta le Documentazione relativa alla Fatturazione Play per scoprire come implementare la verifica nel tuo backend. Se non confermi l'acquisto, dopo tre giorni, l'utente riceverà un rimborso e Google Play revocherà l'acquisto.
...
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
}
...
Facoltativamente, consume()
può essere chiamato su un purchaseToken per contrassegnare l'acquisto come esaurito e
consente di acquistarlo di nuovo.
Combinando tutti gli aspetti, un metodo di acquisto ha il seguente aspetto:
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
}
}
Controllare lo stato degli acquisti esistenti
L'API Digital Goods ti consente di verificare se l'utente ha diritti esistenti (in-app acquisti non ancora consumati o abbonamenti in corso) derivanti da acquisti precedenti che ha effettuato già effettuati, su un altro dispositivo, da un'installazione precedente, utilizzati da un codice promozionale o solo l'ultima volta che hanno aperto l'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}`);
}
Questo è anche un buon momento per controllare gli acquisti effettuati in precedenza, ma che non sono stati confermati. Ti consigliamo di confermare gli acquisti il prima possibile per assicurarti che i diritti siano riportate correttamente nella tua 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}`);
}
Testare l'integrazione
Su un dispositivo Android di sviluppo
È possibile abilitare l'API Digital Goods su un dispositivo Android di sviluppo per eseguire test:
- Assicurati di utilizzare Android 9 o versioni successive con la modalità sviluppatore attivata.
- Installa Chrome 101 o versioni successive.
- Per attivare i seguenti flag in Chrome, vai su
chrome://flags
e cerca il segnala per nome:#enable-debug-for-store-billing
- Verifica che il sito sia ospitato utilizzando un protocollo https. Se utilizzi http, l'API sarà
undefined
Su un dispositivo ChromeOS
L'API Digital Goods sarà disponibile sulla versione stabile di ChromeOS a partire dalla versione 89. Nella Nel frattempo, è possibile testare l'API Digital Goods:
- Installa l'app dal Play Store sul dispositivo.
- Verifica che il sito sia ospitato utilizzando un protocollo https. Se utilizzi http, l'API sarà
undefined
Con utenti di test e team di QA
Il Play Store fornisce gli inviti per i test, inclusi account di test degli utenti e SKU di test. Per ulteriori informazioni, consulta la documentazione relativa al test di fatturazione Google Play.
Qual è il prossimo passo?
Come discusso in questo documento, l'API Play Billing include componenti lato client, che vengono gestiti dall'API Digital Goods e dai componenti lato server.
- Dai un'occhiata all'esempio di Peter Conn su https://github.com/PEConn/beer
- Consulta la documentazione di Google Play sulla verifica dell'acquisto.
- Potresti utilizzare una delle librerie client dell'API Google Play Developer, disponibili in più lingue.
- Se implementi un modello di abbonamento nella tua applicazione, consulta il Documentazione relativa agli abbonamenti a Fatturazione Play.
- Implementa le notifiche in tempo reale per lo sviluppatore (RTDN) e iscriviti per ricevere notifiche in modo che il tuo riceve una notifica quando lo stato di una sottoscrizione cambia anziché eseguire il polling dello stato Gioca.
- Implementa
linkedPurchaseToken
per evitare abbonamenti duplicati. Leggi questo post del blog su a implementarlo correttamente.