Anzeigen mit Prämie

Anzeigen mit Prämie sind Anzeigen, mit denen Nutzer im Austausch mit ihnen interagieren können. für In-App-Prämien. Dieser Leitfaden zeigt Ihnen, wie Sie Anzeigen mit Prämie aus AdMob in einer iOS-App. Lesen Sie einige Erfolgsgeschichten von Kunden: Fallstudie 1, Fallstudie 2.

Vorbereitung

  • Google Mobile Ads SDK 8.0.0 oder höher.
  • Arbeiten Sie den Startleitfaden durch.

Verwenden Sie immer Testanzeigen

Verwenden Sie beim Entwickeln und Testen Ihrer Apps nur Testanzeigen, Live-Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.

Die einfachste Methode zum Laden von Testanzeigen ist die Verwendung unserer Testanzeigenblock-ID für iOS. Anzeigen mit Prämie:

ca-app-pub-3940256099942544/1712485313

Es wurde speziell so konfiguriert, dass für jede Anfrage Testanzeigen zurückgegeben werden. Sie können es in Ihren eigenen Apps verwenden, während Sie Code schreiben, testen und debuggen. Machen Sie einfach ersetzen Sie sie vor dem Veröffentlichen Ihrer App durch Ihre Anzeigenblock-ID.

Weitere Informationen zur Funktionsweise von Testanzeigen im Mobile Ads SDK finden Sie unter Testanzeigen.

Implementierung

Die wichtigsten Schritte beim Einbinden von Anzeigen mit Prämie:

  • Anzeige laden
  • [Optional] SSV-Callbacks prüfen
  • Für Rückrufe registrieren
  • Anzeige einblenden und Prämienereignis bearbeiten

Anzeige laden

Das Laden einer Anzeige erfolgt über den load(adUnitID:request) für die Klasse GADRewardedAd.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() async {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
    } catch {
      print("Rewarded ad failed to load with error: \(error.localizedDescription)")
    }
  }
}

SwiftUI

import GoogleMobileAds

class RewardedViewModel: NSObject, ObservableObject, GADFullScreenContentDelegate {
  @Published var coins = 0
  private var rewardedAd: GADRewardedAd?

  func loadAd() async {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load rewarded ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
      loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
      }];
}

[Optional] Callbacks für die serverseitige Überprüfung validieren

Apps, die zusätzliche Daten serverseitig Verifizierung Callbacks die Methode Datenfunktion von Anzeigen mit Prämie. Beliebiger Stringwert, der in einer Anzeige mit Prämie festgelegt ist wird an den custom_data-Abfrageparameter des SSV-Callbacks übergeben. Falls nein festgelegt ist, ist der Wert des Suchparameters custom_data nicht gleich im SSV-Callback vorhanden sind.

Im folgenden Codebeispiel wird gezeigt, wie Sie benutzerdefinierte Daten für ein Objekt mit Anzeigen mit Prämie festlegen, bevor Sie eine Anzeige anfordern.

Swift

do {
  rewardedAd = try await GADRewardedAd.load(
    withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
  let options = GADServerSideVerificationOptions()
  options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
  rewardedAd.serverSideVerificationOptions = options
} catch {
  print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}

Objective-C

[GADRewardedAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              request:[GADRequest request];
    completionHandler:^(GADRewardedAd *ad, NSError *error) {
      if (error) {
        // Handle Error
        return;
      }
      self.rewardedAd = ad;
      GADServerSideVerificationOptions *options =
          [[GADServerSideVerificationOptions alloc] init];
      options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad.serverSideVerificationOptions = options;
    }];

Für Rückrufe registrieren

Um Benachrichtigungen über Präsentationsereignisse zu erhalten, müssen Sie das Protokoll GADFullScreenContentDelegate und weisen Sie es dem fullScreenContentDelegate-Eigenschaft der zurückgegebenen Anzeige. Die Das GADFullScreenContentDelegate-Protokoll verarbeitet Rückrufe, wenn die Anzeige erfolgreich oder nicht erfolgreich präsentiert und wenn sie geschlossen wird. Die folgenden Code veranschaulicht, wie das Protokoll implementiert und der Anzeige zugewiesen wird:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() async {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Rewarded ad failed to load with error: \(error.localizedDescription)")
    }
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

SwiftUI

Weisen Sie der zurückgegebenen Anzeige das Attribut fullScreenContentDelegate zu:

rewardedAd?.fullScreenContentDelegate = self

Implementieren Sie das Protokoll:

func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: GADFullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the rewarded ad.
  rewardedAd = nil
}

Objective-C

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GADRewardedAd *rewardedAd;

@end

