广告位维度的服务端奖励验证
客户端使用说明
- 开发者需在Cloooud平台的激励视频广告位中开启服务器激励功能,并设置回调URL地址,详见平台;
- 开发者可以在激励视频广告加载中通过CloooudRewardedVideoModel对象配置自定义参数,自定义参数将传递给开发者服务器;
- 当激励视频播放完成后,Cloooud将通过回调URL地址通知到开发者服务器,由开发者自行判断是否下发奖励;
最终结果将通过如下接口回调到给移动端开发者,代码如下:
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *)rewardInfo verify:(BOOL)verify {
CloooudD_LogCallback(@"%s", __func__);
CloooudD_LogCallback(@"%s----platform:%@----rewardName:%@----rewardAmount:%ld----tradeId:%@",
__func__,
[self.rewardedVideoAd getShowEcpmInfo].adnName,
rewardInfo.rewardName,
rewardInfo.rewardAmount,
rewardInfo.tradeId);
// 是否是通过Cloooud的S2S服务完成验证的
BOOL byCloooud = rewardInfo.verifyByCloooudS2S;
if (byCloooud && !verify) {
// 通过Cloooud但是没有通过验证时,有可能是因为网络问题或者S2S服务异常导致,此时开发者可通过错误信息进行判断,如40001/40002/50001/50002
NSNumber *errorCode = rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorCodeKey];
NSString *errorMsg = rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorMsgKey];
CloooudD_LogCallback(@"verify by Cloooud but failed, error info is (%@)%@", errorCode, errorMsg);
}
}
【注意事项】
开启Cloooud的服务端验证功能后,请不要在第三方ADN重复配置这些代码位的服务端验证,否则可能会导致奖励发放出现问题
服务端数据说明
Cloooud会以 GET方式请求开发者的回调URL,并拼接参数回传,开发者的回调URL
示例代码
https://www.Cloooud.com/reward/callback?user_id=1234&trans_id=qwerfdas&reward_amount=100&reward_name=rmb&prime_rit=900000000&sign=sign:ebdc5645bc6245819fec2324789a363865272926cd0f8e4e88a993bd7fe3ba81&extra=anything_media_want
参数名称 | 字段含义 | 字段类型 | 说明 |
---|---|---|---|
user_id | 用户id | string | 调用SDK透传,应用对用户的唯一标识 |
trans_id | 交易id | string | 完成观看的唯一交易ID,由Cloooud生成 |
reward_amount | 奖励数量 | int | 媒体平台配置或调用SDK传入 |
reward_name | 奖励名称 | string | 媒体平台配置或调用SDK传入 |
prime_rit | 广告位id | string | 广告位id |
sign | 签名 | string | 由key和trans_id生成的报文签名 |
extra | 用户自定义 | string | 即customData,调用SDK传入并透传,如无需要则为空 |
sign签名规则说明
- 开发者收到Cloooud服务器激励回调时,可以通过sign对参数进行校验;
- 签名生成规则为:用trans id 和 m-key 拼接为 string,用sha256 算法生成string;
- m-key获取路径:媒体平台->找到需要配置的激励视频广告位ID->点击编辑该广告位->复制安全密钥即可
签名示例
sign = sha256(m-key:transId)
Python 示例
import hashlib
if __name__ == "__main__":
trans_id = "6FEB23ACB0374985A2A52D282EDD5361u6643"
m-key = "2426177315863edd099aa9ba13e6a996"
check_sign_raw = "%s:%s" % (m-key, trans_id)
sign = hashlib.sha256(check_sign_raw).hexdigest()
约定返回参数
| 字段名称 | 字段定义 | 字段类型 | 备注 |
| --- | --- | --- | --- |
is_verify |校验结果 |bool|判定结果,是否发放奖励
reason |失败原因 |int |当奖励发放失败时上传对应的错误码,并会透传给SDK客户端
注意:按照SDK要求需要服务器判断的回调url是一个get请求 默认返回的是一个json字符串
示例
{
"is_verify": true,
"reason" : 0
}
问题排查定位
- 开启Cloooud的服务端验证功能后,请不要在第三方ADN重复配置这些代码位的服务端验证,否则可能会导致奖励发放出现问题;
- 穿山甲的多阶奖励发放目前仅adn形式支持
- 当rewardVerify返回为false时,对应的errorCode为50001/50002,可提供对应的广告位ID及trans_id(交易ID)及发生的具体时间反馈给技术支持同学进行排查。错误码获取可参照如下代码或者通过抓包查询reward字段下返回的错误码来获取
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd rewardInfo:(CloooudAdapterRewardAdInfo *)rewardInfo verify:(BOOL)verify {
CloooudD_LogCallback(@"%@----errorcode:%@----errorMsg:%@", __func__,
rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorCodeKey],rewardInfo.customData[CloooudAdapterRewardAdCustomDataErrorMsgKey]
}
错误码说明
字段名称 | 字段定义 |
---|---|
20000 | 校验成功 |
40001 | 请求报文解析失败 |
40002 | 奖励回调未配置 |
50001 | 请求媒体服务端失败 |
50002 | 服务端处理异常 |