Rewarded Ad
1. 基本要求
ADX iOS SDK添加到项目中。
请使用为 Rewarded Ad 发放的 Ad Unit ID。
在请求广告之前 SDK 初始化请先进行。
SDK 初始化请在应用运行时只调用一次,并且 广告请求必须在初始化完成后进行。
如果支持 iOS 14 及以上, ATT(应用追踪透明性) 权限请求完成后再请求广告。
2. 实现
使用
initWithAdUnitId: 方法实例化ADXRewardedAd,并注册ADXRewardedAdDelegatecallback。调用 loadAd以加载广告。isLoaded在确认是否有要显示的广告后,showAdFromRootViewController:用于展示广告。当广告观看全部完成时,
ADXRewardedAdDelegate的rewardedAdDidRewardUser: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");
}import UIKit
import ADXLibrary
class RewardedAdViewController: UIViewController {
fileprivate var rewardedAd: ADXRewardedAd!
override func viewDidLoad() {
super.viewDidLoad()
rewardedAd = ADXRewardedAd(adUnitId: "<ADX_REWARDED_AD_UNIT_ID>")
rewardedAd.delegate = self
}
@IBAction func loadAd(_ sender: Any) {
rewardedAd.load()
}
@IBAction func showAd(_ sender: Any) {
if rewardedAd.isLoaded {
rewardedAd.show(fromRootViewController: self)
}
}
}
extension RewardedAdViewController: ADXRewardedAdDelegate {
func rewardedAdDidLoad(_ rewardedAd: ADXRewardedAd) {
print("rewardedAdDidLoad")
}
func rewardedAd(_ rewardedAd: ADXRewardedAd, didFailToLoadWithError error: Error) {
print("rewardedAd:didFailToLoadWithError")
}
func rewardedAd(_ rewardedAd: ADXRewardedAd, didFailToShowWithError error: Error) {
print("rewardedAd:didFailToShowWithError")
}
func rewardedAdWillPresentScreen(_ rewardedAd: ADXRewardedAd) {
print("rewardedAdWillPresentScreen")
}
func rewardedAdWillDismissScreen(_ rewardedAd: ADXRewardedAd) {
print("rewardedAdWillDismissScreen")
}
func rewardedAdDidDismissScreen(_ rewardedAd: ADXRewardedAd) {
print("rewardedAdDidDismissScreen")
}
func rewardedAdDidClick(_ rewardedAd: ADXRewardedAd) {
print("rewardedAdDidClick")
}
func rewardedAdDidRewardUser(_ rewardedAd: ADXRewardedAd, with reward: ADXReward) {
print("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;func rewardedAdDidLoad(_ rewardedAd: ADXRewardedAd)
func rewardedAdWillPresentScreen(_ rewardedAd: ADXRewardedAd)
func rewardedAdWillDismissScreen(_ rewardedAd: ADXRewardedAd)
func rewardedAdDidDismissScreen(_ rewardedAd: ADXRewardedAd)
func rewardedAdDidClick(_ rewardedAd: ADXRewardedAd)
func rewardedAdDidRewardUser(_ rewardedAd: ADXRewardedAd, with reward: ADXReward)
func rewardedAd(_ rewardedAd: ADXRewardedAd, didFailToLoadWithError error: Error)
func rewardedAd(_ rewardedAd: ADXRewardedAd, didFailToShowWithError error: Error)4. Ad Revenue (paidEventHandler)
您可以查看广告展示的预估广告收入。
#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 {}
@endimport UIKit
import ADXLibrary
import FirebaseAnalytics
import AppsFlyerAdRevenue
class RewardedViewController: UIViewController, ADXRewardedAdDelegate {
var rewardedAd: ADXRewardedAd!
override func viewDidLoad() {
super.viewDidLoad()
rewardedAd = ADXRewardedAd(adUnitId: "<ADX_REWARDED_AD_UNIT_ID>")
rewardedAd.delegate = self
rewardedAd.paidEventHandler = { [weak self] eCPM in
let revenue:NSNumber = (eCPM / 1000) as NSNumber
self?.handleAdRevenue(revenue: revenue)
}
}
func handleAdRevenue(revenue:NSNumber) {
// 1) Firebase Analytics
Analytics.logEvent(
AnalyticsEventAdImpression,
parameters: [
AnalyticsParameterAdPlatform: "AD(X)",
AnalyticsParameterAdUnitName: "ADX Rewarded Ad",
AnalyticsParameterAdFormat: "RewardedAd",
AnalyticsParameterValue: revenune,
AnalyticsParameterCurrency: "USD",
])
// 2) AppsFlyer
let adRevenueParams:[AnyHashable: Any] = [
"AdUnitName" : "ADX Rewarded Ad",
"AdType" : "RewardedAd",
]
AppsFlyerAdRevenue.shared().logAdRevenue(
monetizationNetwork: "AD(X)",
mediationNetwork: .custom,
eventRevenue: revenune,
revenueCurrency: "USD",
additionalParameters: adRevenueParams)
}
}
extension RewardedAdViewController: ADXRewardedAdDelegate {
func rewardedAdDidLoad(_ rewardedAd: ADXRewardedAd) {}
func rewardedAd(_ rewardedAd: ADXRewardedAd, didFailToLoadWithError error: Error) {}
func rewardedAd(_ rewardedAd: ADXRewardedAd, didFailToShowWithError error: Error) {}
func rewardedAdWillPresentScreen(_ rewardedAd: ADXRewardedAd) {}
func rewardedAdWillDismissScreen(_ rewardedAd: ADXRewardedAd) {}
func rewardedAdDidDismissScreen(_ rewardedAd: ADXRewardedAd) {}
func rewardedAdDidClick(_ rewardedAd: ADXRewardedAd) {}
func rewardedAdDidRewardUser(_ rewardedAd: ADXRewardedAd, with reward: ADXReward) {}
}5. SSV (Server-side verification) 设置
SSV设置是可选项,仅在需要时才可进行设置和使用。SSV设置是为了在发生奖励事件时向开发者注册的Callback URL进行Server to Server方式的调用而进行的设置。关于
SSV设置的调用条件如下。必须通过仪表板
Rewarded Video类型中 Callback URL 已注册。在视频观看完成后必须发生奖励事件。
如有需要,请在广告请求之前通过 SDK 设置
User ID或Custom Data信息。
客户端设置的
User ID和Custom 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];// SSV 设置 (optional)
rewardedAd.setSSVOptionWithUserId("<USER_ID>")
rewardedAd.setSSVOptionWithCustomData("<CUSTOM_DATA>")
// 广告请求
rewardedAd.load()最后更新于
这有帮助吗?