lizhihui

Update 公共SDK客户端接入文档.md

1 # 公共SDK接入文档 # 1 # 公共SDK接入文档 #
2 2
3 ## 接入必读 3 ## 接入必读
4 -`注意!cp需在获取以下权限收到回调后才能调用公共的其他api接口 4 +注意!
5 -android.permission.WRITE_EXTERNAL_STORAGE 5 +游戏如有需要获取以下权限的,收到权限回调之后再调用公共SDK的初始化接口
6 -android.permission.READ_PHONE_STATE` 6 +如无需要获取以下权限,则直接调用公共SDK的初始化接口
7 +
8 +```xml
9 +<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
10 +<uses-permission android:name="android.permission.READ_PHONE_STATE" />
11 +```
7 12
8 ` 13 `
9 -接入公共SDK测试没问题后游戏打出一个母包,需要上哪个渠道使用打包工具进行打对应渠道包。 14 +接入公共SDK测试没问题后游戏打出为 母包 ,后续使用打包工具打对应 渠道包
10 ` 15 `
11 16
12 ## 1、开发环境搭建 ## 17 ## 1、开发环境搭建 ##
...@@ -17,22 +22,22 @@ android.permission.READ_PHONE_STATE` ...@@ -17,22 +22,22 @@ android.permission.READ_PHONE_STATE`
17 #### 1.2、复制SDK压缩包中assets目录下的所有内容到游戏工程的assets目录 #### 22 #### 1.2、复制SDK压缩包中assets目录下的所有内容到游戏工程的assets目录 ####
18 23
19 - 将游戏中的闪屏图片放到assets中poolsdk_splash目录下(选用,图片文件名任意,最多支持2张闪屏) 24 - 将游戏中的闪屏图片放到assets中poolsdk_splash目录下(选用,图片文件名任意,最多支持2张闪屏)
20 -- 将assets中的poolsdk.xml文件替换(具体文件请与相关人员申请) 25 +- 将assets中的poolsdk.xml配置文件替换(具体文件请与运营人员申请)
21 26
22 -#### 1.3、修改游戏工程的AndroidManifest.xml(可以参照复制Demo中 AndroidManifest.xml文件) #### 27 +#### 1.3、修改游戏工程的AndroidManifest.xml ####
23 28
24 -- 添加声明权限: 29 +- 添加声明权限:(因国家相关法规规定,不能未向用户告知同意收集用户信息,所以游戏自行处理自己必要的权限申请,渠道SDK自身需要的权限由渠道自行处理,以下非必要的权限可以不写)
25 30
26 ``` 31 ```
27 - <uses-permission android:name="android.permission.INTERNET" /> 32 + <uses-permission android:name="android.permission.INTERNET" /> <!-- 必要 -->
28 - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 33 + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 非必要 -->
29 - <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 34 + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 非必要 -->
30 - <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 35 + <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 非必要 -->
31 - <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 36 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 非必要 -->
32 ``` 37 ```
33 38
34 39
35 -### 2、功能接口 (注意:以下所有接口都必须在 SDK 初始化完成之后才能调用) ### 40 +### 2、功能接口 (注意:以下所有接口都必须在游戏收到 SDK 初始化完成之后才能调用) ###
36 41
37 42
38 #### 2.1、继承 PoolSDKApplication(必接) 43 #### 2.1、继承 PoolSDKApplication(必接)
...@@ -49,7 +54,6 @@ android.permission.READ_PHONE_STATE` ...@@ -49,7 +54,6 @@ android.permission.READ_PHONE_STATE`
49 public class XXXXApplication extends PoolSDKApplication { 54 public class XXXXApplication extends PoolSDKApplication {
50 @Override 55 @Override
51 public void onCreate() { 56 public void onCreate() {
52 - // TODO Auto-generated method stub
53 super.onCreate(); 57 super.onCreate();
54 } 58 }
55 } 59 }
...@@ -75,7 +79,6 @@ android.permission.READ_PHONE_STATE` ...@@ -75,7 +79,6 @@ android.permission.READ_PHONE_STATE`
75 PoolSdkHelper.init(this, new PoolSDKCallBackListener() { 79 PoolSdkHelper.init(this, new PoolSDKCallBackListener() {
76 @Override 80 @Override
77 public void poolSdkCallBack(int code, String msg) { 81 public void poolSdkCallBack(int code, String msg) {
78 - // TODO Auto-generated method stub
79 PoolSdkLog.logInfo("callback: code:" + code + "msg:" + msg); 82 PoolSdkLog.logInfo("callback: code:" + code + "msg:" + msg);
80 switch (code) { 83 switch (code) {
81 case PoolSDKCode.POOLSDK_INIT_SUCCESS:// 初始化成功 84 case PoolSDKCode.POOLSDK_INIT_SUCCESS:// 初始化成功
...@@ -83,22 +86,8 @@ android.permission.READ_PHONE_STATE` ...@@ -83,22 +86,8 @@ android.permission.READ_PHONE_STATE`
83 login(); 86 login();
84 break; 87 break;
85 case PoolSDKCode.POOLSDK_INIT_FAIL: 88 case PoolSDKCode.POOLSDK_INIT_FAIL:
89 + //初始化失败
86 break; 90 break;
87 - case PoolSDKCode.POOLSDK_QUERY_WITH_PRODUCTS://查询商品信息返回
88 - //msg:为查询的结果值
89 - /**
90 - * {//查询商品信息返回数据
91 - * "android.test.purchased0": {//key为商品ID
92 - * "displayPrice": "₩1167.28",//显示价格
93 - * "price": "₩1,167", //实际价格(去除小数点) 充值传递
94 - * "priceAmountMicros": 1167284249, //数字价格
95 - * "priceCurrencyCode": "KRW", //货币代码
96 - * "sku": "android.test.purchased0",//商品ID
97 - * "title": "名称示例"
98 - * }
99 - * }
100 - */
101 - break;
102 } 91 }
103 } 92 }
104 }); 93 });
...@@ -166,7 +155,7 @@ public static void submitRoleData(final PoolRoleInfo poolRoleInfo,final PoolRole ...@@ -166,7 +155,7 @@ public static void submitRoleData(final PoolRoleInfo poolRoleInfo,final PoolRole
166 PoolRoleInfo 实体类字段说明(以下参数都为必传参数,如游戏没有的传 "无" 或者 "0") 155 PoolRoleInfo 实体类字段说明(以下参数都为必传参数,如游戏没有的传 "无" 或者 "0")
167 | 字段名 | 说明 | 156 | 字段名 | 说明 |
168 | -------------- | ---------------------------------------- | 157 | -------------- | ---------------------------------------- |
169 -| callType | 调用类型Type_EnterGame 登录游戏主 场景;Type_CreatRole 为创建角 色;Type_RoleUpgrade 为角色更新(vip等级升级也由此类型上报) ;Type_SelectServer 为选择服务器 ;Type_ExitServer 为退出服务器 ;Type_Change_RoleName 为改名 ;Type_SelectRole 为选角 ;Type_CheckPoint_Start 为关卡开始 ;Type_CheckPoint_End 为关卡结束 ;| 158 +| callType | 调用类型 Type_EnterGame 进入游戏(必接); Type_CreatRole 创建角色(必接); Type_RoleUpgrade 为角色更新(vip等级升级也由此类型上报)(必接); Type_SelectServer 为选择服务器(选接); Type_ExitServer 为退出服务器 (选接); Type_Change_RoleName 为改名(选接); Type_SelectRole 为选角(选接); Type_CheckPoint_Start 为关卡开始(选接); Type_CheckPoint_End 为关卡结束(选接);|
170 | roleId | 角色 Id(请用数字) | 159 | roleId | 角色 Id(请用数字) |
171 | roleName | 角色名称 | 160 | roleName | 角色名称 |
172 | roleLevel | 角色等级 (请用数字) | 161 | roleLevel | 角色等级 (请用数字) |
...@@ -220,6 +209,8 @@ public static void submitRoleData(final PoolRoleInfo poolRoleInfo,final PoolRole ...@@ -220,6 +209,8 @@ public static void submitRoleData(final PoolRoleInfo poolRoleInfo,final PoolRole
220 poolRoleInfo.setCallType(PoolRoleInfo.Type_EnterGame);//进入游戏(第一次创建角色后需再调用一次进入游戏) 209 poolRoleInfo.setCallType(PoolRoleInfo.Type_EnterGame);//进入游戏(第一次创建角色后需再调用一次进入游戏)
221 // poolRoleInfo.setCallType(PoolRoleInfo.Type_CreateRole);//创建角色(如果游戏创建角色时没有角色名,需要在用户创建角色名时调用多一次进入游戏统计,否则用户名无法正常统计,投放测试无法通过) 210 // poolRoleInfo.setCallType(PoolRoleInfo.Type_CreateRole);//创建角色(如果游戏创建角色时没有角色名,需要在用户创建角色名时调用多一次进入游戏统计,否则用户名无法正常统计,投放测试无法通过)
222 // poolRoleInfo.setCallType(PoolRoleInfo.Type_RoleUpgrade);//角色升级(vip等级升级也由此类型上报) 211 // poolRoleInfo.setCallType(PoolRoleInfo.Type_RoleUpgrade);//角色升级(vip等级升级也由此类型上报)
212 +
213 + // 以下类型选接
223 // poolRoleInfo.setCallType(PoolRoleInfo.Type_SelectServer);//选择服务器 214 // poolRoleInfo.setCallType(PoolRoleInfo.Type_SelectServer);//选择服务器
224 // poolRoleInfo.setCallType(PoolRoleInfo.Type_ExitServer);//退出服务器 215 // poolRoleInfo.setCallType(PoolRoleInfo.Type_ExitServer);//退出服务器
225 // poolRoleInfo.setCallType(PoolRoleInfo.Type_Change_RoleName);//改名 216 // poolRoleInfo.setCallType(PoolRoleInfo.Type_Change_RoleName);//改名
...@@ -253,15 +244,15 @@ public static void pay(final PoolPayInfo poolPayInfo,final PoolPayListener poolP ...@@ -253,15 +244,15 @@ public static void pay(final PoolPayInfo poolPayInfo,final PoolPayListener poolP
253 支付信息实体类(PoolPayInfo)字段说明 244 支付信息实体类(PoolPayInfo)字段说明
254 | 参数 | 说明 | 245 | 参数 | 说明 |
255 | ----------- | ------------------- | 246 | ----------- | ------------------- |
256 -| amount | 金额(单位元,必须大于 0,需传入整型数据`传小数时兑换比例和金额相乘为整数`) | 247 +| amount | 金额(单位元,必须大于 0,需传入整型数据`传小数时兑换比例和金额相乘为整数(即金额传 "0.99" 兑换比例传 "100")`) |
257 -| productId | 商品 ID(如果没有可以传空字符 串) | 248 +| productId | 商品 ID(如果没有可以传空字符串) |
258 | productName | 商品描述 | 249 | productName | 商品描述 |
259 | roleid | 角色 id | 250 | roleid | 角色 id |
260 | rolelevel | 角色等级 | 251 | rolelevel | 角色等级 |
261 | roleName | 角色名称 | 252 | roleName | 角色名称 |
262 | serverId | 服务器 id | 253 | serverId | 服务器 id |
263 | serverName | 服务器名称 | 254 | serverName | 服务器名称 |
264 -| exchange | 游戏币与人民币(元)的兑换比例 `单机游戏时直接传对应购买的道具数量或游戏币数量` | 255 +| exchange | 游戏币与人民币(元)的兑换比例(一般填10) `单机游戏时直接传对应购买的道具数量或游戏币数量` |
265 | custom | 自定义透传参数,通过回调函数原样返回 | 256 | custom | 自定义透传参数,通过回调函数原样返回 |
266 257
267 258
...@@ -292,7 +283,7 @@ public static void pay(final PoolPayInfo poolPayInfo,final PoolPayListener poolP ...@@ -292,7 +283,7 @@ public static void pay(final PoolPayInfo poolPayInfo,final PoolPayListener poolP
292 poolPayInfo.setExchange("10"); 283 poolPayInfo.setExchange("10");
293 // 自定义参数 284 // 自定义参数
294 poolPayInfo.setCustom("我是自定义参数"); 285 poolPayInfo.setCustom("我是自定义参数");
295 - // 充值回调以服务端回调为准 286 + // 充值回调以服务端回调为准,部分渠道客户端SDK无回调
296 PoolSdkHelper.pay(poolPayInfo, new PoolPayListener() { 287 PoolSdkHelper.pay(poolPayInfo, new PoolPayListener() {
297 @Override 288 @Override
298 public void onPaySuccess(String paramCustom) { 289 public void onPaySuccess(String paramCustom) {
...@@ -316,6 +307,11 @@ public static void pay(final PoolPayInfo poolPayInfo,final PoolPayListener poolP ...@@ -316,6 +307,11 @@ public static void pay(final PoolPayInfo poolPayInfo,final PoolPayListener poolP
316 ```java 307 ```java
317 public static boolean hasChannelCenter() 308 public static boolean hasChannelCenter()
318 ``` 309 ```
310 +
311 +```java
312 + PoolSdkHelper.hasChannelCenter();//判断渠道SDK有无用户中心
313 +```
314 +
319 #### 2.7、用户中心接口(必接) 315 #### 2.7、用户中心接口(必接)
320 316
321 说明:打开渠道用户中心界面 317 说明:打开渠道用户中心界面
...@@ -335,10 +331,8 @@ public static void openChannelCenter() ...@@ -335,10 +331,8 @@ public static void openChannelCenter()
335 * 如果有的话,游戏中需要添加按钮,点击按钮调用PoolSdkHelper.openChannelCenter(); 331 * 如果有的话,游戏中需要添加按钮,点击按钮调用PoolSdkHelper.openChannelCenter();
336 * 如果没有,则不需要显示按钮,也不用调用下面的接口 332 * 如果没有,则不需要显示按钮,也不用调用下面的接口
337 */ 333 */
338 - private void channelCenter() {
339 - PoolSdkHelper.openChannelCenter();
340 - }
341 334
335 + PoolSdkHelper.openChannelCenter();
342 ``` 336 ```
343 #### 2.8、注销登录监听接口 337 #### 2.8、注销登录监听接口
344 338
...@@ -362,9 +356,10 @@ public static void setLogoutCallback(final PoolLogoutListener poolLogoutListener ...@@ -362,9 +356,10 @@ public static void setLogoutCallback(final PoolLogoutListener poolLogoutListener
362 PoolSdkHelper.setLogoutCallback(new PoolLogoutListener() { 356 PoolSdkHelper.setLogoutCallback(new PoolLogoutListener() {
363 @Override 357 @Override
364 public void onLogoutSuccess() { 358 public void onLogoutSuccess() {
365 - // TODO: 此处处理SDK注销成功后的逻辑 359 + //游戏收到该注销回调,需要退出当前账号,回到初始界面后,调用SDK的登录接口
366 - login();
367 PoolSdkLog.logInfo("游戏中logoutSuccess"); 360 PoolSdkLog.logInfo("游戏中logoutSuccess");
361 +
362 + login();
368 } 363 }
369 }); 364 });
370 ``` 365 ```
...@@ -571,21 +566,28 @@ public static void showExitDialog(final PoolExitDialogListener exitDialogListene ...@@ -571,21 +566,28 @@ public static void showExitDialog(final PoolExitDialogListener exitDialogListene
571 | poolExpansionListener | 方法回调参数,实现onSuccess方法 | 566 | poolExpansionListener | 方法回调参数,实现onSuccess方法 |
572 567
573 ### 2.13、获取渠道包标识(可选) ### 568 ### 2.13、获取渠道包标识(可选) ###
569 +```
570 + 对应打包工具的 渠道号
574 接口名称:PoolSdkHelper.getGameChannelId() 571 接口名称:PoolSdkHelper.getGameChannelId()
575 接口说明:获取在企业平台配置的渠道标识,返回类型为 String 572 接口说明:获取在企业平台配置的渠道标识,返回类型为 String
573 +
574 + 对应打包工具的 渠道标识1
576 接口名称:PoolSdkHelper. getChannelParameter1 () 575 接口名称:PoolSdkHelper. getChannelParameter1 ()
577 接口说明:获取在企业平台配置的渠道参数 1,返回类型为 String 576 接口说明:获取在企业平台配置的渠道参数 1,返回类型为 String
578 - 接口名称:PoolSdkHelper. getChannelParameter2 () 577 +
578 + 对应打包工具的 渠道标识2
579 + 接口名称:PoolSdkHelper. getChannelParameter2 ()
579 接口说明:获取在企业平台配置的渠道参数 2,返回类型为 String 580 接口说明:获取在企业平台配置的渠道参数 2,返回类型为 String
581 +```
580 ### 2.14、获取渠道自定义参数(可选) ### 582 ### 2.14、获取渠道自定义参数(可选) ###
581 接口名称:PoolSdkHelper.getCustomValue() 583 接口名称:PoolSdkHelper.getCustomValue()
582 接口说明:获取在企业平台配置的渠道自定义参数,返回类型为 String 584 接口说明:获取在企业平台配置的渠道自定义参数,返回类型为 String
583 -### 2.15、打开论坛、社区接口 ### 585 +### 2.15、打开论坛、社区接口(选接) ###
584 接口名称:PoolSkHelper.openForum() 586 接口名称:PoolSkHelper.openForum()
585 接口说明:打开渠道的论坛界面 587 接口说明:打开渠道的论坛界面
586 588
587 589
588 -### 2.16、聊天统计 ### 590 +### 2.16、聊天统计(选接) ###
589 591
590 说明:在用户发送聊天信息时调用该接口 592 说明:在用户发送聊天信息时调用该接口
591 593
...@@ -604,121 +606,22 @@ level | 角色等级 ...@@ -604,121 +606,22 @@ level | 角色等级
604 serverId | 服务器ID 606 serverId | 服务器ID
605 serverName | 服务器名称 607 serverName | 服务器名称
606 608
607 -### 2.17、实名认证(防沉迷)接口 ### 609 +### 2.17、实名认证(防沉迷)接口(必接) ###
608 610
609 -说明:游戏方需要渠道SDK实名认证信息时调用(请在登陆成功后再调用) 611 +- 查询渠道实名状态结果(请游戏在收到登录成功回调后调用)
610 -
611 -- 显示实名页面功能
612 -
613 -```java
614 -/** 是否存在接口
615 - * @param functionName (是否有实名页面界面接口传"hasRealNameVerifyView")
616 - * @return true:为存在 false:不存在 */
617 - public static boolean hasFunction(String functionName){
618 - }
619 -
620 -//回调结果到初始化监听接口中
621 -public void poolSdkCallBack(int code, String msg) {
622 - if(code== PoolSDKCode.POOLSDK_EXTENDS_CODE1)//实名认证成功才有回调
623 - {
624 - //msg为生日 格式(与查询的结果一样):19900101
625 - }
626 -}
627 -
628 -/** *
629 -* 显示实名页面
630 -* @param funcName 方法名 (显示实名认证页面接口"showRealNameVerifyView")
631 -* @param param 传空Map
632 -* @return
633 -*/
634 -public static String callFunc(String funcName, Map<Object, Object> param){}
635 -```
636 -- 查询实名状态结果
637 612
638 ```java 613 ```java
639 public String verifyRealName(Activity paramActivity) 614 public String verifyRealName(Activity paramActivity)
640 ``` 615 ```
641 616
642 -默认返回 "" (空字符串)为渠道SDK没有实名认证接口,游戏方需要自己实现该功能 617 +- 默认返回 "" (空字符串)为渠道SDK没有实名认证接口,游戏方需要自己实现该功能(或者接入公共防沉迷SDK)
643 -
644 -返回 "0" (字符串)为渠道有实名未认证,但该玩家未认证
645 -
646 -如果有实名认证接口,渠道有返回生日则返回生日(如"19900101")
647 -
648 -没有请运营跟渠道确认,到底返回成年日期还是未成年日期
649 -
650 -### 2.18、事件上报接口
651 -
652 -```
653 -/**
654 - * @param context 传getApplicationContext()
655 - * @param eventType 事件类型(PoolEventType类中获取对应事件类型)
656 - * @param eventValue 参数值(充值时传PoolEventParameterName属性变量键值对)
657 - */
658 -public static void trackEvent(Context context, String eventType, Map<String, Object> eventValue);
659 -```
660 -
661 -游戏许上报的事件类型有:
662 -```
663 -PoolEventType类中对应的类型:
664 - POOL_RES_LOADED 资源加载完毕
665 - POOL_TUTORIAL_COMPLETION 新手流程结束
666 - POOL_FIRST_DAY_CHECKPOINT_TO_VALUE 副本关卡(创角首日达到的某个关卡)(具体关卡cp跟渠道沟通)
667 - POOL_ENTER_PARTY 加入公会/联盟等
668 - POOL_FIRST_DAY_UPDATE_TO_LEVEL1 首日更新到某个等级(具体等级cp跟渠道沟通)
669 - POOL_UPDATE_TO_LEVEL 更新到某个等级
670 - POOL_FIRST_RECHARGE 首冲
671 - POOL_PAY_SUCCESS 充值成功
672 - POOL_FIRST_DAY_RECHARGE_TO_VALUE 首日充值达到某个值时(具体数值cp跟渠道沟通)
673 - POOL_BUY_MOUTH_CARD 购买月卡
674 - POOL_BIG_RECHARGE 累积充值达到某个数额(具体数值cp跟渠道沟通)
675 - POOL_RETAINED_2_DAY 领取七天礼包的第二天奖励时
676 - POOL_RETAINED_3_DAY 领取七天礼包的第三天奖励时
677 - POOL_RETAINED_7_DAY 领取七天礼包的第七天奖励时
678 - POOL_FIRST_PURCHASE_FUND 首次成长基金充值
679 - POOL_VIP_LEVEL_TO_TARGET_LEVEL vip达到某个等级
680 - POOL_BUY_ANNUAL_CARD 购买年卡
681 - POOL_FIRST_RECHARGE_9999 首次储值99.99美元
682 -```
683 618
619 +- 返回 "0" (字符串)为渠道有实名未认证,但该玩家未认证
684 620
685 -代码示例: 621 +- 如果有实名认证接口,渠道有返回生日则返回生日(如"19900101")
686 -```
687 -充值成功类型例子:
688 -Map<String,Object> valueMap = new HashMap<>();
689 -valueMap.put(PoolEventParameterName.POOL_ORDER_ID,System.currentTimeMillis()+"");//订单号
690 -valueMap.put(PoolEventParameterName.POOL_CURRENCY,"USD");//货币类型 USD:美元 CNY:人民币
691 -valueMap.put(PoolEventParameterName.POOL_PRICE,6);//充值金额
692 -PoolSdkHelper.trackEvent(getApplicationContext(),PoolEventType.POOL_PAY_SUCCESS,valueMap);
693 -
694 -其他类型例子:
695 -PoolSdkHelper.trackEvent(getApplicationContext(), PoolEventType.POOL_RES_LOADED,null);
696 -```
697 622
698 623
699 -### 2.19、商品查询接口(查询结果返回在初始化回调中,具体可查看初始化接口或者Demo) 624 +### 2.20、客服中心接口(选接)
700 -```java
701 - /**
702 - * 拓展方法
703 - *
704 - * @param funcName 方法名(查询商品接口传"queryWithProducts")
705 - * @param param 传递参数(此处Map传键为商品ID值为空)
706 - * @return
707 - */
708 - public static String callFunc(String funcName, Map<Object, Object> param) {
709 -```
710 -
711 -代码示例:
712 -```java
713 - Map productMap = new HashMap<Object, Object>();
714 - productMap.put("商品ID", "");
715 - productMap.put("商品ID", "");
716 - PoolSdkHelper.callFunc("queryWithProducts", productMap);
717 -```
718 -
719 -
720 -
721 -### 2.20、客服中心接口
722 625
723 - 判断是否有客服接口 626 - 判断是否有客服接口
724 627
...@@ -750,7 +653,7 @@ PoolSdkHelper.trackEvent(getApplicationContext(), PoolEventType.POOL_RES_LOADED, ...@@ -750,7 +653,7 @@ PoolSdkHelper.trackEvent(getApplicationContext(), PoolEventType.POOL_RES_LOADED,
750 } 653 }
751 ``` 654 ```
752 655
753 -# 3、自测用例 # 656 +# 3、游戏自测相关 #
754 657
755 ### 3.1、接入环境下调用登录sdk会有默认测试账号进行登录,游戏会直接收到登录回调数据 ### 658 ### 3.1、接入环境下调用登录sdk会有默认测试账号进行登录,游戏会直接收到登录回调数据 ###
756 659
...@@ -760,7 +663,7 @@ PoolSdkHelper.trackEvent(getApplicationContext(), PoolEventType.POOL_RES_LOADED, ...@@ -760,7 +663,7 @@ PoolSdkHelper.trackEvent(getApplicationContext(), PoolEventType.POOL_RES_LOADED,
760 663
761 ### 3.2、游戏点击充值在接入环境下sdk会直接进行充值数据校验,点击充值后游戏可查看服务端是否收到充值结果通知 ### 664 ### 3.2、游戏点击充值在接入环境下sdk会直接进行充值数据校验,点击充值后游戏可查看服务端是否收到充值结果通知 ###
762 665
763 -- 后台配置正确的游戏充值回调地址可以进行充值测试是否到账 666 +- 后台配置正确的 `游戏充值回调地址和白名单ip` 可以进行母包充值测试是否到账
764 667
765 # 4、母包 # 668 # 4、母包 #
766 ``` 669 ```
...@@ -810,602 +713,19 @@ e.printStackTrace(); ...@@ -810,602 +713,19 @@ e.printStackTrace();
810 # 6.游戏使用多dex打包需要注意的点 713 # 6.游戏使用多dex打包需要注意的点
811 1、如果游戏接入公共SDK后使用了多dex打包,请确保公共SDK保持在第一个classes.dex文件 714 1、如果游戏接入公共SDK后使用了多dex打包,请确保公共SDK保持在第一个classes.dex文件
812 在defaultConfig中配置multiDexKeepProguard file('maindexlist.pro') 715 在defaultConfig中配置multiDexKeepProguard file('maindexlist.pro')
813 -```java 716 +
814 --keep class com.gzyouai.fengniao.sdk.* 717 +```xml
815 --keep class com.gzyouai.fengniao.sdk.framework.* 718 +-keep class com.gzpublic.app.sdk.*
816 --keep class com.gzyouai.fengniao.sdk.wxapi.* 719 +-keep class com.gzpublic.app.sdk.framework.*
817 --keep class com.gzyouai.publicsdk.application.* 720 +-keep class com.gzpublic.app.sdk.wxapi.*
721 +-keep class com.gzpublic.app.application.*
818 ``` 722 ```
723 +
819 2、如果母包需要每次出包Manifest中的配置改成相应的包名字段(例如推送和Provider) 724 2、如果母包需要每次出包Manifest中的配置改成相应的包名字段(例如推送和Provider)
820 则将包名写成 originPackageTag 打包工具会自动替换成目标包名 725 则将包名写成 originPackageTag 打包工具会自动替换成目标包名
726 +
821 ```xml 727 ```xml
822 android:authorities="com.xxx.provider" 728 android:authorities="com.xxx.provider"
823 <!-- 写为下面这样既可 --> 729 <!-- 写为下面这样既可 -->
824 android:authorities="originPackageTag.provider" 730 android:authorities="originPackageTag.provider"
825 ``` 731 ```
826 -
827 -# 7. 完整的接入demo
828 -```java
829 -package com.youai.foolsdk.demo;
830 -
831 -import android.Manifest;
832 -import android.app.Activity;
833 -import android.app.AlertDialog;
834 -import android.app.Application;
835 -import android.content.DialogInterface;
836 -import android.content.Intent;
837 -import android.content.res.Configuration;
838 -import android.os.Build;
839 -import android.os.Bundle;
840 -import android.os.Handler;
841 -import android.util.Log;
842 -import android.view.KeyEvent;
843 -import android.view.View;
844 -import android.view.View.OnClickListener;
845 -import android.view.WindowManager.LayoutParams;
846 -import android.widget.Button;
847 -import android.widget.TextView;
848 -import android.widget.Toast;
849 -
850 -import com.gzpublic.app.sdk.framework.PoolEventParameterName;
851 -import com.gzpublic.app.sdk.framework.PoolEventType;
852 -import com.gzpublic.app.sdk.framework.PoolExitDialogListener;
853 -import com.gzpublic.app.sdk.framework.PoolExitListener;
854 -import com.gzpublic.app.sdk.framework.PoolExpansionListener;
855 -import com.gzpublic.app.sdk.framework.PoolLoginInfo;
856 -import com.gzpublic.app.sdk.framework.PoolLoginListener;
857 -import com.gzpublic.app.sdk.framework.PoolLogoutListener;
858 -import com.gzpublic.app.sdk.framework.PoolPayInfo;
859 -import com.gzpublic.app.sdk.framework.PoolPayListener;
860 -import com.gzpublic.app.sdk.framework.PoolPayOrderConfirmHandler;
861 -import com.gzpublic.app.sdk.framework.PoolReport;
862 -import com.gzpublic.app.sdk.framework.PoolRoleInfo;
863 -import com.gzpublic.app.sdk.framework.PoolRoleListener;
864 -import com.gzpublic.app.sdk.framework.PoolSDKCallBackListener;
865 -import com.gzpublic.app.sdk.framework.PoolSDKCode;
866 -import com.gzpublic.app.sdk.framework.PoolSdkConfig;
867 -import com.gzpublic.app.sdk.framework.PoolSdkHelper;
868 -import com.gzpublic.app.sdk.framework.PoolSdkLog;
869 -import org.json.JSONArray;
870 -import org.json.JSONException;
871 -import org.json.JSONObject;
872 -
873 -import java.util.HashMap;
874 -import java.util.Locale;
875 -import java.util.Map;
876 -
877 -public class AppActivity extends Activity implements OnClickListener {
878 - //新的view
879 - private Button btLogin;
880 - private Button btEnterGame;
881 - private Button btPay;
882 - private Button btLogout;
883 - private Button btSubRoleInfo;
884 - private Button btOpenChannel;
885 - private Button btSwitchAcc;
886 - private Button btOpenBbs;
887 - private Button btQueryProducts;
888 - private Button pb_bt_verifyname;
889 -
890 - private Bundle saveBundle;
891 - //提示LOG
892 - private TextView txMsg,txSdkMsg;
893 - private Activity mContext;
894 - private PoolPayListener mPoolPayListener = new PoolPayListener() {
895 -
896 - @Override
897 - public void onPaySuccess(String paramCustom) {//支付回调以服务端通知为准
898 - // TODO Auto-generated method stub
899 - //[{"orderId":"20180116114151740535D825","state":0,"productId":"1","productName":"金币","amout":0}]
900 - if(paramCustom == null || paramCustom.length() <= 0)
901 - {
902 - PoolSdkLog.logError("paysuccess data error :" + paramCustom);
903 - return;
904 - }
905 - try {
906 - PoolSdkLog.logInfo("paySuccess:" + paramCustom);
907 - JSONArray jsonArray = new JSONArray(paramCustom);
908 - StringBuilder orderIds = new StringBuilder();
909 - int length = jsonArray.length();
910 - for (int i = 0; i < length; i++) {
911 - JSONObject jb = jsonArray.getJSONObject(i);
912 - String orderId = jb.getString("orderId");
913 - orderIds.append(orderId);
914 - if(i != length -1) {//最后一项不加分割符
915 - orderIds.append(",");
916 - }
917 - }
918 - PoolSdkHelper.paymentSuccess(AppActivity.this, orderIds.toString());
919 - } catch (JSONException e) {
920 - // TODO Auto-generated catch block
921 - e.printStackTrace();
922 - }
923 - upTx("支付成功回调:" + paramCustom);
924 - }
925 -
926 - @Override
927 - public void onPayFailed(String paramCustom, String errorMsg) {
928 - // TODO Auto-generated method stub
929 - System.out.println("支付失败回调:" + paramCustom + "; errorMsg:"
930 - + errorMsg);
931 - upTx("支付失败回调:" + paramCustom + "; errorMsg:"
932 - + errorMsg);
933 - }
934 - };
935 -
936 - @Override
937 - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
938 - super.onRequestPermissionsResult(requestCode, permissions, grantResults);
939 - PoolSdkHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
940 - init(saveBundle);
941 - }
942 -
943 - @Override
944 - protected void onCreate(Bundle savedInstanceState) {
945 - super.onCreate(savedInstanceState);
946 - saveBundle = savedInstanceState;
947 - int layoutId = getResources().getIdentifier(
948 - "public_sdk_self_test", "layout", getPackageName());
949 - setContentView(layoutId);
950 - mContext = this;
951 - initView();
952 - PoolSdkLog.setIsShowLog(true);
953 - PoolSdkConfig.readPoolSdkConfigData(this);
954 -
955 - if(getApplicationInfo().targetSdkVersion >= 23 && Build.VERSION.SDK_INT >= 23){
956 - requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE,Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
957 - }else {//不需要权限直接调用init
958 - this.init(savedInstanceState);
959 - }
960 -
961 - txSdkMsg.setText("sdksimplename:"+ PoolSdkConfig.getConfigByKey("sdksimplename")
962 - +"\nsdkversioncode:"+PoolSdkConfig.getConfigByKey("sdkversioncode")
963 - +"\ngamesimplename:"+PoolSdkConfig.getConfigByKey("gamesimplename")
964 - +"\nlogincheckurl:"+PoolSdkConfig.getConfigByKey("logincheckurl")
965 - );
966 - }
967 -
968 - private void init( Bundle savedInstanceState){
969 - PoolSdkHelper.init(this, new PoolSDKCallBackListener() {
970 - @Override
971 - public void poolSdkCallBack(int code, String msg) {
972 - PoolSdkLog.logInfo("poolSdkCallBack:code:" + code + ",msg:" + msg);
973 - upTx("poolSdkCallBack:code:" + code + ",msg:" + msg);
974 - switch (code) {
975 - case PoolSDKCode.POOLSDK_INIT_SUCCESS:// 初始化成功
976 - PoolSdkLog.logInfo("游戏中收到初始化成功回调");
977 - new Handler().postDelayed(new Runnable() {
978 -
979 - @Override
980 - public void run() {
981 - login();
982 - }
983 - }, 1000);
984 - break;
985 - case PoolSDKCode.POOLSDK_INIT_FAIL:
986 - break;
987 - case PoolSDKCode.POOLSDK_QUERY_WITH_PRODUCTS:
988 - //msg:为查询的结果值
989 - /**
990 - * {//查询商品信息返回数据
991 - * "android.test.purchased0": {//key为商品ID
992 - * "displayPrice": "₩1167.28",//显示价格
993 - * "price": "₩1,167", //实际价格(去除小数点) 充值传递
994 - * "priceAmountMicros": 1167284249, //数字价格
995 - * "priceCurrencyCode": "KRW", //货币代码
996 - * "sku": "android.test.purchased0",//商品ID
997 - * "title": "名称示例"
998 - * }
999 - * }
1000 - */
1001 - break;
1002 - case PoolSDKCode.POOLSDK_EXTENDS_CODE1://实名认证成功才有回调
1003 - //msg为生日
1004 - break;
1005 - default:
1006 - break;
1007 - }
1008 - }
1009 - },savedInstanceState);// init(this);// this为游戏的activity对象
1010 - PoolSdkHelper.setPayListener(mPoolPayListener);
1011 - PoolSdkHelper.setLogoutCallback(new PoolLogoutListener() {
1012 - @Override
1013 - public void onLogoutSuccess() {
1014 - // TODO: 此处处理SDK登出的逻辑
1015 - PoolSdkLog.logInfo("游戏中收到logoutSuccess回调");
1016 - login();
1017 - }
1018 - });
1019 - PoolSdkHelper.trackEvent(getApplicationContext(), PoolEventType.POOL_RES_LOADED, null);
1020 - }
1021 -
1022 - @Override
1023 - public void onStart() {
1024 - super.onStart();
1025 - PoolSdkHelper.onStart();
1026 - }
1027 -
1028 - @Override
1029 - public void onStop() {
1030 - super.onStop();
1031 - PoolSdkHelper.onStop();
1032 - }
1033 -
1034 - @Override
1035 - public void onDestroy() {
1036 - super.onDestroy();
1037 - PoolSdkHelper.onDestroy();
1038 - }
1039 -
1040 - @Override
1041 - public void onResume() {
1042 - super.onResume();
1043 - PoolSdkHelper.onResume();
1044 - }
1045 -
1046 - @Override
1047 - public void onPause() {
1048 - super.onPause();
1049 - PoolSdkHelper.onPause();
1050 -
1051 - }
1052 -
1053 - @Override
1054 - public void onRestart() {
1055 - super.onRestart();
1056 - PoolSdkHelper.onRestart();
1057 - }
1058 -
1059 - @Override
1060 - public void onNewIntent(Intent intent) {
1061 - super.onNewIntent(intent);
1062 - PoolSdkHelper.onNewIntent(intent);
1063 - }
1064 -
1065 - @Override
1066 - protected void onActivityResult(int requestCode, int resultCode, Intent data) {
1067 - PoolSdkHelper.onActivityResult(requestCode, resultCode, data);
1068 - }
1069 -
1070 - @Override
1071 - public void onConfigurationChanged(Configuration newConfig) {
1072 - super.onConfigurationChanged(newConfig);
1073 - PoolSdkHelper.onConfigurationChanged(newConfig);
1074 - }
1075 -
1076 - @Override
1077 - protected void onSaveInstanceState(Bundle outState) {
1078 - super.onSaveInstanceState(outState);
1079 - PoolSdkHelper.onSaveInstanceState(outState);
1080 - }
1081 -
1082 - @Override
1083 - protected void onRestoreInstanceState(Bundle savedInstanceState) {
1084 - super.onRestoreInstanceState(savedInstanceState);
1085 - PoolSdkHelper.onRestoreInstanceState(savedInstanceState);
1086 - }
1087 -
1088 - @Override
1089 - public void onWindowFocusChanged(boolean hasFocus) {
1090 - super.onWindowFocusChanged(hasFocus);
1091 - PoolSdkHelper.onWindowFocusChanged(hasFocus);
1092 - }
1093 -
1094 - @Override
1095 - public void onWindowAttributesChanged(LayoutParams params) {
1096 - super.onWindowAttributesChanged(params);
1097 - PoolSdkHelper.onWindowAttributesChanged(params);
1098 - }
1099 -
1100 - @Override
1101 - public boolean dispatchKeyEvent(KeyEvent pKeyEvent) {
1102 - if (pKeyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK
1103 - && pKeyEvent.getAction() == KeyEvent.ACTION_DOWN) {
1104 - if (PoolSdkHelper.hasExitDialog()) {
1105 - PoolSdkHelper.showExitDialog(new PoolExitDialogListener() {
1106 - @Override
1107 - public void onDialogResult(int code, String msg) {
1108 - switch (code) {
1109 - case PoolSDKCode.EXIT_SUCCESS:
1110 - // 退出成功游戏处理自己退出逻辑
1111 - PoolSdkLog.logInfo("游戏调用自己退出逻辑");
1112 - finish();
1113 - System.exit(0);
1114 - break;
1115 - case PoolSDKCode.EXIT_CANCEL:
1116 - // 取消退出
1117 - PoolSdkLog.logInfo("收到取消退出回调");
1118 - break;
1119 - default:
1120 - break;
1121 - }
1122 - }
1123 - });
1124 - } else {
1125 - // TODO: 调用游戏的退出界面
1126 - showGameExitTips();
1127 - }
1128 - return false;
1129 - }
1130 - return super.dispatchKeyEvent(pKeyEvent);
1131 - }
1132 -
1133 - private void showGameExitTips() {
1134 - AlertDialog.Builder dialog = new AlertDialog.Builder(this);
1135 - int ic_dialog_alert_id = getRedIdByName("ic_dialog_alert", "drawable");
1136 - dialog.setIcon(ic_dialog_alert_id);
1137 - dialog.setTitle("提示");
1138 - dialog.setMessage("是否退出游戏?");
1139 - dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
1140 - @Override
1141 - public void onClick(DialogInterface dialog, int which) {
1142 - PoolSdkHelper.exitGame(new PoolExitListener() {
1143 - @Override
1144 - public void onExitGame() {
1145 - finish();
1146 - }
1147 - });
1148 - }
1149 - });
1150 - dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
1151 - @Override
1152 - public void onClick(DialogInterface dialog, int which) {
1153 - dialog.dismiss();
1154 - }
1155 - });
1156 - dialog.show();
1157 - }
1158 -
1159 - private int getRedIdByName(String resName, String resType) {
1160 - return getResources().getIdentifier(resName, resType, getPackageName());
1161 - }
1162 -
1163 - private void initView(){
1164 - btLogin = (Button) findViewById(getRedIdByName("pb_bt_login", "id"));
1165 - btEnterGame = (Button) findViewById(getRedIdByName("pb_bt_entergame", "id"));
1166 - btPay = (Button) findViewById(getRedIdByName("pb_bt_pay", "id"));
1167 - btLogout = (Button) findViewById(getRedIdByName("pb_bt_logout", "id"));
1168 - btSubRoleInfo = (Button) findViewById(getRedIdByName("pb_bt_subrole", "id"));
1169 - btOpenChannel = (Button) findViewById(getRedIdByName("pb_bt_openchannel", "id"));
1170 - btSwitchAcc = (Button) findViewById(getRedIdByName("pb_bt_switchacc", "id"));
1171 - btOpenBbs = (Button) findViewById(getRedIdByName("pb_bt_openbbs", "id"));
1172 - btQueryProducts = findViewById(getRedIdByName("pool_query_products_id","id"));
1173 - pb_bt_verifyname = (Button) findViewById(getRedIdByName("pb_bt_verifyname", "id"));
1174 -
1175 - txMsg = (TextView) findViewById(getRedIdByName("tx_msg", "id"));
1176 - txSdkMsg = (TextView) findViewById(getRedIdByName("tx_sdk_msg", "id"));
1177 -
1178 - btLogin.setOnClickListener(this);
1179 - btEnterGame.setOnClickListener(this);
1180 - btPay.setOnClickListener(this);
1181 - btLogout.setOnClickListener(this);
1182 - btSubRoleInfo.setOnClickListener(this);
1183 - btOpenChannel.setOnClickListener(this);
1184 - btSwitchAcc.setOnClickListener(this);
1185 - btOpenBbs.setOnClickListener(this);
1186 - btQueryProducts.setOnClickListener(this);
1187 - pb_bt_verifyname.setOnClickListener(this);
1188 - }
1189 -
1190 - public void yaOnClick(View view) {
1191 - }
1192 -
1193 - @Override
1194 - public void onClick(View view) {
1195 - //新view
1196 - if (view == btLogin) {
1197 - login();
1198 - }else if (view == btEnterGame) {
1199 - submitRoleData(10,PoolRoleInfo.Type_EnterGame);
1200 - //PoolReport.reportEnterGame("chufan","角色名", 12, "201","服务器名");
1201 - }else if (view == btPay) {
1202 - pay();
1203 - }else if (view == btLogout) {
1204 - logout();
1205 - }else if (view == btSubRoleInfo) {
1206 - submitRoleData(11,PoolRoleInfo.Type_RoleUpgrade);
1207 - }else if (view == btOpenChannel) {
1208 - channelCenter();
1209 - }else if (view == btSwitchAcc) {
1210 - switchAccount();
1211 - }else if (view == btOpenBbs) {
1212 - trackEvent();
1213 - }else if(view == btQueryProducts){
1214 - queryProducts();
1215 - }else if (view == pb_bt_verifyname){
1216 - Toast.makeText(this,PoolSdkHelper.verifyRealName(this),Toast.LENGTH_SHORT).show();
1217 - }
1218 - }
1219 -
1220 - private void trackEvent(){
1221 - Map<String,Object> valueMap = new HashMap<>();
1222 - valueMap.put(PoolEventParameterName.POOL_ORDER_ID,System.currentTimeMillis()+"");//订单号
1223 - valueMap.put(PoolEventParameterName.POOL_CURRENCY,"USD");//货币类型 USD:美元 CNY:人民币
1224 - valueMap.put(PoolEventParameterName.POOL_PRICE,6);//充值金额
1225 - PoolSdkHelper.trackEvent(getApplicationContext(), PoolEventType.POOL_RES_LOADED,valueMap);
1226 - }
1227 -
1228 - private void logout(){
1229 -// if(PoolSdkHelper.hasLogout()){
1230 -// PoolSdkHelper.logout(this);//结果回调通知到PoolLogoutListener
1231 -// }
1232 - }
1233 -
1234 - private void upTx(final String msg){
1235 - mContext.runOnUiThread(new Runnable() {
1236 -
1237 - @Override
1238 - public void run() {
1239 - txMsg.setText(msg);
1240 - }
1241 - });
1242 -// new Handler().post(new Runnable() {
1243 -//
1244 -// @Override
1245 -// public void run() {
1246 -// txMsg.setText(msg);
1247 -// }
1248 -// });
1249 - }
1250 -
1251 - private void login() {
1252 - PoolSdkLog.logError("调用login");
1253 - PoolSdkHelper.login("登录自定义字段", new PoolLoginListener() {
1254 - @Override
1255 - public void onLoginSuccess(PoolLoginInfo poolLoginInfo) {
1256 - final String userType = poolLoginInfo.getUserType();
1257 - final String timestamp = poolLoginInfo.getTimestamp();
1258 - final String serverSign = poolLoginInfo.getServerSign();
1259 - final String openId = poolLoginInfo.getOpenID();
1260 - // TODO: 把以上信息发送给游戏服务端做登录校验,需要其他信息请从poolLoginInfo对象中获取
1261 -
1262 - System.out.println("登录成功回调:userType = " + userType
1263 - + "; timestamp = " + timestamp + "; serverSign = "
1264 - + serverSign + "; openId = " + openId);
1265 - upTx("登录成功回调:userType = " + userType
1266 - + "; timestamp = " + timestamp + "; serverSign = "
1267 - + serverSign + "; openId = " + openId);
1268 - }
1269 -
1270 - @Override
1271 - public void onLoginFailed(final String errorMsg) {
1272 - System.out.println("登录失败回调 :" + errorMsg);
1273 - upTx("登录失败回调 :" + errorMsg);
1274 - }
1275 - });
1276 -
1277 -
1278 - PoolPayOrderConfirmHandler.getInstance(this, 2000, 1000).startOrderConfirmOp(mPoolPayListener);
1279 - }
1280 -
1281 - private void pay() {
1282 - final PoolPayInfo poolPayInfo = new PoolPayInfo();
1283 -
1284 - /********************************************
1285 - * 以下所有字段都是必填项
1286 - */
1287 - // 设置充值金额,单位“元”
1288 - poolPayInfo.setAmount("100");
1289 - // 服务器id
1290 - poolPayInfo.setServerID("1209");
1291 - // 服务器名
1292 - poolPayInfo.setServerName("我是服务器名");
1293 - // 角色id
1294 - poolPayInfo.setRoleID("123456");
1295 - // 角色名
1296 - poolPayInfo.setRoleName("我是角色名");
1297 - // 角色等级
1298 - poolPayInfo.setRoleLevel("10");
1299 - // 商品ID
1300 - poolPayInfo.setProductID("1");
1301 - // 商品名称
1302 - poolPayInfo.setProductName("金币");
1303 - // 商品描述
1304 - poolPayInfo.setProductDesc("购买金币");
1305 - // 兑换比例
1306 - poolPayInfo.setExchange("10");
1307 - // 自定义参数
1308 - poolPayInfo.setCustom("我是自定义参数");
1309 -
1310 - // TODO Auto-generated method stub
1311 - PoolSdkHelper.pay(poolPayInfo, mPoolPayListener);
1312 - }
1313 -
1314 - /**
1315 - * 提交角色数据 该接口需要在3个地方调用
1316 - *
1317 - * 1、登录游戏主场景 2、创建角色 3、角色升级
1318 - */
1319 - private void submitRoleData(int level,String callType) {
1320 - /********************************************
1321 - * 以下所有字段都是必填项
1322 - */
1323 - final PoolRoleInfo poolRoleInfo = new PoolRoleInfo();
1324 - poolRoleInfo.setRoleID("123456");
1325 - poolRoleInfo.setRoleLevel(level+"");
1326 - poolRoleInfo.setRoleSex("0");
1327 - poolRoleInfo.setRoleName("我是角色名");
1328 - poolRoleInfo.setServerID("1209");
1329 - poolRoleInfo.setServerName("我是服务器名");
1330 - poolRoleInfo.setCustom("角色创建时间");
1331 - poolRoleInfo.setRoleCTime((long)1509331962);//角色创建时间(秒)
1332 - poolRoleInfo.setPartyName("公会名称");
1333 - poolRoleInfo.setRoleType("狂战");//角色类型
1334 - poolRoleInfo.setRoleChangeTime(System.currentTimeMillis()/1000);//角色更新时间
1335 - poolRoleInfo.setVipLevel("10");//vip等级
1336 - poolRoleInfo.setDiamond("1000");//余额
1337 - poolRoleInfo.setMoneyType("金币");//商品单位
1338 - poolRoleInfo.setPower("10");//战力
1339 - poolRoleInfo.setPartyId("10");//工会id
1340 - poolRoleInfo.setProfessionId("10");//职业id
1341 - poolRoleInfo.setProfessionName("无");//职业名称
1342 - poolRoleInfo.setReborn("0");//角色转生等级
1343 - poolRoleInfo.setCheckPointId("1");//关卡id
1344 - poolRoleInfo.setCheckPointName("关卡名");//关卡名
1345 - poolRoleInfo.setCallType(PoolRoleInfo.Type_EnterGame);//进入游戏(第一次创建角色后需再调用一次进入游戏)
1346 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_CreateRole);//创建角色
1347 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_RoleUpgrade);//角色升级
1348 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_SelectServer);//选择服务器
1349 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_ExitServer);//退出服务器
1350 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_Change_RoleName);//改名
1351 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_SelectRole);//选角
1352 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_CheckPoint_Start);//关卡开始
1353 - // poolRoleInfo.setCallType(PoolRoleInfo.Type_CheckPoint_End);//关卡结束
1354 -
1355 - PoolSdkHelper.submitRoleData(poolRoleInfo, new PoolRoleListener() {
1356 - @Override
1357 - public void onRoleDataSuccess(String paramCustom) {
1358 - System.out.println("提交角色数据成功:" + poolRoleInfo.verboseInfo());
1359 - upTx("提交角色数据成功:" + poolRoleInfo.verboseInfo());
1360 - }
1361 - });
1362 - }
1363 -
1364 - /**
1365 - * 用户中心
1366 - *
1367 - * 游戏方先调用PoolSdkHelper.hasChannelCenter()获取是否有用户中心,
1368 - * 如果有的话,游戏中需要添加按钮,点击按钮调用PoolSdkHelper.openChannelCenter();
1369 - * 如果没有,则不需要显示按钮,也不用调用下面的接口
1370 - */
1371 - private void channelCenter() {
1372 - PoolSdkHelper.openChannelCenter();
1373 - }
1374 -
1375 - /**
1376 - * 切换帐号
1377 - */
1378 - private void switchAccount() {
1379 - if(PoolSdkHelper.hasLogout()){
1380 - PoolSdkHelper.logout(this);//注销成功后结果回调通知到PoolLogoutListener中
1381 - }else if(PoolSdkHelper.hasSwitchAccount()){
1382 - PoolSdkHelper.switchAccount(this);//切换成功后回回调结果到登录成功通知中(与登录通知数据一样)
1383 - }else{//渠道不存在注销和切换账号接口,游戏可自定处理逻辑
1384 - }
1385 - }
1386 -
1387 - /**
1388 - * 扩展接口
1389 - */
1390 - private void expansionInterface() {
1391 - PoolSdkHelper.expansionInterface("自定义参数", new PoolExpansionListener() {
1392 - @Override
1393 - public void onSuccess(String paramCustom) {
1394 - }
1395 - });
1396 - }
1397 -
1398 - /**
1399 - * 商品查询接口
1400 - */
1401 - private void queryProducts(){
1402 - PoolSdkLog.logError(PoolSdkHelper.hasFunction("hasQueryWithProducts") + "SSS");
1403 - Map productMap = new HashMap<Object,Object>();
1404 - productMap.put("productId1","");
1405 - productMap.put("productId2","");
1406 - PoolSdkHelper.callFunc("queryWithProducts",productMap);
1407 - }
1408 -}
1409 -
1410 -
1411 -```
......