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 Ad Manager in einer iOS-App.

Vorbereitung

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

Immer mit Testanzeigen testen

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:

/21775744923/example/rewarded

Sie wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. können Sie es beim Programmieren, Testen und Debuggen in Ihren eigenen Apps verwenden. Machen Sie einfach ersetzen Sie sie vor dem Veröffentlichen Ihrer App durch Ihre Anzeigenblock-ID.

Weitere Informationen zur Funktionsweise von Testanzeigen des Mobile Ads SDK finden Sie unter Test Anzeigen:

Implementierung

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

  • Anzeige laden
  • [Optional] SSV-Callbacks validieren
  • 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: "/21775744923/example/rewarded", request: GAMRequest())
    } 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 {
  GAMRequest *request = [GAMRequest request];
  [GADRewardedAd
      loadWithAdUnitID:@"/21775744923/example/rewarded"
                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 benutzerdefinierte Daten für eine Anzeige mit Prämie festgelegt werden. -Objekt enthält, bevor eine Anzeige angefordert wird.

Swift

do {
  rewardedAd = try await GADRewardedAd.load(
    withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
  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:@"/21775744923/example/rewarded"
              request:[GAMRequest 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 Callbacks 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: "/21775744923/example/rewarded", request: GAMRequest())
      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 {
  GAMRequest *request = [GAMRequest 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. Sobald eine Anzeige mit Prämie angezeigt wird, kann er nicht erneut angezeigt werden. 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 Nutzern eine Anzeige mit Prämie präsentiert wird, müssen Sie eine ausdrückliche Wahlmöglichkeit, sich Inhalte von Anzeigen mit Prämie als Gegenleistung für eine Prämie anzusehen. Mit Prämie Anzeigen müssen immer von Google aktiviert werden.

Wenn Sie Ihre Anzeige präsentieren, müssen Sie ein GADUserDidEarnRewardHandler-Objekt angeben, um die Prämie für den Nutzer zu verarbeiten.

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 abrufen?
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 für die Methode startWithCompletionHandler: angegebene GADInitializationCompletionHandler auf, auch wenn die Initialisierung eines Vermittlungsnetzwerks noch nicht abgeschlossen ist.
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 description-Eigenschaft eines GADAdapterStatus-Objekts gibt an, warum ein Adapter nicht bereit ist, Anzeigenanfragen zu bearbeiten.

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