@implementation ViewController
- (void)loadRewardedAd {
  GADRequest *request = [GADRequest request];
  [GADRewardedAd
      loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
                request:request
      completionHandler:^(GADRewardedAd *ad, NSError *error) {
        if (error) {
          NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
          return;
        }
        self.rewardedAd = ad;
        NSLog(@"Rewarded ad loaded.");
        self.rewardedAd.fullScreenContentDelegate = self;
      }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
    didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad did dismiss full screen content.");
}

GADRewardedAd ist ein Objekt zur einmaligen Verwendung. Das bedeutet, dass eine Anzeige mit Prämie, die einmal ausgeliefert wurde, nicht noch einmal ausgeliefert werden kann. Es empfiehlt sich, eine weitere Anzeige mit Prämie zu laden, in der Methode adDidDismissFullScreenContent: für GADFullScreenContentDelegate sodass die nächste Anzeige mit Prämie geladen wird, geschlossen.

Anzeige einblenden und Prämienereignis bearbeiten

Bevor Sie Nutzern eine Anzeige mit Prämie präsentieren, müssen Sie ihnen die Möglichkeit geben, sich Anzeigeninhalte mit Prämie anzusehen. Anzeigen mit Prämie müssen immer optional sein.

Bei der Präsentation Ihrer Anzeige müssen Sie ein GADUserDidEarnRewardHandler-Objekt angeben für den Umgang mit der Prämie.

Der folgende Code stellt die beste Methode zum Ausliefern einer Anzeige mit Prämie dar.

Swift

func show() {
  guard let rewardedAd = rewardedAd else {
    return print("Ad wasn't ready.")
  }

  // The UIViewController parameter is an optional.
  ad.present(fromRootViewController: nil) {
    let reward = ad.adReward
    print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
    // TODO: Reward the user.
  }
}

SwiftUI

Überwachen Sie UI-Ereignisse in der Ansicht, um zu bestimmen, wann die Anzeige geschaltet werden soll.

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

So präsentieren Sie die Anzeige mit Prämie aus dem Ansichtsmodell:

func showAd() {
  guard let rewardedAd = rewardedAd else {
    return print("Ad wasn't ready.")
  }

  rewardedAd.present(fromRootViewController: nil) {
    let reward = rewardedAd.adReward
    print("Reward amount: \(reward.amount)")
    self.addCoins(reward.amount.intValue)
  }
}

Objective-C

- (void)show {
  if (self.rewardedAd) {
    // The UIViewController parameter is nullable.
    [self.rewardedAd presentFromRootViewController:nil
                                  userDidEarnRewardHandler:^{
                                  GADAdReward *reward =
                                      self.rewardedAd.adReward;
                                  // TODO: Reward the user!
                                }];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

FAQ

Kann ich die Prämiendetails für die GADRewardedAd erhalten?
Ja, wenn Sie den Prämienbetrag vor dem userDidEarnReward-Rückruf benötigen ausgelöst wird, GADRewardedAd hat eine adReward Property, mit der Sie den Prämienbetrag überprüfen können, nachdem die Anzeige geladen wurde.
Gibt es eine Zeitüberschreitung für den Initialisierungsaufruf?
Nach 10 Sekunden ruft das Google Mobile Ads SDK die GADInitializationCompletionHandler wurden dem startWithCompletionHandler:-Methode verwenden, auch wenn ein Vermittlungsnetzwerk die Initialisierung abgeschlossen.
Was passiert, wenn einige Vermittlungsnetzwerke nicht bereit sind, wenn ich den Initialisierungs-Callback erhalte?

Wir empfehlen, eine Anzeige im GADInitializationCompletionHandler Auch wenn ein Vermittlungsnetzwerk nicht bereit ist, fordert das Google Mobile Ads SDK das Werbenetzwerk weiterhin nach einer Anzeige an. Wenn also ein Die Initialisierung des Vermittlungsnetzwerks ist nach dem Zeitlimit abgeschlossen, es kann jedoch weiterhin für zukünftige Anzeigenanfragen in dieser Sitzung.

Sie können den Initialisierungsstatus aller Adapter durchgehend abfragen App-Sitzung durch Aufrufen von GADMobileAds.initializationStatus.

Wie finde ich heraus, warum ein bestimmtes Vermittlungsnetzwerk nicht bereit ist?

Die Eigenschaft description eines GADAdapterStatus-Objekts beschreibt, warum ein Der Adapter ist nicht für die Bearbeitung von Anzeigenanfragen bereit.

Wird der Abschluss-Handler userDidEarnRewardHandler immer vor der Delegatmethode adDidDismissFullScreenContent: aufgerufen?

Bei Google Ads erfolgen alle userDidEarnRewardHandler-Aufrufe. vor dem adDidDismissFullScreenContent:. Für Anzeigen, die über mediation, das Drittanbieter-Werbenetzwerk Die Callback-Reihenfolge wird von der Implementierung des SDKs bestimmt. Für Werbenetzwerk-SDKs, die eine einzelne delegierte Methode mit Prämieninformationen bereitstellen, kann der Vermittlungsadapter Ruft userDidEarnRewardHandler vor adDidDismissFullScreenContent: auf.

Beispiele auf GitHub

Vollständige Beispiele für Anzeigen mit Prämie in Ihrer bevorzugten Sprache ansehen:

Nächste Schritte

Weitere Informationen zum Datenschutz für Nutzer