跳到主要内容

广告

1.预加载广告​

提示
  • 当玩家进入到包含广告按钮场景时,cp就可以调用,这样可以减少用户等待的时间

接入代码示例​

OmniSDKAdOptions options = OmniSDKAdOptions.builder()
.placementId(placementId)
.build();
OmniSDKv3.getInstance().preloadAd(activity, options, result -> {
if (result.isSuccess()) {
OmniSDKPreloadAdResult omniSDKPreloadAdResult = result.get();
Log.i(TAG, "preloadAd success placementId = " + omniSDKPreloadAdResult.getPlacementId());
// 预加载回调成功
} else {
// 广告加载异常
OmniSDKError error = result.error();
Log.i(TAG, "preloadAd fail desc:" + error.getDescription());
}
});

参数描述​

OmniSDKAdOptions​

参数类型说明
placementIdString世游后台分配广告位Id

返回值​

OmniSDKPreloadAdResult​

参数类型说明
placementIdString世游后台分配广告位Id

2.展示广告​

提示
  • 玩家点击游戏界面中广告按钮调用
  • 没有提前调用预加载接口的情况下,需要处理用户等待过程,如loading弹窗

接入代码示例​

// loading.show()
OmniSDKAdOptions options = OmniSDKAdOptions.builder()
.placementId(placementId)
.build();
OmniSDKv3.getInstance().showAd(activity, adsOptions, result -> {
// loading.dismiss()
if (result.isSuccess()) {
OmniSDKShowAdResult omniSDKShowAdResult = result.get();
when(omniSDKShowAdResult.getStatus()){
OmniSDKShowAdStatus.START -> {
// 广告开始展示
Log.i(TAG, "showAd statu is Start");
}
OmniSDKShowAdStatus.CLOSED -> {
// 广告关闭
Log.i(TAG, "showAd statu is Closed");
}
OmniSDKShowAdStatus.CLICKED -> {
// 广告被点击
Log.i(TAG, "showAd statu is Clicked");
}
OmniSDKShowAdStatus.REWARDED -> {
// 激励视频广告 奖励达成 使用adToken与游戏进行道具发放验证
Log.i(TAG, "showAd statu is Rewarded adToken = "+omniSDKShowAdResult.getToken());
}
}
} else {
// 广告播放异常
OmniSDKError error = result.error();
Log.i(TAG, "preloadAd fail desc:" + error.getDescription());
}
});

参数描述​

OmniSDKAdOptions​

参数类型说明
placementIdString世游后台分配广告位Id

返回值​

OmniSDKShowAdResult​

参数类型说明
statusOmniSDKAdType(enum class)广告状态
START 广告开始展示
CLICKED 广告被点击
CLOSED 广告关闭
REWARDED 广告奖励发放
tokenString游戏服务端可验证奖励发放 唯一码

3.Token 验证说明​

签名算法​

使用 HS256 算法对订单 JWT 进行签名。签名的私钥是世游给游戏分配的 Secret Key,游戏服务端需要用它验证 Ad Token 的签名。

Claims​

广告 JWT 的 payload 中包含以下 claim:

字段类型说明
issString颁发 JWT 的服务器,即世游 REST API 的端点
scopeStringJWT 的作用域,固定为 ad
audString世游分配的游戏 ID, 也就是 Game ID,用于标识游戏项目
subString发起广告的用户 ID, 使用世游分配的聚合用户 ID
expLong过期时间,以秒为单位
iatLong签发时间,以秒为单位
impression_idString世游服务端创建的,标识单次广告播放的唯一 ID
placement_idString广告位 ID,用于确定发放什么样的广告激励

示例:​

{
"iss": "https://api.seayoo.com",
"scope": "ads",
"aud": "catsnsoup",
"sub": "1220329456780123",
"iat": 1698567544,
"exp": 1698571144,
"impresssion_id": "eaac7ced630f49ccbb4f3a6319694a97",
"placement_id": "Cats_Daily_RV"
}

验证逻辑​

游戏服务端应当对 Ad Token 进行验证,验证不通过说明请求不可信,不能发放广告激励。 验证内容如下:

  1. Token 能够被解析成一个结构正确的 JWT
  2. Token 的 HS256 签名与服务端使用 Secret Key 计算出的签名匹配
  3. Token 的 scope 为 ads
  4. Token 的 aud 与世游分配的 Game ID 匹配
  5. Token 的 exp 字段指示的过期时间,服务端的当前时间尚未达到
  6. Token 的 sub 与当前游戏客户端的 SDK 聚合用户 ID 匹配
提示

游戏服务端应当使用 Ad Token 中的 impression_id 做幂等性处理,避免重复发放广告激励。 建议至少保存 impression_id 至 exp 中指示的 Ad Token 失效时间。