Sự kiện tùy chỉnh quảng cáo có tặng thưởng

Hướng dẫn này dành cho các nhà xuất bản muốn sử dụng tính năng dàn xếp AdMob để hiển thị quảng cáo có tặng thưởng trên mạng mà Google không hỗ trợ trực tiếp trong giao diện người dùng .

Sự kiện tùy chỉnh quảng cáo có tặng thưởng cho phép bạn viết bộ chuyển đổi dàn xếp tùy chỉnh để hiển thị quảng cáo có tặng thưởng từ mạng quảng cáo bên thứ ba. Trong bản hướng dẫn này, chúng tôi sẽ giới thiệu cho bạn cách viết một sự kiện tùy chỉnh để yêu cầu quảng cáo từ một SDK mẫu mà chúng tôi đã phát triển. Bạn có thể tìm thấy toàn bộ nguồn cho SDK mẫu trên GitHub.

Điều kiện tiên quyết

Trước khi có thể tích hợp các sự kiện tùy chỉnh, bạn cần tích hợp định dạng quảng cáo có tặng thưởng. Để biết hướng dẫn tích hợp định dạng quảng cáo có tặng thưởng, hãy tham khảo phần hướng dẫn về Quảng cáo có tặng thưởng.

Tạo sự kiện tùy chỉnh

Để xác định một sự kiện tùy chỉnh, trước tiên, bạn phải tạo sự kiện đó trong giao diện người dùng AdMob. Bạn có thể xem hướng dẫn tạo sự kiện tùy chỉnh trong Thêm sự kiện tùy chỉnh.

Sau khi được xác định, bộ chuyển đổi sự kiện tùy chỉnh trỏ đến một lớp trong ứng dụng sẽ triển khai giao thức GADMediationAdapter để phân phát quảng cáo có tặng thưởng. Sự kiện tùy chỉnh này cũng liệt kê một thông số máy chủ được chuyển tới bộ chuyển đổi có tặng thưởng.

Dưới đây là ảnh chụp màn hình hiển thị một số tùy chọn cài đặt của sự kiện tùy chỉnh mẫu:

Ảnh chụp màn hình có các mục nhập sau:

Tên lớp
Tên đủ điều kiện của lớp triển khai bộ chuyển đổi sự kiện tùy chỉnh.
Nhãn
Tên duy nhất để xác định nguồn quảng cáo.
Tham số
Đối số chuỗi tùy chọn được chuyển đến bộ chuyển đổi sự kiện tùy chỉnh.

Triển khai sự kiện tùy chỉnh

Sự kiện tùy chỉnh là một lớp triển khai giao thức GADMediationAdapter để phân phát quảng cáo của bên thứ ba. Bên dưới là các bước triển khai một sự kiện tùy chỉnh để yêu cầu và hiển thị quảng cáo có tặng thưởng từ Mạng quảng cáo mẫu.

Triển khai GADMediationAdapter

Để tạo sự kiện tùy chỉnh, trước tiên, bạn cần triển khai giao thức GADMediationAdapter, như thực hiện bởi lớp GADMediationAdapterSampleAdNetwork bên dưới:

#import <Foundation/Foundation.h>

@import GoogleMobileAds;
@interface GADMediationAdapterSampleAdNetwork : NSObject <GADMediationAdapter>
@end

Báo cáo lớp bổ sung

Nếu sự kiện tùy chỉnh hỗ trợ các lớp bổ sung để chỉ định các thông số bổ sung cho yêu cầu quảng cáo, thì lớp extras phải được trả về từ phương thức networkExtrasClass. Trả về Nil nếu sự kiện tùy chỉnh không hỗ trợ lớp bổ sung do nhà xuất bản cung cấp.

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (nullable Class<GADAdNetworkExtras>)networkExtrasClass {
  return Nil;
}
...
@end

Báo cáo số phiên bản

Tất cả các sự kiện tùy chỉnh phải báo cáo cho SDK quảng cáo trên thiết bị di động của Google cả phiên bản của chính sự kiện tùy chỉnh và phiên bản SDK của bên thứ ba mà sự kiện tùy chỉnh liên kết. Các phiên bản được báo cáo là GADVersionNumber:

#import "GADMediationAdapterSampleAdNetwork.h"

@implementation GADMediationAdapterSampleAdNetwork
...
+ (GADVersionNumber)adSDKVersion {
  NSString *versionString = @"1.0.0";
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
  GADVersionNumber version = {0};
  if (versionComponents.count == 3) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];
    version.patchVersion = [versionComponents[2] integerValue];
  }
  return version;
}

+ (GADVersionNumber)version {
  NSString *versionString = @"1.0.0.0";
  NSArray *versionComponents = [versionString componentsSeparatedByString:@"."];
  GADVersionNumber version = {0};
  if (versionComponents.count == 4) {
    version.majorVersion = [versionComponents[0] integerValue];
    version.minorVersion = [versionComponents[1] integerValue];

    // Adapter versions have 2 patch versions. Multiply the first patch by 100.
    version.patchVersion = [versionComponents[2] integerValue] * 100
      + [versionComponents[3] integerValue];
  }
  return version;
}
...
@end

