Skip to main content

iOS 实时竞价

能力说明#

游可赢 SDK 为接入方提供客户端实时竞价的能力。在请求到广告后,可以通过接口查询到该广告的价格,该价格可用于在不同广告之间比价。广告比价结束后,开发者可调用对应的接口将竞价结果上报至服务端,以提高后续的广告竞价效率。

权限:实时竞价需申请后才可使用,申请请联系商务经理。

支持场景#

  • 开屏广告
  • 插屏广告
  • 激励视频广告
  • 原生自渲染广告
  • 原生模版广告

竞价流程#

目前支持实时竞价的广告类型均实现了 KLNAdBiddingProtocol 协议。该协议提供获取广告价格、竞价结果上报的能力。

@protocol KLNAdBiddingProtocol <NSObject>
/// 返回广告的 eCPM,单位:分
/// @return 成功返回一个大于等于0的值,-1表示无权限或后台出现异常
- (NSInteger)eCPM;
/// 竞胜之后调用, 需要在调用 present 广告之前调用
/// @param price - 竞胜价格 (单位: 分)
- (void)sendWinNotificationWithPrice:(NSInteger)price;
/// 竞败之后调用
/// @param price - 竞胜价格 (单位: 分)
/// @param reason - 竞败原因
/// @param adnID - adnID
/// KLNAdBidingAdnIDYKYAd:输给游可赢其他广告
/// KLNAdBidingAdnIDThirdParty:输给第三方ADN
/// KLNAdBidingAdnIDSelfOwn:输给自售广告主
- (void)sendLossNotificationWithWinnerPrice:(NSInteger)price lossReason:(KLNAdBiddingLossReason)reason winnerAdnID:(KLNAdBidingAdnID _Nullable)adnID;
@end

竞价流程包括以下三个步骤:

1、获取广告价格#

开发者在获取到广告内容后,可以通过广告对象的 eCPM 接口获取到广告的价格。

2、广告比价#

开发者向多个平台发起广告请求后,可以使用不同平台的广告价格进行比价。

3、竞价结果上报#

游可赢广告竞胜后,在广告展示前调用 sendWinNotificationWithPrice: 接口。 游可赢广告竞败后,调用 sendLossNotificationWithWinnerPrice:lossReason:winnerAdnID: 接口。接口参数竞败原因和 adnID 详见枚举值:

typedef NS_ENUM(NSInteger, KLNAdBiddingLossReason) {
KLNAdBiddingLossReasonNone = 1, // 竞得
KLNAdBiddingLossReasonLowPrice = 2711, // 竞争力不足
KLNAdBiddingLossReasonTimeOut = 2712, // 返回超时
KLNAdBiddingLossReasonNoAd = 2713, // 无广告回包
KLNAdBiddingLossReasonOther = 2714, // 其他原因
};
typedef NSString *KLNAdBidingAdnID NS_STRING_ENUM;
/// 输给游可赢其他广告
KLN_EXTERN KLNAdBidingAdnID const KLNAdBidingAdnIDYKYAd;
/// 输给第三方ADN
KLN_EXTERN KLNAdBidingAdnID const KLNAdBidingAdnIDThirdParty;
/// 输给自售广告主
KLN_EXTERN KLNAdBidingAdnID const KLNAdBidingAdnIDSelfOwn;

以开屏广告为例,整个实时竞价流程的代码片段如下,详情见demo:

// 加载开屏广告
[KLNSplashAd loadWithRequest:req completionHandler:^(KLNSplashAd *splashAd, NSError *error) {
if (error) {
KLNDemoLog(@"加载开屏广告失败:%@", error);
return;
}
KLNDemoLog(@"开屏广告Ready");
self.splashAd = splashAd;
[self updateButtonState];
// 1、获取广告价格
NSInteger price = [splashAd eCPM];
KLNDemoLog(@"广告价格:%d",price);
// 2、广告比价
// 3、竞价结果调用
[self reportBidding:splashAd];
// 4、展示广告
dispatch_async(dispatch_get_main_queue(), ^{
if (self.splashAutoShowSelectButton.isSelected) {
if ([splashAd canPresentFromRootViewController:self error:nil]) {
[splashAd presentFromRootViewController:self];
}
[self updateButtonState];
}
});
}];
- (void)reportBidding:(KLNSplashAd *)ad{
KLNAdBiddingResult result = KLNDemoBiddingManager.manager.biddingResult;
if (result == KLNAdBiddingResultWin) {
int price = KLNDemoBiddingManager.manager.price;
[ad sendWinNotificationWithPrice:price];
}else if(result == KLNAdBiddingResultLoss){
int price = KLNDemoBiddingManager.manager.price;
KLNAdBiddingLossReason reason = KLNDemoBiddingManager.manager.biddingLossReason;
NSString *adnID = KLNDemoBiddingManager.manager.adnID;
[ad sendLossNotificationWithWinnerPrice:price lossReason:reason winnerAdnID:adnID];
}
}