Gli annunci con premio sono annunci con cui gli utenti hanno la possibilità di interagire in cambio di premi in-app. Questa guida mostra come integrare gli annunci con premio di AdMob in un'app per iOS. Leggi alcune storie di successo dei clienti: case study 1, case study 2.
Prerequisiti
Prima di continuare, configura Google Mobile Ads SDK.
Esegui sempre i test con gli annunci di prova
Durante la creazione e il test delle tue app, assicurati di utilizzare annunci di prova anziché annunci di prodotto. In caso contrario, il tuo account potrebbe essere sospeso.
Il modo più semplice per caricare gli annunci di prova è utilizzare il nostro ID unità pubblicitaria di test dedicato per gli annunci con premio per iOS:
ca-app-pub-3940256099942544/1712485313
È stato configurato appositamente per restituire annunci di prova per ogni richiesta e puoi utilizzarlo liberamente nelle tue app durante la programmazione, i test e il debug. Assicurati di sostituirlo con l'ID unità pubblicitaria prima di pubblicare l'app.
Per saperne di più sul funzionamento degli annunci di prova di Google Mobile Ads SDK, consulta Annunci di prova.
Implementazione
I passaggi principali per integrare gli annunci con premio sono i seguenti:
- Carica un annuncio
- [Facoltativo] Convalida i callback SSV
- Registrati per i callback
- Mostra l'annuncio e gestisci l'evento premio
Carica un annuncio
Il caricamento di un annuncio viene eseguito utilizzando il metodo load(adUnitID:request) nella classe GADRewardedAd.
Swift
func loadRewardedAd() async {
do {
rewardedAd = try await RewardedAd.load(
// Replace this ad unit ID with your own ad unit ID.
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: RewardedAd?
func loadAd() async {
do {
rewardedAd = try await RewardedAd.load(
with: "ca-app-pub-3940256099942544/1712485313", request: Request())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad with error: \(error.localizedDescription)")
}
}
Objective-C
// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest request]
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
return;
}
self.rewardedAd = ad;
self.rewardedAd.fullScreenContentDelegate = self;
}];
[Facoltativo] Convalida i callback di verifica lato server (SSV)
Le app che richiedono dati aggiuntivi nei callback di verifica lato server devono utilizzare la funzionalità dei dati personalizzati degli annunci con premio. Qualsiasi valore di stringa impostato su un oggetto annuncio con premio viene passato al parametro di query custom_data del callback SSV. Se non viene impostato alcun valore dei dati personalizzati, il valore del parametro di query custom_data non sarà presente nel callback SSV.
Il seguente esempio di codice mostra come impostare dati personalizzati su un oggetto annuncio con premio prima di richiedere un annuncio:
Swift
Objective-C
Sostituisci SAMPLE_CUSTOM_DATA_STRING con i tuoi dati personalizzati.
Registrati per i callback
Per ricevere notifiche per gli eventi di presentazione, devi assegnare
GADFullScreenContentDelegate alla proprietà fullScreenContentDelegate dell'annuncio
restituito:
Swift
rewardedAd?.fullScreenContentDelegate = self
SwiftUI
rewardedAd?.fullScreenContentDelegate = self
Objective-C
self.rewardedAd.fullScreenContentDelegate = self;
Il protocollo GADFullScreenContentDelegate gestisce i callback per i casi in cui l'annuncio viene presentato correttamente o meno e quando viene ignorato. Il seguente codice mostra come implementare il protocollo:
Swift
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called.")
// Clear the rewarded ad.
rewardedAd = nil
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called with error: \(error.localizedDescription).")
}
SwiftUI
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
Objective-C
- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
// Clear the rewarded ad.
self.rewardedAd = nil;
}
- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}
Mostra l'annuncio e gestisci l'evento premio
Prima di mostrare un annuncio con premio agli utenti, devi presentare loro una scelta esplicita per visualizzare i contenuti dell'annuncio con premio in cambio di un premio. Gli annunci con premio devono sempre essere un'esperienza basata sull'attivazione.
Quando presenti l'annuncio, devi fornire un oggetto GADUserDidEarnRewardHandler per gestire il premio per l'utente.
Il seguente codice presenta il metodo migliore per mostrare un annuncio con premio:
Swift
rewardedAd.present(from: self) {
let reward = rewardedAd.adReward
print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
// TODO: Reward the user.
}
SwiftUI
Ascolta gli eventi della UI nella visualizzazione per determinare quando mostrare l'annuncio.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
Presenta l'annuncio con premio dal modello di visualizzazione:
func showAd() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
rewardedAd.present(from: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
Objective-C
[self.rewardedAd presentFromRootViewController:self
userDidEarnRewardHandler:^{
GADAdReward *reward = self.rewardedAd.adReward;
NSString *rewardMessage = [NSString
stringWithFormat:@"Reward received with currency %@ , amount %lf",
reward.type, [reward.amount doubleValue]];
NSLog(@"%@", rewardMessage);
// TODO: Reward the user.
}];
Domande frequenti
- Posso avere i dettagli del premio per
GADRewardedAd? - Sì, se hai bisogno dell'importo della ricompensa prima del
userDidEarnRewardviene eseguita la callback,GADRewardedAdha unadRewardproprietà che puoi controllare per verificare l'importo del premio dopo il caricamento dell'annuncio. - Esiste un timeout per la chiamata di inizializzazione?
- Dopo 10 secondi, Google Mobile Ads SDK richiama il metodo
GADInitializationCompletionHandlerfornito al metodostartWithCompletionHandler:, anche se una rete di mediazione non ha ancora completato l'inizializzazione. - Cosa succede se alcune reti di mediazione non sono pronte quando ricevo il callback di inizializzazione?
Ti consigliamo di caricare un annuncio all'interno di
GADInitializationCompletionHandler. Anche se una rete di mediazione non è pronta, Google Mobile Ads SDK richiede comunque un annuncio a quella rete. Pertanto, se una rete di mediazione termina l'inizializzazione dopo il timeout, può comunque gestire le richieste di annunci future in quella sessione.Puoi continuare a eseguire il polling dello stato di inizializzazione di tutti gli adattatori durante la sessione dell'app chiamando
GADMobileAds.initializationStatus.- Come faccio a sapere perché una determinata rete di mediazione non è pronta?
La proprietà
descriptiondi un oggettoGADAdapterStatusdescrive il motivo per cui un adattatore non è pronto per gestire le richieste di annunci.- Il gestore del completamento
userDidEarnRewardHandlerviene sempre chiamato prima del metodo delegatoadDidDismissFullScreenContent:? Per gli annunci Google, tutte le chiamate
userDidEarnRewardHandlervengono eseguite prima diadDidDismissFullScreenContent:. Per gli annunci pubblicati tramite la mediazione, l'implementazione dell'SDK della rete pubblicitaria di terze parti determina l'ordine di callback. Per gli SDK delle reti pubblicitarie che forniscono un singolo metodo delegato con informazioni sul premio, l'adattatore di mediazione richiamauserDidEarnRewardHandlerprima diadDidDismissFullScreenContent:.
Esempi su GitHub
Visualizza gli esempi completi di annunci con premio nella tua lingua preferita:
Passaggi successivi
Scopri di più sulla privacy dell'utente.