广告位维度的服务端奖励验证

客户端使用说明

  1. 开发者需在Cloooud平台的激励视频广告位中开启服务器激励功能,并设置回调URL地址,详见平台;
  2. 开发者可以在激励视频广告加载中通过CloooudRewardedVideoModel对象配置自定义参数,自定义参数将传递给开发者服务器;
  3. 当激励视频播放完成后,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签名规则说明

  1. 开发者收到Cloooud服务器激励回调时,可以通过sign对参数进行校验;
  2. 签名生成规则为:用trans id 和 m-key 拼接为 string,用sha256 算法生成string;
  3. 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
}

问题排查定位

  1. 开启Cloooud的服务端验证功能后,请不要在第三方ADN重复配置这些代码位的服务端验证,否则可能会导致奖励发放出现问题;
  2. 穿山甲的多阶奖励发放目前仅adn形式支持
  3. 当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 服务端处理异常