Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zw_game_sdk
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
CI / CD
CI / CD
流水线
日程表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
提交
问题看板
Open sidebar
zwwl
zw_game_sdk
Commits
5d9e71ba
提交
5d9e71ba
authored
11月 22, 2025
作者:
刘添
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新 Android游戏广告媒体对接说明文档.md
上级
c9d7b17c
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
153 行增加
和
379 行删除
+153
-379
Android游戏广告媒体对接说明文档.md
Android游戏广告媒体对接说明文档.md
+153
-379
没有找到文件。
Android游戏广告媒体对接说明文档.md
浏览文件 @
5d9e71ba
# 掌游android集成广告SDK
# 掌玩Android(广告)游戏SDK
# 掌游android集成广告SDK
# 掌玩Android(广告)游戏SDK
一:SDK概述
#
一:SDK概述
1、主要
功能
此功能包含游戏登录、支付、事件上报、广告展示、分享(开发中)等
功能
SDK登录
# 二:接入准备
SDK支付
1、在注册清单文件中(AndroidManifest)填写对应参数信息,参数信息在出包文档中体现
SDK角色上报
2、参数说明
SDK激励广告
1.
1、接入准备
备注:具体对接方法请根据游戏类型信息接入即可,如不清楚请联系我方技术
1.
1、SDK清单文件注册(AndroidManifest.xml)
正式接入前请务必阅读掌玩SDK接入流程的介绍,并且在掌玩SDK平台获取game
\_
id与game
\_
secret,此参数将由掌玩游戏对接技术或产品对接,对接时由平台方提供app
\_
id、app
\_
status、app
\_
name、game
\_
id、PackName、游戏appName等字段信息,请严格阅读对接时平台对接人员提供参数文档
| 名称 | 说明 |
| 参数 | 说明 |
| --- | --- |
| game
\_
id | 游戏在平台的唯一标识。 |
| game
\_
secret | 平台方提供,游戏签名秘钥。 |
| app
\_
status | 用户在平台登录的投放媒体标识。 |
| app
\_
name | 游戏在三方平台标识(快手)。 |
| pack
\_
name | 游戏在用户设备安装唯一标识 |
| game
\_
id | 游戏在平台中唯一标识(出包时提供) |
| game
\_
secret | 支付时需要使用(服务端) |
| app
\_
status | 游戏包对应媒体(出包时提供) |
| app
\_
name | 游戏在对应快手媒体(与 app
\_
id 对应) |
| app
\_
id | 投放媒体参数(出包提供) |
| secret | 腾讯媒体为必传 |
在注册清单中(AndroidManifest.xml)填写对应字段值
3、注册清单配置示例
```
```
json
<!--掌玩SDK游戏ID-->
<meta-data
android
:
name=
"game_id"
...
...
@@ -51,21 +42,19 @@ SDK激励广告
android
:
name=
"app_name"
android
:
value=
"tlcq"
/>
<!--0默认SDK,1表示巨量AD,2表示快手,
3
表示腾讯-->
<!-
-0
默认SDK
,
1
表示巨量AD,
2
表示快手
,
4
表示腾讯-->
<meta-data
android
:
name=
"app_status"
android
:
value=
"1"
/>
```
二:快速集成
2.
1、引入maven仓库代码
# 三:快速集成
在主工程项目中build.gradle中添加maven
1、在主工程gradle中配置maven信息
```
//掌玩SDK
//掌玩SDK
maven { url 'http://nexus.zwwlkj01.top/repository/android-game/' }
//巨量SDK
...
...
@@ -81,7 +70,7 @@ SDK激励广告
url 'http://nexus.zwwlkj01.top/repository/AdGameSdk/'
allowInsecureProtocol=true
credentials {
username ""
username ""
//maven账号,对接时找我方技术提供
password ""
}
...
...
@@ -100,25 +89,26 @@ SDK激励广告
```
2
.
2在项目APP目录下的build.gradle中添加SDK版本地址
2
、在app目录下的gradle中添加
```
implementation 'com.zw.game.advertisement:gameSDk:1.1.0'
implementation 'com.zw.game.advertisement:gameSDk:1.1.0'
implementation 'androidx.multidex:multidex:2.0.1' //分包,具体根据项目使用添加
```
SDK为androidx项目,如没有升级到androidx,则建议升级,并在gradle.properties中添加以下代码
3、
SDK为androidx项目,如没有升级到androidx,则建议升级,并在gradle.properties中添加以下代码
```
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
android.enableJetifier=true
//兼容对低版本迁移androidx
```
在注册清单中添加广告的provider
4、注册清单中添加广告相关的
```
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
...
...
@@ -159,9 +149,6 @@ android.enableJetifier=true
anythink
\_
bk
\_
gdt
\_
file
\_
path
```
<?xml version="1.0" encoding="utf-8"?>
...
...
@@ -190,14 +177,12 @@ anythink\_bk\_gdt\_file\_path
name="gdt_sdk_download_path2"
path="com_qq_e_download" />
</paths>
```
2.
3初始化SDK
```
在你的工程中application中添加以下代码,没有application则新增application类,并在注册清单中添加你的application
5、在你的游戏工程中创建Java代码或者kotlin代码(Application)
```
public class App extends Application {
@Override
public void onCreate() {
...
...
@@ -207,10 +192,9 @@ public class App extends Application {
}
}
```
在注册清单
添加APP类
在注册清单
中配置你的application
```
<application
...
...
@@ -223,75 +207,87 @@ public class App extends Application {
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ZyouSdk">
```
在你的Activity中初始化SDK
# 四:对进行初始化
1、在初始化之前,了解调用使用方法
| 方法名 | 说明 |
| --- | --- |
| onCreate | 初始化 |
| onDestroy | |
| exitApp | 关闭程序提示弹框 |
| showLogin | 拉起登录 |
| showPay | 拉起支付 |
| showBall | 显示悬浮球 |
| putEventTiktokReward | 按需对接(关于抖音上报) |
| putRoleReport | 角色上报 |
| putBehavior | 行为角色上报 |
| initAdvertisement | 初始化广告 |
| loadAd | 加载广告 |
| showAd | 显示对应广告 |
2、onCreate 方法 code 码说明
| code | 说明 |
| --- | --- |
|
\-
1 | 退出登录失败 |
| 1 | SDK 初始化成功 |
| 2 | 初始化失败 |
| 3 | 悬浮球退出登录成功(游戏重置) |
| 4 | 悬浮球切换账号成功(重置游戏状态) |
3、公共方法,methodName参考上面第四条说明
```
GameAdService.getInstance().onCreate(mActivity, new InitZyCallback() {
@Override
public void onSuccess(int status) {
switch (status){
case -1:
showToast("退出登录失败");
break;
case 1:
showToast("初始化成功");
break;
case 2:
showToast("初始化失败");
break;
case 3:
showToast("退出登录成功");
break;
case 4:
showToast("切换登录成功");
break;
default:
showToast("初始化失败");
break;
}
// status=3 退出登录成功
Log.e(TAG,"SDK初始化:"+status);
}
mActivity上下文
methodName方法名称(如:onCreate)
parmaJson 入参参数JSON
GameSDKListener 调用方法后回调
GameAdService.getInstance().onGameMethodsCall(mActivity,methodName,parmaJson, new GameSDKListener() {
@Override
public void onFailed(Object o) {
public void callBack(String type, String parma) {
//type返回是对应方法名,可用作判断业务逻辑
}
});
ConfigInfo.allowPORTRAIT = false;//默认横屏
```
状态码说明
| 名称 | 说明 |
| --- | --- |
|
\-
1 | 表示玩家退出登录失败 |
| 1 | SDK初始化完成 |
| 2 | SDK初始化失败 |
| 3 | 悬浮球退出登录成功(CP则需要重置游戏状态) |
| 4 | 悬浮球个人中心切换账号完成(CP需要重置游戏) |
| | |
2.
4、SDK登录
4、初始化
```
GameAdService.getInstance().showLogin(this,new OnLoginListener() {
GameAdService.getInstance().onGameMethodsCall(mActivity,"onCreate",null, new GameSDKListener() {
@Override
public void
loginSuccess(Object dat
a) {
public void
callBack(String type, String parm
a) {
}
@Override
public void loginError(Object data) {
});
```
# 五、SDK登录
```
GameAdService.getInstance().onGameMethodsCall(mActivity,"showLogin",null, new GameSDKListener() {
@Override
public void callBack(String type, String parma) {
if(type=="showLogin"){
//登录成功
}
}
});
```
返回参数说明:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| status
\_
code | int | 状态码 |
...
...
@@ -303,55 +299,24 @@ GameAdService.getInstance().onCreate(mActivity, new InitZyCallback() {
| has
\_
identify | Boolean | 是否实名 |
| user
\_
token | String | 签名token |
# 6、显示悬浮球
返回JSON示例:
必须在登录完成后调用,可以在登录回调中完成处理
```
{
"status_code": 1,
"msg": "SUCCESS",
"data": {
"member_id": "463639852",
"player_id": "458691132",
"username": "w5194224917816",
"user_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ6cy56d3dsa2owMy50b3AiLCJhdWQiOiJ6cy56d3dsa2owMy50b3AiLCJpYXQiOjE3NjM2MDU4MjQsImRhdGEiOnsiaWQiOiI0NjM2Mzk4NTIiLCJnYW1lX2lkIjoiMjAxNSIsInBsYXllcl9pZCI6IjQ1ODY5MTEzMiJ9fQ.zBY-G008lh5uWt78yARDX9dpCivOZ2WNAIkGfp3GUG4#2015",
"avatar": "",
"mobile": "",
"has_identify": false,
"has_mobile": false,
"need_identification": "3",
"force_reset_password": 3,
"media_report": [
]
},
"extra": {
GameAdService.getInstance().onGameMethodsCall(mActivity,"showBall",null, new GameSDKListener() {
@Override
public void callBack(String type, String parma) {
}
}
```
2.
5 SDK中显示悬浮球
必须在登录完成后调用,可以在登录回调中完成处理
```
GameService.getInstance().showBall(activity);//activity为当前Activity上下问题,必须为Activity
});
```
2.
6、SDK下单
# 7、SDK支付
拉起支付面板
参数示例:
```
public void showPay(String payParam, OnPaymentListener paymentListener)
```
示例JSON:
```
json
{
"order": {
"amount": "100",
...
...
@@ -373,44 +338,55 @@ public void showPay(String payParam, OnPaymentListener paymentListener)
"server_name": "主宰服"
}
}
```
| 名称 | 类型 | 是否必须 | 默认值 | 说明 |
| --- | --- | --- | --- | --- |
| cp
\_
order
\_
id | String | true | | CP订单ID |
| amount | number | true | | 商品原价总金额(单位:分 |
| real_amount | number | true | | 实际支付金额(单位:分 |
| cp
\_
order
\_
id | String | true | | CP 订单 ID |
| amount | number | true | | 商品总价(单位:分 |
| product
\_
price | number | true | | 商品价格(整数,后台自动换算分) |
| product
\_
id | String | true | 0 | 商品ID |
| product
\_
id | String | true | 0 | 商品
ID |
| product
\_
cnt | number | true | "0" | 商品数量 |
| product
\_
name | string | true | "" | 商品名称 |
| product
\_
desc | string | false | "" | 商品描述 |
| ext | string | true | "" | 订 调用方定义 单额外信息用(json)
用符 - 隔开,第一个是gameUi第二个是商品ID goodsId
|
| ext | string | true | "" | 订 调用方定义 单额外信息用(json) |
| event | stringstring | true | | 事件 |
| server
\_
id | string | true | | 区服id |
| server
\_
id | string | true | | 区服
id |
| server
\_
name | string | true | | 区服名称 |
| cp
\_
role
\_
id | string | true | | cp
角色
id |
| cp
\_
role
\_
id | string | true | | cp
角色
id |
| role
\_
name | string | true | | 角色名称 |
| role
\_
level | string | true | | 角色等级 |
| role
\_
vip | string | true | | 角色
vip
等级 |
| role
\_
id | string | true | | 角色ID |
| role
\_
vip | string | true | | 角色
vip
等级 |
| role
\_
id | string | true | | 角色
ID |
下单回调通知 (需要游戏服务端完成该接口,接收平台充值成功的信息。)
接口地址:参考服务端文档
```
json
2.
7、角色上报
String
playJson=
"参考上面示例"
;
GameAdService.getInstance().onGameMethodsCall(mActivity
,
"showPlay"
,
playJson
,
new
GameSDKListener()
{
@Override
public
void
callBack(String
type
,
String
parma)
{
参数示例:
}
}
);
```
```
json
# 8、SDK角色上报
说明:(根据游戏类型按需对接)
示例:
```
{
"cp_account": "w55231582254",
"role": {
"attack": "0",
"chapter_index": "12",
"combat_num": "25564",
"cp_role_id"
:
"21318465
"
,
"cp_role_id": "69842111
",
"event": "create",
"gang_name": "大竹帮",
"main_city_level": "大司马",
...
...
@@ -421,30 +397,12 @@ public void showPay(String payParam, OnPaymentListener paymentListener)
"role_level": "15",
"role_name": "大鲨鱼",
"role_vip": "23",
"server_id"
:
"34974029
"
,
"server_id": "55469563
",
"server_name": "主宰服",
"sponsor_level": "12",
"trans_level": "5"
}
```
调用方法:String setting=上面示例JSON
```
GameSdk.getInstance().putRoleReport(setting, new SubmitRoleInfoCallBack() {
@Override
public void onSuccess(Object o) {
showToast(o.toString()+"");
}
@Override
public void onFailure(int code, String msg) {
}
});
}
```
| 参数 | 类型 | 是否必须 | 默认值 | 说明 |
...
...
@@ -477,167 +435,56 @@ GameSdk.getInstance().putRoleReport(setting, new SubmitRoleInfoCallBack() {
| recharge | 角色充值 |
| other | 其他 |
2.
8、游戏角色行为上报接口(按需接入)
示例:
```
{
"cp_role_id": "93478561",
"event": "coin_get",
"querys": [
{
"name": "角色具体信息0",
"value": "0"
},
{
"name": "角色具体信息1",
"value": "1"
},
{
"name": "角色具体信息2",
"value": "2"
},
{
"name": "角色具体信息3",
"value": "3"
},
{
"name": "角色具体信息4",
"value": "4"
}
],
"role_name": "张飞"
}
```
```
GameService.getInstance().putGameRoleport(param, new ZyListener() {
String playJson="参考上面示例";
GameAdService.getInstance().onGameMethodsCall(mActivity,"putRoleReport",playJson, new GameSDKListener() {
@Override
public void Success(Object s) {
}
@Override
public void Error(Object s) {
public void callBack(String type, String parma) {
}
});
```
字段说明:
| 字段 | 是否必须 | 类型 | 说明 |
| --- | --- | --- | --- |
| event | true | String | 事件类型 |
| server
\_
id | true | String | 区服ID |
| cp
\_
role
\_
id | true | String | CP角色ID |
| role
\_
name | true | String | 角色名称 |
| querys | true | Array | 属性 |
| querys.name | true | String | 属性名 (中文) |
| querys.value | true | String | 属性值 |
EVENT枚举说明:
| EVENT | 说明 |
| --- | --- |
| coin
\_
get | 货币产出 |
| coin
\_
cost | 货币消耗 |
| item
\_
get | 道具产出 |
| item
\_
cost | 道具消耗 |
| shop | 商城购买 |
| task
\_
complete | 任务完成 |
| newplayer
\_
guide | 新手指引 |
| mail | 邮件操作 |
2.
9、SDK退出程序
在返回键处理时
# 9、初始化广告
```
GameAdService.getInstance().onGameMethodsCall(mActivity,"initAdvertisement",playJson, new GameSDKListener() {
@Override
public void onBackPressed() {
GameAdService.getInstance().exitApp();
}
```
2.
9.1、游戏排行榜
参数示例:
```
json
{
"cp_role_id"
:
"w55231582254"
,
"server_name"
:
"test"
,
"server_id"
:
"test"
,
"role_name"
:
"test"
}
```
```
GameAdService.getInstance().onStartRanking(json)
```
| 参数 | 是否必须 | 说明 |
| --- | --- | --- |
| cp
\_
role
\_
id | true | CP角色ID |
| server
\_
name | true | 区服名称 |
| server
\_
id | true | 区服ID |
| role
\_
name | true | 游戏角色名称 |
2.
3.0、游戏内有切换账号按钮,调用outGameLogin方法(没有此功能无需调用)选择使用,退出登录成功后再初始化SKD方法中监听回调信息,状态码3,游戏调用了此方法,SDK会自动弹出登
```
GameAdService.getInstance().outGameLogin(new OnLogoutListener() {
@Override
public void logoutSuccess(Object s) {
}
@Override
public void logoutError(Object s) {
public void callBack(String type, String parma) {
}
});
```
三:广告集成
# 10、加载广告
3.
1、初始化广告
参数示例
```
GameAdService.getInstance().initAdvertisement(this);
```
3.
2、SDK拉起广告预加载(在登录后并且初始化了广告SDK)
参数示例:
```
json
{
"ad_scene_id": "01255", //广告场景ID
"advertiser_type": "2"// 广告类型 1 banner广告 2 激励广告 3 插屏广告 4 格子广告 5 原生广告
}
```
```
GameAdService.getInstance().loadAd(json,GameSDKListener);
```
| 参数 | 说明 |
| --- | --- |
| ad
\_
scene
\_
id | 广告场景ID |
| advertiser
\_
type | 告类型 1 banner广告 2 激励广告 3 插屏广告 4 格子广告 5 原生广告 |
| advertiser
\_
type | 告类型1banner广告2激励广告3插屏广告4格子广告5原生广告 |
```
GameAdService.getInstance().onGameMethodsCall(mActivity,"loadAd",adJson, new GameSDKListener() {
@Override
public void callBack(String type, String parma) {
}
});
```
返回JSON说明
```
json
```
{
"eventType": "ad_play_start",
"msg": "广告播放开始",
...
...
@@ -710,98 +557,24 @@ eventType说明
| ad
\_
again
\_
play
\_
start | 广告再次播放开始 |
| again
\_
reward
\_
received | 再次收到奖励 |
3.
3
、显示广告
# 11
、显示广告
```
GameAdService.getInstance().showAd();
```
四:Activity生命周期
GameAdService.getInstance().onGameMethodsCall(mActivity,"showAd",null, new GameSDKListener() {
@Override
public void callBack(String type, String parma) {
}
});
```
GameAdService.getInstance().onDestroy(this);
```
五:服务端接口 调用方直接使用http 调用接口
接口地址:【POST】 /android
\_
sdk/auth/checkLogin
请求头参数
| 参数 | 必选 | 参数值 | 说明 |
| --- | --- | --- | --- |
| Content-Type | true | application/json | |
| User-Token | true | | 登录后由 SDK 返回的user
\_
token |
Body:
| 参数 | 必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| game
\_
id | true | int | 游戏接入时分配的游戏ID(建议从user
\_
token中取,#后面的数字即为game
\_
id) |
| player
\_
id | true | int | 游戏登录后由 SDK 返回的player
\_
id |
| sign | true | String | 参数签名 |
返回参数:
| 参数 | 必须 | 类型 | 说明 |
| --- | --- | --- | --- |
| status
\_
code | | int | 状态码 1 正常在线,否则不允许登录 |
| msg | | | |
| data | false |
\[\]
| 返回数据(空) |
调用方检测当前用户是否登录过,在线状态; 如果返回参数不是正常登录则不允许登录游戏
请求示例:
12、Activity生命周期
```
<php?
public function checkLogin(){
$host = 'https://zyouapi.wozhangwan.com';
$checkLoginUrl = '/android_sdk/auth/checkLogin';
$url = $host.$checkLoginUrl;
$gameSecret = "game_secret";
$body = ["player_id" => 1245, "game_id" => 14];
$userToken = "user_token";
$body["sign"] = makeSign($body, $gameSecret);
$headers = ["Content-Type:application/json","User-Token:".$userToken];
$response = curl_post($url, $body, $hearders);
}
public function makeSign($params,$gameSecret){
$signStr = '';
ksort($params, SORT_REGULAR);
foreach ($params as $key => $val) {
if (is_array($val)) {
ksort($val, SORT_REGULAR);
$val = json_encode($val, JSON_UNESCAPED_UNICODE);
}
$signStr .= $key . '=' . $val . '&';
}
$signStr .= 'game_secret=' . $gameSecret;
return md5($signStr);
}
GameAdService.getInstance().onGameMethodsCall(mActivity,"onDestroy",null, new GameSDKListener() {
@Override
public void callBack(String type, String parma) {
public function curl_post($url, $body, $headers){
//初始化
$curl = curl_init ( );
//设置抓取的url
curl_setopt ( $curl, CURLOPT_URL , $url);
//设置头文件的信息作为数据流输出
curl_setopt ( $curl, CURLOPT_HEADER , 1 );
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER , 1 );
//设置post方式提交
curl_setopt ( $curl, CURLOPT_POST , 1 );
//设置post参数
curl_setopt ( $curl, CURLOPT_POSTFIELDS , json_encode($body) );
//设置请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//执行命令
$data = curl_exec ( $curl );
//关闭URL请求
curl_close ( $curl );
//显示获得的数据
return json_decode($data, true);
}
});
```
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论