Межстраничное объявление с вознаграждением (бета)

Межстраничное объявление с вознаграждением – это тип формата стимулирующей рекламы, который позволяет предлагать вознаграждение за рекламу, автоматически появляющуюся во время естественных переходов между приложениями. В отличие от рекламы с вознаграждением, пользователям не требуется давать согласие на просмотр межстраничной рекламы с вознаграждением.

Предварительные условия

Выполнение

Основные шаги по интеграции межстраничной рекламы с вознаграждением следующие:

  • Загрузить объявление
  • [Необязательно] Проверка обратных вызовов SSV
  • Зарегистрируйтесь для обратных звонков
  • Отобразите рекламу и обработайте событие вознаграждения

Загрузить объявление

Загрузка объявления осуществляется с помощью метода load(adUnitID:request) класса GADRewardedInterstitialAd .

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

 
private var rewardedInterstitialAd: GADRewardedInterstitialAd?

 
override func viewDidLoad() {
   
super.viewDidLoad()

   
Task {
     
do {
        rewardedInterstitialAd
= try await GADRewardedInterstitialAd.load(
          withAdUnitID
: "ca-app-pub-3940256099942544/6978759866", request: GADRequest())
     
} catch {
        print
("Failed to load rewarded interstitial ad with error: \(error.localizedDescription)")
     
}
   
}
 
}
}
import GoogleMobileAds

class RewardedInterstitialViewModel: NSObject, ObservableObject,
 
GADFullScreenContentDelegate
{
 
@Published var coins = 0
 
private var rewardedInterstitialAd: GADRewardedInterstitialAd?

 
func loadAd() async {
   
do {
      rewardedInterstitialAd
= try await GADRewardedInterstitialAd.load(
        withAdUnitID
: "ca-app-pub-3940256099942544/6978759866", request: GADRequest())
      rewardedInterstitialAd
?.fullScreenContentDelegate = self
   
} catch {
      print
(
       
"Failed to load rewarded interstitial ad with error: \(error.localizedDescription)")
   
}
 
}
#import "ViewController.h"

@interface ViewController ()
@property(nonatomic, strong) GADRewardedInterstitialAd* rewardedInterstitialAd;
@end

@implementation ViewController

- (void)viewDidLoad {
 
[super viewDidLoad];

 
[GADRewardedInterstitialAd
      loadWithAdUnitID
:@"<var label='the ad unit ID'>ca-app-pub-3940256099942544/6978759866</var>"
                request
:[GADRequest request]
      completionHandler
:^(
         
GADRewardedInterstitialAd* _Nullable rewardedInterstitialAd,
         
NSError* _Nullable error) {
       
if (!error) {
         
self.rewardedInterstitialAd = rewardedInterstitialAd;
       
}
     
}
 
];
}

[Необязательно] Проверка обратных вызовов проверки на стороне сервера (SSV).

Приложения, которым требуются дополнительные данные в обратных вызовах проверки на стороне сервера, должны использовать функцию пользовательских данных объявлений с вознаграждением. Любое строковое значение, установленное для объекта рекламы с вознаграждением, передается в параметр запроса custom_data обратного вызова SSV. Если значение настраиваемых данных не установлено, значение параметра запроса custom_data не будет присутствовать в обратном вызове SSV.

В следующем примере кода показано, как установить специальные данные для объекта межстраничной рекламы с вознаграждением перед запросом объявления.

do {
  rewardedInterstitialAd
= try await GADRewardedInterstitialAd.load(
    withAdUnitID
: "ca-app-pub-3940256099942544/6978759866", request: GADRequest())
 
let options = GADServerSideVerificationOptions()
  options
.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
  rewardedInterstitialAd
.serverSideVerificationOptions = options

} catch {
  print
("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
[GADRewardedInterstitialAd
    loadWithAdUnitID
:@"ca-app-pub-3940256099942544/6978759866"
              request
:GADRequest
    completionHandler
:^(GADRewardedInterstitialAd *ad, NSError *error) {
     
if (error) {
       
// Handle Error
       
return;
     
}
     
self.rewardedInterstitialAd = ad;
     
GADServerSideVerificationOptions *options =
         
[[GADServerSideVerificationOptions alloc] init];
      options
.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
      ad
.serverSideVerificationOptions = options;

   
}];

Зарегистрируйтесь для обратных звонков

Чтобы получать уведомления о событиях презентации, необходимо реализовать протокол GADFullScreenContentDelegate и назначить его свойству fullScreenContentDelegate возвращаемого объявления. Протокол GADFullScreenContentDelegate обрабатывает обратные вызовы при успешном или неудачном показе объявления и при его отклонении. Следующий код показывает, как реализовать протокол и назначить его объявлению:

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

 
private var rewardedInterstitialAd: GADRewardedInterstitialAd?

 
override func viewDidLoad() {
   
super.viewDidLoad()

   
Task {
     
do {
        rewardedInterstitialAd
= try await GADRewardedInterstitialAd.load(
          withAdUnitID
: "ca-app-pub-3940256099942544/6978759866", request: GADRequest())
       
self.rewardedInterstitialAd?.fullScreenContentDelegate = self
     
} catch {
        print
("Failed to load rewarded interstitial ad 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.")
 
}

}

Назначьте свойство fullScreenContentDelegate возвращаемому объявлению:

rewardedInterstitialAd?.fullScreenContentDelegate = self

Реализуйте протокол:

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 interstitial ad.
  rewardedInterstitialAd = nil
}
@interface ViewController () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADRewardedInterstitialAd *rewardedInterstitialAd;
@end

@implementation ViewController

- (void)viewDidLoad {
 
[super viewDidLoad];
 
// Do any additional setup after loading the view.

 
[GADRewardedInterstitialAd
      loadWithAdUnitID
:@"ca-app-pub-3940256099942544/6978759866"
                request
:[GADRequest request]
      completionHandler
:^(
         
GADRewardedInterstitialAd *_Nullable rewardedInterstitialAd,
         
NSError *_Nullable error) {
       
if (!error) {
         
self.rewardedInterstitialAd = rewardedInterstitialAd;
         
self.rewardedInterstitialAd.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.");
}

Отобразите рекламу и обработайте событие вознаграждения

При представлении объявления вы должны предоставить объект GADUserDidEarnRewardHandler для обработки вознаграждения для пользователя.

Следующий код представляет лучший метод отображения межстраничной рекламы с вознаграждением.

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

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

Прослушивайте события пользовательского интерфейса в представлении, чтобы отобразить рекламу.

var rewardedInterstitialBody: some View {
 
// ...
  }
 
.onChange(
    of
: showAd,
    perform
: { newValue in
     
if newValue {
        viewModel
.showAd()
     
}
   
}
 
)

Представьте межстраничное объявление с вознаграждением из модели представления:

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

  rewardedInterstitialAd
.present(fromRootViewController: nil) {
   
let reward = rewardedInterstitialAd.adReward
    print
("Reward amount: \(reward.amount)")
   
self.addCoins(reward.amount.intValue)
 
}
}
- (void)show {
 
// The UIViewController parameter is nullable.
 
[_rewardedInterstitialAd presentFromRootViewController:nil
                                userDidEarnRewardHandler
:^{

                                 
GADAdReward *reward =
                                     
self.rewardedInterstitialAd.adReward;
                                 
// TODO: Reward the user.
                               
}];
}

Примеры на GitHub

Посмотрите полные примеры межстраничных объявлений с вознаграждением на предпочитаемом вами языке:

Следующие шаги

Узнайте больше о конфиденциальности пользователей .