Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zw_game_sdk
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
CI / CD
CI / CD
流水线
日程表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
提交
问题看板
Open sidebar
zwwl
zw_game_sdk
Commits
671c2acb
提交
671c2acb
authored
11月 28, 2023
作者:
刘添
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新 AndroidSDK对接说明文档.md
上级
1817f38f
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
200 行增加
和
631 行删除
+200
-631
AndroidSDK对接说明文档.md
AndroidSDK对接说明文档.md
+200
-631
没有找到文件。
AndroidSDK对接说明文档.md
浏览文件 @
671c2acb
## GameSDKV1.0文档接入使用
# Android SDK 对接文档-v1.0
## GameSDKV1.0文档接入使用
# Android SDK 对接文档-v1.0
[
目录
](
#sec1
)
### 目录
1
[
对接
说明
](
#sec1
)
1.[
接入
说明
](
#sec1
)
1.1
[
术语表
](
#sec1.1
)
2
[
获取对接SDK
](
#sec
2
)
1.2
[
数据字典
](
#sec1.
2
)
[
说明
](
#sec2.1
)
1.4
[
主动登录
](
#sec1.4
)
3
[
导入配置SDK资源AndroidStudio
](
#sec3
)
1.5
[
下单逻辑
](
#sec1.5
)
[
添加依赖
](
#sec3.1
)
[
maven配置
](
#sec3.
2
)
2.[
Android SDK 接入
](
#sec
2
)
[
示例
](
#sec3.2
)
2.1
[
配置导入 Android SDK
](
#sec2.1
)
4
[
配置清单文件
](
#sec4
)
说明
[
清单配置说明
](
#sec4.1
)
SDK 地址
5
[
初始化 SDK
](
#sec5
)
必要参数
[
SDK调用说明
](
#sec5.1
)
导入示例
[
application
](
#sec5
.2
)
2.2
[
Android SDK 初始化
](
#sec2
.2
)
[
调用示例
](
#sec5.3
)
说明
6
[
登录
](
#sec6
)
调用方式
[
接口说明
](
#sec6.1
)
示例
[
参数说明
](
#sec6.2
)
2.3
[
登录
](
#sec2.3
)
[
调用示例
](
#sec6.3
)
说明
7
[
调起支付页面
](
#sec7
)
链接参数
[
调用说明
](
#sec7.1
)
示例
[
接口参数
](
#sec7.2
)
[
调用示例
](
#sec7.3
)
2.4
[
SDK 游戏下单支付
](
#sec2.4
)
[
下单支付字段说明
](
#sec7.4
)
说明
8
[
支付回调结果
](
#sec8
)
调用方式
[
支付文档说明
](
#sec8.1
)
请求参数
9
[
角色上报
](
#sec9
)
返回参数
[
调用示例
](
#sec9.1
)
示例
[
参数字段说明
](
#sec9.2
)
2.5
[
SDK 角色上报
](
#sec2.5
)
接口说明
调用方式
10
[
退出登录
](
#sec10
)
请求参数
[
接口回调说明
](
#sec10.1
)
返回参数
[
退出成功
](
#sec10.3
)
示例
[
退出失败
](
#sec10.4
)
[
调用示例
](
#sec10.5
)
## 1. 接入说明<a name="sec1"></a>
### 1.1 术语表<a name="sec1.1"></a>
11
[
退出应用
](
#sec11
)
[
调用方法
](
#sec11.1
)
[
调用示例
](
#sec11.1
)
> | 名称 | 说明 |
> | ----------- | --------------------------------------------------------------------------------------------------- |
> | CP | 游戏研发商。 |
> | Android_SDK | 由平台方提供给游戏研发商,用于游戏客户端接入平台登录,支付。 |
> | SDK 服务 | 由平台方开发,用于完成 SDK 的登录,支付流程,承接游戏服务端的数据。 |
> | 游戏服务 | 游戏研发商开发,为游戏提供服务。 |
> | 游戏客户端 | 游戏研发方商开发的网页版游戏。 |
> | 支付服务 | 由平台方调用支付服务,Google等 |
> | 游戏盒子 | 由平台方开发的游戏总入口,可以实现游戏登陆,支付,切换等;Android 游戏以 iframe 的形式在游戏盒子中运行。 |
> | Android 游戏入口 | 由 CP 方提供,进入 Android 游戏的入口链接。 |
### 1.2 数据字典<a name="sec1.2"></a>
> | 名称 | 说明 |
> | ----------- | -------------------------------------------------- |
> | player_id | 用户在平台的一个游戏中的唯一标识。 |
> | user_token | 用户在平台登录的会话标识。 |
> | game_id | 主游戏下的平台的唯一标识。 |
> | main_game_id | 主游戏在平台的唯一标识。 |
> | game_secret | 平台方提供,游戏签名秘钥。 |
> | cp_order_id | 游戏研发商订单唯一标识 |
> | order_id | 平台方订单唯一标识,与 cp_order_id 一一对应 |
>
### 1.4 主动登录<a name="sec1.4"></a>
```
mermaid
12
[
gradle依赖
](
#sec12
)
sequenceDiagram
游戏客户端->>Android_SDK:调用登录
13
[
apk打包
](
#sec13
)
Android_SDK->>玩家:重新登录
玩家-->Android_SDK:账号密码
[
混淆说明
](
#sec13.1
)
Android_SDK->>SDK服务:账号密码&game_id
SDK服务-->Android_SDK:player_id,user_token,game_id
[
打包说明
](
#sec13.2
)
Android_SDK->>Android_SDK:三方登录(google,facebook)
14
[
服务端接口说明
](
#sec14
)
#### 1、对接说明 <a name="sec1"></a>
1.1、此对接文档只适合与sdkv1.0.51.9版本。
1.2、所有SDK功能在GameSDK类中,可通过初始化获取改类对象,后续所有更新功能都调用这个类中方法完成
1.3、文档中所有GameSDK指S从平台获取arr文件或者远程依赖implementation("com.zw.game.sdk:gameSDk:1.0.51.9")
1.4、开发工具:要求使用Android Studio 3.0版本及以上,Gradle版本建议5.4.1版本及以上,Gradle插件(Android gradle plugin)版本建议3.2.2版本及以上,- Android SDK版本:最低支持Android 5.0版本(minSdkVersion>=21),targetSdkVersion不支持30以上,建议targetSdkVersion=28;
游戏包体的VersionCode以及VersionName必须设置,不要留空。
### 2、对接SDK<a name="sec2"></a>
从平台处获取对接SDK,android studio版本,选择V1.0.51.9的版本接入。
<a
name=
"sec2.1"
></a>
### 3、导入配置SDK资源Androidstudio项目<a name="sec3"></a>
#### 3.1、在app工程目录build.gradle中添加依赖<a name="sec3.1"></a>
```
implementation("com.zw.game.sdk:gameSDk:1.0.51.9")
```
#### 3.2、在主工程中添加maven<a name="sec3.2"></a>
```
maven { url 'http://nexus.zwwlkj01.top/repository/android-game/' }
//本地添加arr方式
maven {
url 'https://artifact.bytedance.com/repository/ttgamesdk/'
}
```
#### 3.3本地ARR在gradle依赖
```
```
### 1.5下单逻辑
// implementation "com.bytedance.ttgame:gbsdk_common_host:2.1.4.4"
```
mermaid
// implementation "com.bytedance.ttgame:gbsdk_common_plugin:2.1.4.4"
sequenceDiagram
// implementation "com.bytedance.ttgame:gbsdk_optional_aweme:2.1.4.4"
玩家->>游戏客户端: 充值
// implementation "com.bytedance.ttgame:gbsdk_optional_union_plugin:2.1.4.4"
游戏客户端->>Android_SDK: 订单信息
// implementation "com.bytedance.ttgame:gbsdk_optional_applog:2.1.4.4"
Android_SDK->>玩家:询问支付方式
// implementation "com.bytedance.ttgame:gbsdk_optional_ad:2.1.4.4"
玩家-->>Android_SDK:支付方式
// implementation 'com.github.gzu-liyujiang:Android_CN_OAID:4.2.4'
Android_SDK->>SDK服务器:订单信息&支付方式&os
SDK服务器-->>Android_SDK:订单号&支付渠道信息
Android_SDK-->>游戏客户端:订单状态(待支付)
Android_SDK->>玩家:等待支付
玩家-->>Android_SDK:支付
Android_SDK->>支付服务:调用支付
支付服务->>SDK服务:支付结果
SDK服务->>游戏服务:支付结果
游戏服务-->>SDK服务:success/fail
游戏服务->>游戏客户端:发货通知
游戏客户端-->>玩家:发货
```
```
## 2. AndroidSDK 接入<a name="sec3"></a>
### 2.1 配置导入 Android SDK<a name="sec3.1"></a>
#### 示例<a name="sec3.3"></a>
##### 说明


