Showing
1 changed file
with
61 additions
and
741 deletions
| 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 | -``` | ... | ... |
-
Please register or login to post a comment