跳到主要内容

广告

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 失效时间。