Yêu cầu quảng cáo có tặng thưởng

Các yêu cầu do ứng dụng tạo để tải quảng cáo có tặng thưởng gọi phương thức loadRewardedAdForAdConfiguration:completionHandler: của sự kiện tùy chỉnh.

Báo cáo tải quảng cáo thành công cho SDK quảng cáo trên thiết bị di động của Google bằng cách gọi trình xử lý hoàn thành đã cung cấp với bản tham chiếu đến một đối tượng thực hiện GADMediationRewardedAd. Lệnh gọi này trả về GADMediationRewardedAdEventDelegate. Các sự kiện tùy chỉnh phải duy trì tham chiếu đến đối tượng này để thông báo cho SDK quảng cáo trên thiết bị di động của Google về các sự kiện trong vòng đời quảng cáo. Bạn có thể xem thêm chi tiết trong phần Hiển thị quảng cáo.

Để báo cáo lỗi tải quảng cáo, hãy gọi completionHandler được cung cấp có đối tượng NSError.

Dưới đây là ví dụ về cách triển khai loadRewardedAdForAdConfiguration:completionHandler::

#import "GADMediationAdapterSampleAdNetwork.h"

@interface GADMediationAdapterSampleAdNetwork () <GADMediationRewardedAd> {
  /// Reward-based video ads from Sample SDK.
  SampleRewardBasedVideo *_rewardBasedVideoAd;
}
@property(nonatomic, weak, nullable) id<GADMediationRewardedAdEventDelegate> delegate;
@end
@implementation GADMediationAdapterSampleAdNetwork
...
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
                       completionHandler:(GADRewardedLoadCompletionHandler)completionHandler {
  // Look for the "parameter" key to fetch the parameter you defined in the AdMob UI.
  NSString *adUnit = adConfiguration.credentials.settings[@"parameter"];
  SampleAdRequest *request = [[SampleAdRequest alloc] init];
  [SampleAdNetwork loadAdWithRequest:request
                   completionHandler:^(SampleRewardBasedVideo *ad ,NSError *error) {
    if (error) {
      completionHandler(nil, error);
      return;
    }
    _rewardBasedVideoAd = ad;
    self.delegate = completionHandler(self, nil);
  }];
}
...
@end

Hiển thị quảng cáo

Khi ứng dụng yêu cầu SDK quảng cáo trên thiết bị di động của Google hiển thị quảng cáo có tặng thưởng, SDK sẽ gọi phương thức presentFromViewController: trên bản sao của GADMediationRewardedAd. Hãy thực hiện phương pháp này để hiển thị quảng cáo có tặng thưởng.

- (void)presentFromViewController:(nonnull UIViewController *)viewController {
  if ([_rewardBasedVideoAd checkAdAvailability]) {
    // The reward based video ad is available, present the ad.
    [_rewardBasedVideoAd presentFromRootViewController:viewController];
  } else {
    NSError *error =
      [NSError errorWithDomain:@"GADMediationAdapterSampleAdNetwork"
                          code:0
                      userInfo:@{NSLocalizedDescriptionKey : @"Unable to display ad."}];
    [self.delegate didFailToPresentWithError:error];
  }
}

Báo cáo sự kiện quảng cáo

Sau khi hiển thị quảng cáo, sự kiện tùy chỉnh sẽ báo cáo các sự kiện trong vòng đời quảng cáo phù hợp với SDK quảng cáo trên thiết bị di động của Google bằng cách sử dụng GADMediationRewardedAdEventDelegate được cung cấp khi tải quảng cáo thành công.

- (void)rewardBasedVideoAdDidOpen:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate willPresentFullScreenView];
  [self.delegate reportImpression];
}

- (void)rewardBasedVideoAdDidStartPlaying:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate didStartVideo];
}

- (void)rewardBasedVideoAdDidStopPlaying:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate didEndVideo];
}

- (void)rewardBasedVideoAdDidClose:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate willDismissFullScreenView];
}

- (void)rewardBasedVideoAdDidReceiveAdClick:(SampleRewardBasedVideo *)rewardBasedVideo {
  [self.delegate reportClick];
}

- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd userDidEarnReward:(NSUInteger)reward {
  GADAdReward *aReward =
      [[GADAdReward alloc] initWithRewardType:@""
                                 rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
  [self.delegate didRewardUserWithReward:aReward];
}
}

Dưới đây là thông tin chi tiết về các sự kiện quảng cáo phải được báo cáo cho SDK quảng cáo trên thiết bị di động của Google:

Sự kiện quảng cáo Nội dung mô tả
willPresentFullScreenView Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo sẽ được hiển thị.
didStartVideo Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo có tặng thưởng bắt đầu phát.
reportImpression Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng đã có một lần hiển thị trên quảng cáo.
didEndVideo Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo có tặng thưởng đã phát xong.
didRewardUserWithReward Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng người dùng đã được tặng thưởng.
reportClick Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng đã có lần nhấp quảng cáo.
willDismissFullScreenView Thông báo cho SDK quảng cáo trên thiết bị di động của Google rằng quảng cáo sẽ bị đóng.