### 4、配置清单文件(具体请参考demo)<a name="sec4"></a>
1、参考demo中的清单文件配置,主要分为权限配置、sdk所需的组件配置,meta信息配置。(权限部分SDK已经适配,访问文件权限,Android10网络访问权限,安装适配等均已适配,但不包含所有设备)
<a
name=
"sec4.1"
></a>
> 游戏客户端通过引入外部 Maven方式或者aar包
##### SDK 依赖地址
>
**参数说明**:
>
implementation 'com.zwwl.legend.sdk:legend:1.0.0'
| 参数名 | 说明 |
##### 必要参数
|:--------| -------------:|
| game_id | 游戏唯一标识,由平台方提供 |
|game_secret|服务端对接时会用到,由平台方提供|
> | 参数 | 说明 |
> | ----------- | ---------------------------------- |
> | game_id | 游戏唯一标识,由平台方提供 |
> | main_game_id | 主游戏唯一标识,由平台方提供 |
##### 导入示例
```
1.
1、在主工程目录下build.gradle中的 (如遇到拉取不到仓库可使用阿里云代理):
<meta-data
android:name="game_id"
android:value="149" />
<!-- 巨量开放平台申请应用,其他对接游戏默认传0-->
<meta-data
android:name="app_id"
android:value="0" />
<!--用于判断是否激活巨量SDK,其他对接游戏默认false-->
<meta-data
android:name="status"
android:value="false" />
```
```
maven { url 'https://maven.aliyun.com/repository/jcenter' }
### 5、初始化SDK<a name="sec5"></a>
1、sdk初始化操作方法,最先调用,需要在主线程调用,最好游戏主界面activity中调用。此方法的可多次调用用于获得sdk全局管理器。
<a
name=
"sec5.1"
></a>
2、调用示例:在游戏主界面activity的onCreate方法中调用
3、自己主工程application需要继承GameSdkApplication
> **application调用示例**:<a name="sec5.2"></a>
```
```
> ```
allprojects{
repositories{
maven { url 'http://nexus.zwwlkj01.top/repository/Android/' }
public class App extends GameSdkApplication {
@Override
public void onCreate() {
super.onCreate();
}
}
}
}
> ```
```
1.
2、在APP子工程中build.gradle中添加依赖地址
> **初始化示例**:<a name="sec5.3"></a>
```
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
//游戏前必须首先进行初始化:
private void init() {
GameService.getInstance().onCreate(this, new InitZyCallback() {
@Override
public void onSuccess(int status) {
//1表示SDK默认登录初始化 2表示抖音
}
@Override
public void onFailed(Object o) {
showToast(o.toString());
}
});
//配置横竖屏,等一些可配置信息
ConfigInfo.allowPORTRAIT = false;
}
```
### 6、登录<a name="sec6"></a>
1、添加登录回调监听
<a
name=
"sec6.1"
></a>
```
public void addLoginListener(OnLoginListener onLoginListener)
```
-
说明:在登陆前必须注册登陆回调监听,用于接收登陆结果,登录成功返回token
-
需游戏服务端调用登录验证之后,才能进入游戏参照
[
SDK对接说明
](
#sec14
)
#### 参数说明<a name="sec6.2"></a>
| 参数 | 说明|
| :-------- | -------------: |
| OnLoginListener | 登录回调接口 |
-
参数类说明:OnLoginListener需要实现两个方法:
> **登录成功**:
```
void loginSuccess(Object data);
```
> **登录成功返回参数**:
| 参数 | 类型 | 说明 |
| :-------- | -------------: | -------------: |
| status_code | int| 状态码 |
| data| object | 返回数据 |
| msg| String| 描述信息 |
| data| object | 返回数据 |
|
data | object | 用户数据 |
|
player_id | String | 玩家ID |
|
avatar | String | 用户头像 |
|
has_identify | boolean | 是否实名 |
|
user_token | strng | token |
> **登录失败**:
```
void loginError(Object data);
```
> **登录失败返回参数**:
| 参数 | 类型 | 说明 |
| :-------- | -------------: | -------------: |
| status_code | int| 状态码 |
| data| object | 返回数据 |
| msg| String| 描述信息 |
| data| object | 返回数据 |
#### 调用示例<a name="sec6.3"></a>
```
```
GameService.getInstance().showLogin(new OnLoginListener() {
implementation 'com.zwwl.legend.sdk:legend:1.0.0'
@Override
public void loginSuccess(Object data) {
Log.e("loginSuccess",data+"");
//显示悬浮球(根据游戏需求显示,可以在初始化显示,可以登录成功之后显示)
GameService.getInstance().showBall(SdkDemoActivity.this);
}
@Override
public void loginError(Object data) {
}
});
```
```
### 2.2 Android SDK 初始化<a name="sec2.2"></a>
#### 抖音退出登录(不上架抖音游戏可忽略此方法)
在主工程MainActivity中初始化init方法
```
```
/***
GameService.getInstance().outLoginDy(new OnLogoutListener() {
init方法参数1、当前工程上下文、2游戏game_id(可为空,但是在AndroidManifest.xml中必须设置)3、statue渠道号(可为空、作为拓展参数使用)
@Override
*/
public void logoutSuccess(String s) {
GameService.getInstance().init(this,"1","")
}
@Override
public void logoutError(String s) {
}
});
```
```
### 配置游戏game_id
#### 游戏中有切换登录按钮可对接switchLogin方法(上架抖音平台)
在主工程AndroidManifest.xml清单文件中配置Meta参数,name值:game_id、value值:即平台游戏ID
```
```
//处理方式可参考登录方法
<meta-data
GameService.getInstance().switchLogin(new OnLoginListener() {
android:name="game_id"
@Override
public void loginSuccess(Object data) {
}
@Override
public void loginError(Object data) {
}
android:value="1"/>
});
//主游戏ID
<meta-data
android:name="main_game_id"
android:value="1"/>
```
```
###
# 悬浮球生命周期中调佣(对接抖音不需要)
###
2.3 调用登录方法<a name="sec2.3"></a>
```
```
@Override
GameService.getInstance().showLogin(object : OnLoginListener<Any?> {
protected void onDestroy() {
override fun loginSuccess(data: Any?) {
super.onDestroy();
GameService.getInstance().onDestroy(this);
}
override fun loginError(data: Any?) {}
}
})
```
### 7、调起支付页面<a name="sec7"></a>
1、调起支付页面方法
<a
name=
"sec7.1"
></a>
```
```
public void showPay(CustomPayParam payParam, OnPaymentListener paymentListener)
### 退出登录方法
```
```
GameService.getInstance().loginOut(object:InitZyCallback{
### 接口参数<a name="sec7.2"></a>
override fun onSuccess(status: String?) {
| 参数 | 说明 |
|:----|-----:|
|payParam|支付参数|
|paymentListener|回调接口|
#### 调用示例<a name="sec7.3"></a>
```
CustomPayParam data=new CustomPayParam();
CustomPayParam.RoleBean role=new CustomPayParam.RoleBean();
CustomPayParam.OrderBean orderInfo=new CustomPayParam.OrderBean();
//data.setRole_id("425");
role.setEvent("other");
role.setServer_id("100001");
role.setRole_name("主宰传奇");
role.setCp_role_id("2413930833603897345");
role.setServer_name("主宰服");
role.setRole_level("83");
role.setRole_vip("0");
orderInfo.setCp_order_id("312223131");
orderInfo.setAmount("1");
orderInfo.setProduct_price("1");
orderInfo.setProduct_id("101");
orderInfo.setProduct_cnt("1");
orderInfo.setProduct_name("8元档充值");
orderInfo.setProduct_desc("商品");
orderInfo.setExt("测试数据");
data.setRole(role);
data.setOrder(orderInfo);
GameService.getInstance().showPay(data, new OnPaymentListener() {
@Override
public void Success(String msg) {
}
}
@Override
override fun onFailed(o: String?) {
public void Failed(String msg) {
}
}
});
```
#### 下单支付字段说明<a name="sec7.4"></a>
| 名称 | 类型 | 是否必须 | 默认值|说明 |
|:--------------|-------:|-----:|-----:|-----------------:|
| cp_order_id | string | 必须 || CP订单ID |
| amount | number | 必须 | |商品总价(单位:分 |
| product_price | number | 必须 | |商品价格(整数,后台自动换算分) |
| product_id | String | 非必须 |0| 商品ID |
| product_cnt | number | 必须 | |商品数量 |
| product_name | string | 必须 |""| 商品名称 |
| product_desc | string | 非必须 |""| 商品描述 |
| ext | string | 必须 |""| 订 调用方定义 单额外信息用(json)|
| event | string | 必须 |""| 事件|
| server_id | string | 必须 |0| 区服id |
| server_name | string | 必须 |""| 区服名称|
| cp_role_id | string | 必须 | cp角色id |
| role_name | string | 必须 | ""|角色名称 |
| role_level | string | 必须 |0| 角色等级 |
| role_vip | string | 必须 | 0|角色vip等级 |
| role_id | string | 必须 |0| 角色ID |
### 8、支付回调通知<a name="sec8"></a>
1.
1、支付回调通知请参考对接文档H5 SDK 对接文档-v1.0、服务端接入2.3
<a
name=
"sec8.1"
></a>
### 9、角色上报<a name="sec9"></a>
#### 调用示例<a name="sec9.1"></a>
})
```
```
GameInfoSetting setting=new GameInfoSetting();
GameRoleInfo roleInfo=new GameRoleInfo();
roleInfo.setEvent("create");//事件类型,online: 角色登录, create: 创建角色,level_up: 提升等级,offline: 角色退出,other: 其他,delete: 删除角色
roleInfo.setServer_id("100001");//区服ID
roleInfo.setServer_name("主宰服");//区服
roleInfo.setCp_role_id(System.currentTimeMillis()+"");//CP角色ID
roleInfo.setRole_name("大鲨鱼");//角色名称
roleInfo.setRole_level("15"); //角色等级
roleInfo.setRole_vip("23");//角色VIP等级
roleInfo.setCp_account("23");//cp账号
roleInfo.setCombat_num("25564");//角色战力
roleInfo.setOnline_time("15426");//本次在线时长
roleInfo.setAttack("0");//攻击力
roleInfo.setProfession("法师");//职业
roleInfo.setGang_name("大竹帮");//帮会(行会)名称
roleInfo.setTrans_level("5");//转生等级
roleInfo.setSponsor_level("12");//赞助等级/会员等级
roleInfo.setReiki_num("12"); //灵符值
//没有官邸等级之类传请传空
roleInfo.setMain_city_level("大司马");//官邸等级
roleInfo.setPower("阔克萨斯");//国家
roleInfo.setChapter_index("12");//章节等级
setting.setRole(roleInfo);
GameSdk.getInstance().putRoleReport(setting, new SubmitRoleInfoCallBack() {
@Override
public void onSuccess(Object o) {
showToast(o.toString()+"");
}
@Override
public void onFailure(int code, String msg) {
}
});
```
#### 参数字段说明<a name="sec9.2"></a>
> | 参数 | 必选 | 类型 | 默认值 | 说明 |
> | :---------------------------------------------------------- | :---- | :----- | :----- | :----------- |
> | event | true | String | other | 事件类型 |
> | server_id | true | String | - | 区服ID |
> | server_name | true | String | - | 区服名称 |
> | cp_role_id | true | String | - | 游戏方角色ID |
> | role_name | true | String | - | 游戏角色名称 |
> | role_level | true | Int | - | 角色等级 |
> | cp_account | false | String | - | cp账号 |
> | role_vip | false | Int | 0 | 角色VIP等级(赞助等级) |
> | combat_num | false | String | "0" | 角色战力 |
> | reiki_num | false | Int | 0 | 角色灵符值 |
> | online_time | false | Int | 0 | 本次在线时长 |
> | attack | false | Int | 0 | 攻击力 |
> | profession | false | String | - | 职业 |
> | gang_name | false | String | - | 帮会(行会)名称 |
> | trans_level | false | Int | 0 | 转生等级 |
事件类型event
| EVENT | 说明 |
### 2.4下单方法<a name="sec2.4"></a>
| -------- | -------- |
| create | 创建角色 |
| online | 角色上线 |
| offline | 角色下线 |
| level_up | 角色升级 |
| delete | 删除角色 |
| recharge | 角色充值 |
| other | 其他 |
### 10、退出登录<a name="sec9"></a>
#### 添加登出回调监听<a name="sec10.1"></a>
```
public void outLoginDy(OnLogoutListener onLogoutListener)
```
```
private fun googlePlay(){
val data = CustomPayParam()
val role = CustomPayParam.RoleBean()
val orderInfo = CustomPayParam.OrderBean()
1、在退出登陆前必须注册退出登陆回调监听,用于接收退出登陆,或者登陆过期的退出登陆结果。
role.event = "other"
role.server_id = "100001"
2、 参数类说明:OnLogoutListener需要实现两个方法:
role.role_name = "主宰传奇"
role.cp_role_id = System.currentTimeMillis().toString() + ""
3、 退出登陆成功:
role.server_name = "主宰服"
role.role_level = "83"
4、退出登录成功并返回所有信息与code状态
role.role_vip = "0"
#### 退出登录成功<a name="sec10.3"></a>
```
orderInfo.cp_order_id = System.currentTimeMillis().toString() + ""
public void logoutSuccess(String s);
orderInfo.amount = "100"
orderInfo.product_price = "100"
orderInfo.product_id = "1505dian" //Google后台配置商品ID
orderInfo.product_cnt = "1"
orderInfo.product_name = "1元档充值"
orderInfo.product_desc = "商品"
orderInfo.ext = "测试数据"
data.role = role
data.order = orderInfo
GameService.getInstance().googlePlay(data,object :OnPlayListener<Any>{
override fun onSuccess(t: Any?) {
```
}
override fun onFailure(msg: String?) {
#### 退出登录失败<a name="sec10.4"></a>
}
})
}
```
```
public void logoutError(String msg);
调用支付方法时请在Activity中的生命周期onDestroy方法中调用GameService.getInstance().onDestroy()
```
```
override fun onDestroy() {
#### 调用示例<a name="sec10.5"></a>
super.onDestroy()
GameService.getInstance().onDestroy()
```
}
GameService.getInstance().outLoginDy(new OnLogoutListener() {
@Override
public void logoutSuccess(String s) {
}
@Override
public void logoutError(String s) {
}
});
```
```
-
说明:在需要退出登陆时可调用此方法,注意此方法为退出,并不会调出登陆界面
### 11、退出应用弹框<a name="sec10"></a>
1、添加退出回调监听
### 2.5角色上报(角色上报参数字段请参考文档字段说明)<a name="sec2.5"></a>
```
private fun setRoleReporting(type:String){
val map=HashMap<String,String>()
map["attack"] = "0"
map["chapter_index"] = "0"
map["combat_num"] = "0"
map["cp_role_id"] = "0"
map["event"] = type
map["gang_name"] = "unknown"
map["main_city_level"] = "0"
map["online_time"] = "0"
map["power"] = "0"
map["profession"] = "unknown"
map["reiki_num"] = "0"
map["role_level"] = "23"
map["cp_role_id"] = "0"
map["role_name"] = "啊啊啊"
map["role_vip"] = "0"
map["server_id"] = "4433175"
map["server_name"] = "4433175"
map["sponsor_level"] = "0"
map["trans_level"] = "0"
GameService.getInstance().setRoleReporting(GsonUtils.toJson(map),"",mPayerId,object :RoleInfoCallBack<Any>{
override fun onSuccess(t: Any?) {
mTvRoleInfo.text=t.toString()
#### 调用方法<a name="sec11.1"></a>
}
```
public void exitApp()
```
1、退出应用程序弹出提示框。
override fun onFailure(msg: String?) {
#### 调用示例<a name="sec11.2"></a>
}
```
})
@Override
public void onBackPressed() {
GameService.getInstance().exitApp();
}
}
```
-
说明:onBackPressed方法调用
### 12 gradle依赖说明<a name="sec12"></a>
1、打包arr依Glide库需要在主工程中添加依赖
2、如遇到OKhttp无法下载下来,请按照下方依赖进行添加
```
api 'com.github.bumptech.glide:glide:4.11.0'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
```
```
### 13 apk打包<a name="sec13"></a>
1.
sdk 的代码已经经过混淆,请勿混淆sdk的代码
<a
name=
"sec13.1"
></a>
2、打包apk签名机制需要勾选V1、V2签名
<a
name=
"sec13.2"
></a>
3、sdk代码已经经过混淆,请不要再次混淆sdk代码,demo会贴出SDK混淆代码,可复制到自己混淆中(具体请参考demo)
### 14 服务端接口 调用方直接使用http 调用接口:<a name="sec14">
### 接口地址
> 【POST】 /android_sdk/auth/checkLogin
##### 请求参数
> **Headers**:
>
> | 参数 | 必选 | 参数值 | 说明 |
> | ------------ | ---- | ---------------- | ----------------------------------- |
> | 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 | true | Int | - | 状态码 1 正常在线,否则不允许登录|
> | msg | true | STRING | - | 返回信息 |
> | data | false | OBJECT | [] | 返回数据(空) |
>
##### 接口说明
调用方检测当前用户是否登录过,在线状态; 如果返回参数不是正常登录则不允许登录游戏。
##### 请求示例
```php
<php?
public function checkLogin(){
$host = 'https://zyou.wozhangwan.com/api';
$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);
}
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论