激励视频服务端验证
<h2>1.激励视频服务端验证介绍<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_1-%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81%E4%BB%8B%E7%BB%8D"></a></h2>
<p>服务器端验证 (Server-side verification) 是对应用内激励视频广告观看行为进行的额外验证,可规避欺骗客户端回调来奖励用户的行为。 您可以使用服务器端验证对每一次激励视频广告观看行为进行验证,每次用户看完激励视频广告之后,都会使用您在设置聚合广告位时提供的回传网址对此次观看行为进行信息回传。开发者可参考服务端验证信息,自行判断进行奖励的下发。</p>
<p><strong>激励视频服务端验证功能需要 SDK 版本>=2.0.0</strong></p>
<h2>2.服务器端验证使用流程<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_2-tobid-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E9%AA%8C%E8%AF%81%E4%BD%BF%E7%94%A8%E6%B5%81%E7%A8%8B"></a></h2>
<ul>
<li>
<p><strong>回调 URL:</strong> 在用户看完激励广告后,以 GET 方式给开发者通知的地址。例如:</p>
<p><a href="http://www.mysite.com/granting.php?appUserId={{USER_ID}}&rewardName={{REWARD_NAME}}&rewardAmount={{REWARD_AMOUNT}}&transId={{TRANS_ID}}&placementId={{PLACEMENT_ID}}&networkId={{NETWORK_ID}}&aggrplacementId={{AGGR_PLACEMENT_ID}}&sign={{SIGN}}&extraInfo={{EXTRAINFO">http://www.mysite.com/granting.php?appUserId={{USER_ID}}&rewardName={{REWARD_NAME}}&rewardAmount={{REWARD_AMOUNT}}&transId={{TRANS_ID}}&placementId={{PLACEMENT_ID}}&networkId={{NETWORK_ID}}&aggrplacementId={{AGGR_PLACEMENT_ID}}&sign={{SIGN}}&extraInfo={{EXTRAINFO</a>}}</p>
</li>
</ul>
<p>注意</p>
<p><strong>{} 括号中的值是宏字段,实际的请求中均会替换真实字段;url中需包含所有宏,但值都由开发者自定义,没有值可以传空</strong></p>
<ul>
<li><strong>奖励名称:</strong> 聚合广告位设置的奖品名称;例如:金币、积分等。</li>
<li><strong>奖励数量:</strong> 聚合广告位设置的奖励数量。</li>
<li><strong>Security Key:</strong> 密钥。点击"生成",系统会更新密钥。</li>
</ul>
<h3>2.2 服务端验证回传参数说明<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_2-2-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81%E5%9B%9E%E4%BC%A0%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E"></a></h3>
<p>服务端验证目前支持以下信息,开发者回调地址中需要包含对应的参数宏。</p>
<table>
<thead>
<tr>
<th>参数宏</th>
<th>参数类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{USER_ID}}</td>
<td>string</td>
<td>开发者应用的用户id,可通过SDK 激励视频的 user_id 字段传入</td>
</tr>
<tr>
<td>{{TRANS_ID}}</td>
<td>string</td>
<td>服务端生成的trans_id,具有唯一性,用于标识此次广告观看行为。 开发者可通过此 id 对奖励 发放行为进行去重校验,避免重复发放奖励</td>
</tr>
<tr>
<td>{{REWARD_AMOUNT}}</td>
<td>int</td>
<td>奖励数量 ,开发者在编辑激励视频服务端回调信息的页面填写的奖励数量。</td>
</tr>
<tr>
<td>{{REWARD_NAME}}</td>
<td>string</td>
<td>奖励名称 ,开发者在编辑激励视频服务端回调信息的页面填写的奖励名称。</td>
</tr>
<tr>
<td>{{PLACEMENT_ID}}</td>
<td>string</td>
<td>聚合广告位id,观看此次激励视频的聚合广告位id</td>
</tr>
<tr>
<td>{{NETWORK_ID}}</td>
<td>string</td>
<td>此次激励视频所属的广告平台</td>
</tr>
<tr>
<td>{{AGGR_PLACEMENT_ID}}</td>
<td>string</td>
<td>此次激励视频所属的广告平台的代码位id。注意,此字段仅传输唯一代码位id,对于 Mintegral 渠道,回传 unitId</td>
</tr>
<tr>
<td>{{SIGN}}</td>
<td>string</td>
<td>签名校验</td>
</tr>
<tr>
<td>{{EXTRAINFO}}</td>
<td>string</td>
<td>通过 SDK的WindMillAdRequest类的options属性传入,options是个字典,key和value都是媒体自定义的</td>
</tr>
<tr>
<td>{{THIRD_TRANS_ID}}</td>
<td>string</td>
<td>三方广告激励回调中transid,依赖SDK3.3.0版本。当前支持广告网络:百度联盟、优量汇</td>
</tr>
</tbody>
</table>
<h3>2.3 签名校验生成示例<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_2-3-%E7%AD%BE%E5%90%8D%E6%A0%A1%E9%AA%8C%E7%94%9F%E6%88%90%E7%A4%BA%E4%BE%8B"></a></h3>
<p><strong>sha256工具类(Java版本)</strong></p>
<p>引入maven</p>
<p>xml</p>
<pre><code>&lt;groupId&gt;commons-codec&lt;/groupId&gt;
&lt;artifactId&gt;commons-codec&lt;/artifactId&gt;
&lt;version&gt;1.15&lt;/version&gt;
&lt;dependency&gt;&lt;/dependency&gt;</code></pre>
<p>Java</p>
<pre><code>import org.apache.commons.codec.binary.Hex;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
public class Sha256Util {
/***
* 利用Apache的工具类实现SHA-256加密
*
* @param str 加密的报文
* @return String
*/
public static String getSHA256Str(String str) {
MessageDigest messageDigest;
String encodeStr = &quot;&quot;;
try {
messageDigest = MessageDigest.getInstance(&quot;SHA-256&quot;);
byte[] hash = messageDigest.digest(str.getBytes(StandardCharsets.UTF_8));
encodeStr = Hex.encodeHexString(hash);
} catch (Exception e) {
e.printStackTrace();
}
return encodeStr;
}
}</code></pre>
<p>使用:</p>
<p>Java</p>
<pre><code>Sha256Util.getSHA256Str(
appSecurityKey() + &quot;:&quot; + trans_id)</code></pre>
<h3>2.4 回调响应<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_2-4-%E5%9B%9E%E8%B0%83%E5%93%8D%E5%BA%94"></a></h3>
<p>如果回调通过了开发者的全部验证,开发者需要返回以下JSON数据:</p>
<p>json</p>
<pre><code>&quot;isValid&quot;:true</code></pre>
<table>
<thead>
<tr>
<th><strong>字段定义</strong></th>
<th><strong>字段值或释义</strong></th>
<th><strong>字段类型</strong></th>
<th><strong>备注</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>isValid</td>
<td>true/false</td>
<td>BOOL</td>
<td>开发者服务端收到请求后判断回调结果,返回给 服务器的校验结果。</td>
</tr>
</tbody>
</table>
<p><em>如果因为网络原因没有收到回调响应,会每隔200毫秒重试3次。</em></p>
<h2>3.服务器端验证 SDK 相关参数使用说明<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_3-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E9%AA%8C%E8%AF%81-sdk-%E7%9B%B8%E5%85%B3%E5%8F%82%E6%95%B0%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E"></a></h2>
<p>使用激励视频服务端验证时,开发者需要按照要求在平台上做相应的参数配置,并且通过以下方法传入对应的宏信息。 客户端本地提供的 Trans_ID,可用于校验和服务端回调信息的一致性。开发者可根据需求使用。</p>
<h3>3.1 iOS<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_3-1-ios"></a></h3>
<p>开发者可通过以下方法传入 user_id 以及一些自定义信息</p>
<p>objective-c</p>
<pre><code>WindMillAdRequest *request = [WindMillAdRequest request];
request.userId = @&quot;user_id&quot;;
request.placementId = @&quot;ea1f8f7b662&quot;;
request.options = @{@&quot;test_key&quot;:@&quot;test_value&quot;};//s2s激励时自定义参数,对应{{EXTRAINFO}}
WindMillRewardVideoAd *rewardVideoAd = [[WindMillRewardVideoAd alloc] initWithRequest:request];
rewardVideoAd.delegate = self;
[rewardVideoAd loadAdData];</code></pre>
<p>激励视频服务端验证业务中,服务端会向开发者服务端发送一个验证请求,同时客户端会给出 <code>- (void)rewardVideoAd:(WindMillRewardVideoAd *)rewardVideoAd reward:(WindMillRewardInfo *)reward</code> 回调,开发者可根据此回调获取服务端回调的 Trans_ID。</p>
<p>> <strong>注意:在满足激励条件时会触发此回调,与是否选择服务端验证以及服务端验证是否成功无关。</strong></p>
<h3>3.2 安卓<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E9%AB%98%E7%BA%A7%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E/%E6%BF%80%E5%8A%B1%E8%A7%86%E9%A2%91%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%AA%8C%E8%AF%81/#_3-2-%E5%AE%89%E5%8D%93"></a></h3>
<p>开发者可通过以下方法传入 user_id 以及一些自定义信息</p>
<p>java</p>
<pre><code>private WMRewardAd rewardVideoAd;
/**
* PLACEMENT_ID 必填
* USER_ID 可选
* OPTIONS 自定义参数,对应服务端回调的{{EXTRAINFO}}
*/
WMRewardAdRequest request = new WMRewardAdRequest(PLACEMENT_ID, USER_ID, OPTIONS);</code></pre>
<p>激励视频服务端验证业务中, 服务端会向开发者服务端发送一个验证请求,同时客户端会给<code>onVideoRewarded(AdInfo adInfo, WMRewardInfo rewardInfo)</code> 回调,开发者可根据此回调获取服务端回调的 Trans_ID。</p>