Aggiungere funzionalità specifiche dei prodotti premio

Un metodo per sbloccare prodotti e vantaggi in-app per i tuoi utenti è creare prodotti con premio, ovvero articoli che gli utenti ricevono dopo aver guardato un annuncio video. Fornendo prodotti con premio, consenti agli utenti di ottenere premi e vantaggi in-app senza dover effettuare acquisti diretti.

Questo documento spiega come implementare la funzionalità specifica per i prodotti con premio. La sezione Diagramma del flusso di lavoro di questa pagina illustra la procedura.

Identificare i prodotti con premio della tua app

I prodotti con premio hanno un SkuType di INAPP. Per garantire che gli utenti possano guardare più annunci e ricevere più premi, i prodotti devono essere consumati.

Prima di poter offrire un prodotto con premio a un utente, devi ottenere il SkuDetails per il prodotto. Per farlo, chiama querySkuDetailsAsync() con SkuType.INAPP come tipo di prodotto.

Dichiarare gli annunci adatti all'età

Per facilitare la conformità alle obbligazioni legali relative ai bambini e agli utenti minorenni, tra cui il Children's Online Privacy Protection Act (COPPA) e il Regolamento generale sulla protezione dei dati (GDPR), la tua app deve dichiarare quali annunci devono essere considerati destinati ai bambini negli Stati Uniti e quali sono rivolti a utenti di età inferiore alla soglia di età per il consenso valida nel loro paese. Il Centro assistenza AdMob spiega quando devi eseguire il tagging delle richieste di annunci per il trattamento per siti o servizi destinati ai minori e quando devi eseguire il tagging per il trattamento per utenti di età inferiore all'età del consenso, nonché gli effetti di questa operazione.

Quando crei il client di fatturazione dell'app, valuta se le richieste di annunci con premio devono essere trattate come destinate ai minori o se devono essere indirizzate a utenti di età inferiore a quella richiesta nel tuo paese. Se le richieste di annunci devono avere queste limitazioni, chiama i metodi setChildDirected() e setUnderAgeOfConsent(), passando i valori appropriati a ciascun metodo.

Il seguente snippet di codice mostra come dichiarare che gli annunci video devono essere adatti ai bambini o agli utenti di età inferiore a quella del consenso digitale:

Kotlin

val billingClient = BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build()

Java

BillingClient billingClient =
    BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build();

Caricare gli annunci video

Prima di mostrare all'utente la possibilità di guardare un annuncio video per ricevere un prodotto con premio, devi caricare il video. A tale scopo, crea un oggetto RewardLoadParams associandolo all'oggetto SkuDetails che rappresenta il prodotto con premio. Quindi, chiama il metodo loadRewardedSku() del tuo client di fatturazione, passando l'oggetto RewardLoadParams e un RewardResponseListener oggetto.

L'ascoltatore di RewardResponseListener riceve una notifica al termine del caricamento del video. L'ascoltatore riceve una notifica anche se il video non è disponibile o se si verifica un altro errore, ad esempio un timeout del server.

Per mantenere il rendimento del dispositivo durante il caricamento dei video associati ai prodotti con premio della tua app, tieni presente le seguenti best practice:

  • Carica al massimo tre SKU di prodotto con premio alla volta.
  • Prova a caricare i video ogni volta che l'utente accede alla tua app. Questo passaggio ti consente di verificare se i video sono ancora caricati e disponibili.
  • Quando decidi quando caricare i video, scegli il giusto equilibrio tra utilizzo della larghezza di banda e reattività dell'app in base al tuo caso d'uso:

    • Carica i video al più presto dopo aver chiamato getSkuDetails() per il prodotto con premio associato. La tua app rimane molto reattiva, ma potresti sprecare dati di rete caricando un video che l'utente non guarda mai.
    • Carica il video al massimo quando l'utente accede alla pagina in cui deve essere visualizzato. In questo caso, la tua app spreca raramente la larghezza di banda, ma l'utente potrebbe dover attendere qualche istante prima che il pulsante per guardare il video diventi cliccabile.

Lo snippet di codice riportato di seguito mostra la procedura per caricare un annuncio video che viene riprodotto prima che l'utente riceva il prodotto con premio:

Kotlin

if (skuDetails.isRewarded()) {
    val params = RewardLoadParams.Builder()
            .setSkuDetails(skuDetails)
            .build()
    mBillingClient.loadRewardedSku(params.build(),
            object : RewardResponseListener {
        override fun onRewardResponse(@BillingResponse responseCode : Int) {
            if (responseCode == BillingResponse.OK) {
                // Enable the reward product, or make
                // any necessary updates to the UI.
            }
        }
    })
}

Java

if (skuDetails.isRewarded()) {
    RewardLoadParams.Builder params = RewardLoadParams.newBuilder();
    params.setSkuDetails(skuDetails);
    mBillingClient.loadRewardedSku(params.build(),
        new RewardResponseListener() {
            @Override
            public void onRewardResponse(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                      // Enable the reward product, or make
                      // any necessary updates to the UI.
                  }
            }
        });
}

Offrire acquisti con premio agli utenti

Se la Libreria Fatturazione Google Play carica correttamente il video associato a un prodotto con premio, ovvero se il RewardResponseListener riceve un responseCode di BillingResponse.OK, puoi avviare il flusso di fatturazione.

Per iniziare a pubblicare annunci per un prodotto con premio, chiama launchBillingFlow(), come faresti per tutti gli altri tipi di prodotti in-app. Anche se l'utente non effettua un acquisto diretto per ricevere un prodotto con premio, devi comunque attivare il flusso di fatturazione in modo che possa ottenere e utilizzare il prodotto.

Utilizzare l'acquisto

Per notificare al tuo cliente di fatturazione che un utente ha ricevuto e utilizzato un prodotto con premio, gestisci l'acquisto nel metodo onPurchasesUpdated() dell'ascoltatore del cliente di fatturazione. Tieni presente che gli acquisti con premio devono essere consumati.

Testare i prodotti con premio

Per testare il modo in cui la tua app carica gli annunci video e offre agli utenti prodotti con premio, utilizza i tester autorizzati, che per impostazione predefinita ricevono annunci di prova anziché annunci reali. Per scoprire come configurare gli account per questi tester, consulta Testare un'app di Fatturazione Google Play.

Un altro metodo di test consiste nell'utilizzare l'ID prodotto android.test.reward. Questo prodotto specifico è un nome riservato in Google Play Billing, pertanto non è necessario aggiungerlo all'elenco dei prodotti in-app in Play Console.

Attenzione: quando testi i prodotti con premio della tua app, non utilizzare prodotti effettivi; in caso contrario, il tuo account potrebbe essere segnalato come spam o fraudolento.

Al termine del test, però, assicurati di sostituire android.test.reward con gli ID prodotto dei tuoi prodotti con premi effettivi prima di eseguire il deployment dell'app di produzione per gli utenti finali.

Diagramma del flusso di lavoro dei prodotti con premio

Il seguente diagramma di sequenza mostra come l'utente, la tua app e la Libreria Fatturazione Google Play interagiscono per mostrare un annuncio video e concedere all'utente l'accesso a un prodotto con premio:

Diagramma di sequenza che mostra il protocollo dei prodotti-premio
Figura 1. Procedura per completare un acquisto di un prodotto con premio tramite Fatturazione Google Play