Rewarded Ad

1. 基本要求

  • ADX iOS SDK添加到项目中。

  • 请使用为 Rewarded Ad 发放的 Ad Unit ID。

  • 在请求广告之前 SDK 初始化请先进行。

    • SDK 初始化请在应用运行时只调用一次,并且 广告请求必须在初始化完成后进行。

    • 如果支持 iOS 14 及以上, ATT(应用追踪透明性) 权限请求完成后再请求广告。

2. 实现

Rewarded Ad加载可能需要时间,建议提前加载后再使用。

  1. 使用 initWithAdUnitId: 方法实例化 ADXRewardedAd,并注册 ADXRewardedAdDelegate callback。

  2. 调用 loadAd以加载广告。

  3. isLoaded 在确认是否有要显示的广告后, showAdFromRootViewController:用于展示广告。

  4. 当广告观看全部完成时, ADXRewardedAdDelegaterewardedAdDidRewardUser:withReward:会被调用, rewardedAdDidRewardUser:withReward:当被调用时请处理为发放奖励。

#import <ADXLibrary/ADXRewardedAd.h>

@interface RewardedAdViewController () <ADXRewardedAdDelegate>

@property (strong) ADXRewardedAd *rewardedAd;

@end

@implementation RewardedAdViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.rewardedAd = [[ADXRewardedAd alloc] 
        initWithAdUnitId:@"<ADX_REWARDED_AD_UNIT_ID>"];
    self.rewardedAd.delegate = self;
}

- (IBAction)loadAd:(id)sender {
    [self.rewardedAd loadAd];
}

- (IBAction)showAd:(id)sender {
    if (self.rewardedAd.isLoaded) {
        [self.rewardedAd showAdFromRootViewController:self];
    }
}

#pragma mark - ADXRewardedAdDelegate

- (void)rewardedAdDidLoad:(ADXRewardedAd *)rewardedAd {
    NSLog(@"rewardedAdDidLoad");
}

- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToLoadWithError:(NSError *)error {
    NSLog(@"rewardedAd:didFailToLoadWithError: %@", error);
}

- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToShowWithError:(NSError *)error {
    NSLog(@"rewardedAd:didFailToShowWithError: %@", error);
}
- (void)rewardedAdWillPresentScreen:(ADXRewardedAd *)rewardedAd {
    NSLog(@"rewardedAdWillPresentScreen");
}

- (void)rewardedAdDidClick:(ADXRewardedAd *)rewardedAd {
    NSLog(@"rewardedAdDidClick");
}

- (void)rewardedAdWillDismissScreen:(ADXRewardedAd *)rewardedAd {
    NSLog(@"rewardedAdWillDismissScreen");
}

- (void)rewardedAdDidDismissScreen:(ADXRewardedAd *)rewardedAd {
    NSLog(@"rewardedAdDidDismissScreen");
}

- (void)rewardedAdDidRewardUser:(ADXRewardedAd *)rewardedAd withReward:(ADXReward *)reward {
    NSLog(@"rewardedAdDidRewardUser");
}

3. Callback

通过设置 ADXRewardedAdDelegate 可以接收特定事件。

- (void)rewardedAdDidLoad:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdWillPresentScreen:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdDidClick:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdWillDismissScreen:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdDidDismissScreen:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdDidRewardUser:(ADXRewardedAd *)rewardedAd 
    withReward:(ADXReward *)reward;
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd 
    didFailToLoadWithError:(NSError *)error;
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd 
    didFailToShowWithError:(NSError *)error;

4. Ad Revenue (paidEventHandler)

您可以查看广告展示的预估广告收入。

  • 如下示例所示, 使用 paidEventHandler 可以确认预估的 eCPM 值。

  • 在中介设置过程中手动设置的值与精确值混合, 建议将其用作预估值

  • eCPM 的货币单位为 USD。

  • 可以将广告收入数据与 MMP 对接。详细信息请参阅下面的 SDK 对接指南。

#import <UIKit/UIKit.h>
#import <ADXLibrary/ADXInterstitialAd.h>
#import <FirebaseAnalytics/FirebaseAnalytics.h>
#import <AppsFlyerAdRevenue/AppsFlyerAdRevenue.h>

@interface RewardedViewController () <ADXRewardedAdDelegate>
@property (strong) ADXRewardedAd *rewardedAd;
@end

@implementation RewardedViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.rewardedAd = [[ADXRewardedAd alloc] 
        initWithAdUnitId:@"<ADX_REWARDED_AD_UNIT_ID>"];
                                
    self.rewardedAd.delegate = self;
    
    __weak typeof(self) weakSelf = self;
    self.rewardedAd.paidEventHandler = ^(double eCPM) {
        __strong typeof(self) strongSelf = weakSelf;
        if(!strongSelf) { return; }
        NSNumber * revenue = [NSNumber numberWithDouble:eCPM/1000];
        [strongSelf handleAdRevenue:revenue];
    };
}

- (void)handleAdRevenue:(NSNumber *)revenue {
    // 1) Firebase Analytics
    [FIRAnalytics logEventWithName:kFIREventAdImpression
                        parameters: @{
        kFIRParameterAdPlatform: @"AD(X)",
        kFIRParameterAdFormat: @"RewardedAd",
        kFIRParameterAdUnitName: @"ADX Rewarded Ad",
        kFIRParameterCurrency: @"USD",
        kFIRParameterValue: revenune
    }];
        
    // 2) AppsFlyer
    NSDictionary * adRevenueParams = @{
        @"AdUnitName" : @"ADX Rewarded Ad",
        @"AdType" : @"RewardedAd",
    };
    
    AppsFlyerAdRevenue * appsFlyerAdRevenue = [AppsFlyerAdRevenue shared];
    [appsFlyerAdRevenue 
        logAdRevenueWithMonetizationNetwork:@"AD(X)"
        mediationNetwork:AppsFlyerAdRevenueMediationNetworkTypeCustom
        eventRevenue:revenune
        revenueCurrency:@"USD"
        additionalParameters:adRevenueParams];
}

#pragma mark - ADXRewardedAdDelegate
- (void)rewardedAdDidLoad:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToLoadWithError:(NSError *)error {}
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToShowWithError:(NSError *)error {}
- (void)rewardedAdWillPresentScreen:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdDidClick:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdWillDismissScreen:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdDidDismissScreen:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdDidRewardUser:(ADXRewardedAd *)rewardedAd withReward:(ADXReward *)reward {}

@end

5. SSV (Server-side verification) 设置

  • SSV 设置是可选项,仅在需要时才可进行设置和使用。

  • SSV 设置是为了在发生奖励事件时向开发者注册的 Callback URL进行 Server to Server 方式的调用而进行的设置。

  • 关于 SSV 设置的调用条件如下。

    • 必须通过仪表板 Rewarded Video 类型中 Callback URL 已注册。

    • 在视频观看完成后必须发生奖励事件。

    • 如有需要,请在广告请求之前通过 SDK 设置 User IDCustom Data 信息。

  • 客户端设置的User IDCustom Data 信息如果存在, Callback URL将包含在调用中发送。

    • (示例)https://callback_url?param=value&userid=<valule>&customdata=<value>

    • 该设置必须在广告请求之前调用,才能正确将数据 Callback URL包含在内。

// SSV 设置 (optional)
[self.rewardedAd setSSVOptionWithUserId:@"<USER_ID>"];
[self.rewardedAd setSSVOptionWithCustomData:@"<CUSTOM_DATA>"];
// 广告请求
[self.rewardedAd loadAd];

最后更新于

这有帮助吗?