游戏sdk接入教程:uc(阿里游戏)接入
来源:互联网 发布:英语语义学 知乎 编辑:程序博客网 时间:2024/05/18 02:26
上文中已介绍了环境与软件的安装配置(https://my.oschina.net/u/3024661/blog/881141),之后我们就可以开始学习接入渠道了,
UC已和豌斗夹渠道合并,改名叫阿里游戏
我这边演示用DEMO的下载的为融合版,看一下下载下来后有些什么东西吧
具体里面的东西如何使用,我们晚点正说
在接入之前,需先在渠道后台创建游戏,获取一些接入参数。
客户端所需要参数包括:cpId、gameId、serverId。参数基本是初始化时所需要传入的参数。
准备工作做为,正式开始接入,首先肯定是把所需要的资源如JAR包之类的复制到我的工程中去。
我这边的接入环境是Eclipse
那首先我们得先创建一个demo工程,打开我们的Eclipse,新建一个工程,名为demo
创建完成之后如下图,会发现我们左侧栏会有两个新工程
很明显现在是有问题的,有两个大大的感叹号,那有些东西我们是不需要的,就直接大胆的delete掉 ,先删除appcompat v7 选中appcompat v7按delete键,记得打勾如下图红色标记处,然后按确定
现在我们发现打叉叉的地方有这几个地方
首先我们去values里面把错误的地方删除
之后我们发现错误的地方只有一处了
我们双击MainActivity.java打开这个类
然后我们把除了第一行外所有的代码都删除,之后我会把整个类的代码写在后面,大家只需要把整个类的代码复制进这个类里就行
然后我们clean我们的工程,选中demo
然后把下图中红框里的三个目录都delete删除
同样重复刚刚的步骤,clean我们的工程
同样打开下图中报错的文件
删除文字下方带红色波浪线的
再次clean一下我们的demo工程后发现没有地方再报错了
打开我们下载好解压出来的文档目录找到所需要依赖的JAR包
红框所示就是我们Eclipse所需要的jar包了。
把alipay.jar复制到我们工程的libs目录下就行。
.arr是studio中用的类似于Eclipse的.jar,但其中整合了其他资源,所以,我们需要把arr文件的后缀名改成rar或者zip把的解压出来获取我们需要的资源文件。
然后解压
解压出来的目录格式:
其中,我们需要是上图中两个红框中的。
把ucgamesdk.jar复制到我们工程的libs目录下
把assets目录下的所有文件复制到我们工程的assets目录下。
至此,我们已经把所有需要的东西都复制到了我们的工程中,clean 一下我们的demo工程,接下来个上代码了。
首先我们打开我们工程的AndroidManifest.xml文件。
然后复制以下代码
点击(此处)折叠或打开
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.demo"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="18" />
- <supports-screens
- android:anyDensity="true"
- android:largeScreens="true"
- android:normalScreens="true"
- android:resizeable="true"
- android:smallScreens="true" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <uses-permission android:name="android.permission.SEND_SMS" />
- <uses-permission android:name="android.permission.GET_TASKS" />
- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
- <uses-permission android:name="android.permission.USE_CREDENTIALS" />
- <uses-permission android:name="android.permission.READ_LOGS" />
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name" >
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity
- android:name="cn.uc.gamesdk.activity.ProxyActivity"
- android:configChanges="keyboardHidden|orientation|screenSize"
- android:label="@string/app_name"
- android:theme="@android:style/Theme.Translucent.NoTitleBar"
- android:windowSoftInputMode="adjustResize" >
- <intent-filter>
- <action android:name="cn.uc.gamesdk.sdkweb" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
- <!-- alipay sdk begin -->
- <activity
- android:name="com.alipay.sdk.app.H5PayActivity"
- android:configChanges="orientation|keyboardHidden|navigation|screenSize"
- android:exported="false"
- android:screenOrientation="behind" >
- </activity>
- <activity
- android:name="com.alipay.sdk.auth.AuthActivity"
- android:configChanges="orientation|keyboardHidden|navigation|screenSize"
- android:exported="false"
- android:screenOrientation="behind" >
- </activity>
- <!-- alipay sdk end -->
- <!-- 游戏的横竖屏配置 -->
- <meta-data
- android:name="ali_screen_orientation"
- android:value="landscape" />
- </application>
- </manifest>
以上AndroidManifest.xml修改好了。
首先打开我们的MainActivity.java
点击(此处)折叠或打开
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import cn.uc.gamesdk.UCGameSdk;
- import cn.uc.gamesdk.even.SDKEventKey;
- import cn.uc.gamesdk.even.SDKEventReceiver;
- import cn.uc.gamesdk.even.Subscribe;
- import cn.uc.gamesdk.exception.AliLackActivityException;
- import cn.uc.gamesdk.exception.AliNotInitException;
- import cn.uc.gamesdk.open.GameParamInfo;
- import cn.uc.gamesdk.open.OrderInfo;
- import cn.uc.gamesdk.open.UCLogLevel;
- import cn.uc.gamesdk.open.UCOrientation;
- import cn.uc.gamesdk.param.SDKParamKey;
- import cn.uc.gamesdk.param.SDKParams;
- public class MainActivity extends Activity {
- final static String TAG = "demo";
- UCGameSdk sdk;
- int cpId = 0;
- int gameId = 0;
- int serverId = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- UCGameSdk.defaultSdk().registeSDKEventReceiver(eventReceiver);
- }
- @Override
- protected void onDestroy() {
- // TODO Auto-generated method stub
- super.onDestroy();
- UCGameSdk.defaultSdk().unregisterSDKEventReceiver(eventReceiver);
- sdk = UCGameSdk.defaultSdk();
- }
- private void init() {
- // TODO Auto-generated method stub
- GameParamInfo gameParamInfo = new GameParamInfo();
- gameParamInfo.setCpId(cpId);// 上文提到的游戏参数 参数类型int
- gameParamInfo.setGameId(gameId);// 上文提到的游戏参数 参数类型int
- gameParamInfo.setServerId(serverId);// 上文提到的游戏参数 参数类型int
- // 设置是否支持查询充值历史和显示切换账号功能,
- // 如果不设置,默认具有查询充值历史记录,不具有切换账户功能
- gameParamInfo.setEnablePayHistory(true);// 开启查询充值历史功能
- gameParamInfo.setEnableUserChange(true);// 开启账号切换功能
- // 设置SDK屏幕方向
- // LANDSCAPE:横屏,横屏游戏必须设置为横屏,PORTRAIT:竖屏
- gameParamInfo.setOrientation(UCOrientation.PORTRAIT);
- SDKParams sdkParams = new SDKParams();
- sdkParams.put(SDKParamKey.LOG_LEVEL, UCLogLevel.DEBUG);// 日志等级
- sdkParams.put(SDKParamKey.GAME_PARAMS, gameParamInfo);
- // FIXME always debug
- // 是否打开调试模式。
- // 在为true的时候,会连接到联调测试环境(sdk.test4.9game.cn),
- // 当为false的时候则会连接到正式环境(sdk.g.9game.cn)。
- sdkParams.put(SDKParamKey.DEBUG_MODE, false);
- try {
- sdk.initSdk(MainActivity.this, sdkParams);
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private void login() {
- try {
- sdk.login(MainActivity.this, null);
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block activity为空,异常处理
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block 未初始化,异常处理
- e.printStackTrace();
- }
- }
- private void pay() {
- SDKParams sdkParams = new SDKParams();
- sdkParams.put(SDKParamKey.CALLBACK_INFO, "{\"test\":true}");
- sdkParams.put(SDKParamKey.SERVER_ID, "1");
- sdkParams.put(SDKParamKey.ROLE_ID, "AAA");
- sdkParams.put(SDKParamKey.ROLE_NAME, "BBB");
- sdkParams.put(SDKParamKey.GRADE, "grade1");
- sdkParams.put(SDKParamKey.NOTIFY_URL, "");
- sdkParams.put(SDKParamKey.AMOUNT, "2.33");
- sdkParams.put(SDKParamKey.CP_ORDER_ID, "20160000101001");
- sdkParams.put(SDKParamKey.ACCOUNT_ID, "123");
- sdkParams.put(SDKParamKey.SIGN_TYPE, "MD5");
- sdkParams.put(SDKParamKey.SIGN, "游戏服务器根据以上信息签名后的结果");
- // 以上字段的值都需要由游戏服务器生成
- try {
- UCGameSdk.defaultSdk().pay(MainActivity.this, sdkParams);
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block 参数错
- e.printStackTrace();
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block activity null
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block 未初始化
- e.printStackTrace();
- }
- }
- private void sendUserInfo() {
- SDKParams sdkParams = new SDKParams();
- sdkParams.put(SDKParamKey.STRING_ROLE_ID, "roleId");
- sdkParams.put(SDKParamKey.STRING_ROLE_NAME, "roleName");
- sdkParams.put(SDKParamKey.LONG_ROLE_LEVEL, 1);
- sdkParams.put(SDKParamKey.STRING_ZONE_ID, "zoneId");
- sdkParams.put(SDKParamKey.STRING_ZONE_NAME, "serverId");
- sdkParams.put(SDKParamKey.LONG_ROLE_CTIME, 1456397360);
- try {
- sdk.submitRoleData(MainActivity.this, sdkParams);
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- private void logout(){
- try {
- sdk.logout(MainActivity.this, null);
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private void exit() {
- try {
- sdk.exit(MainActivity.this, null);
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- SDKEventReceiver eventReceiver = new SDKEventReceiver() {
- @Subscribe(event = SDKEventKey.ON_INIT_SUCC)
- private void onInitSucc() {
- // 初始化成功
- Log.d(TAG, "init success");
- }
- @Subscribe(event = SDKEventKey.ON_INIT_FAILED)
- private void onInitFailed(String data) {
- // 初始化失败
- Log.d(TAG, "init failed:" + data);
- }
- @Subscribe(event = SDKEventKey.ON_LOGIN_SUCC)
- private void onLoginSucc(String sid) {
- // 登录成功
- // sid为用户的登录会话标识,用于给游戏服务器校验用户登录状态使用。
- Log.d(TAG, "login success:sid:" + sid);
- }
- @Subscribe(event = SDKEventKey.ON_LOGIN_FAILED)
- private void onLoginFailed(String desc) {
- // 登录失败
- Log.d(TAG, "login failed:" + desc);
- }
- @Subscribe(event = SDKEventKey.ON_LOGOUT_SUCC)
- private void onLogoutSucc() {
- // 登出成功
- Log.d(TAG, "logout success");
- }
- @Subscribe(event = SDKEventKey.ON_LOGOUT_FAILED)
- private void onLogoutFailed() {
- // 登出失败
- Log.d(TAG, "logout failed");
- }
- @Subscribe(event = SDKEventKey.ON_EXIT_SUCC)
- private void onExit(String desc) {
- // 退出游戏
- Log.d(TAG, "exit:" + desc);
- MainActivity.this.finish();
- System.exit(0);
- }
- @Subscribe(event = SDKEventKey.ON_EXIT_CANCELED)
- private void onExitCanceled(String desc) {
- // 取消退出
- Log.d(TAG, "exit cancel:" + desc);
- }
- @Subscribe(event = SDKEventKey.ON_CREATE_ORDER_SUCC)
- private void onCreateOrderSucc(OrderInfo orderInfo) {
- // 支付成功
- if (orderInfo != null) {
- String txt = orderInfo.getOrderAmount() + ","
- + orderInfo.getOrderId() + "," + orderInfo.getPayWay();
- Log.d(TAG, "充值成功: " + txt + "\n");
- }
- Log.i(TAG, "pay succ");
- }
- @Subscribe(event = SDKEventKey.ON_PAY_USER_EXIT)
- private void onPayUserExit(OrderInfo orderInfo) {
- // 支付失败
- if (orderInfo != null) {
- String txt = orderInfo.getOrderAmount() + ","
- + orderInfo.getOrderId() + "," + orderInfo.getPayWay();
- Log.d(TAG, "充值失败: " + txt + "\n");
- }
- Log.i(TAG, "pay fail");
- }
- };
- }
监听创建完成后,需要在Activity onCreate中注册,并在Activity onDestroy中注销:
注册:UCGameSdk.defaultSdk().registeSDKEventReceiver(eventReceiver);
点击(此处)折叠或打开
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- UCGameSdk.defaultSdk().registeSDKEventReceiver(eventReceiver);
- }
第二步初始化:
并在Activity onCreate中获取对象:sdk = UCGameSdk.defaultSdk();
调用登录接口:
点击(此处)折叠或打开
- private void login() {
- try {
- sdk.login(MainActivity.this, null);
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block activity为空,异常处理
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block 未初始化,异常处理
- e.printStackTrace();
- }
- }
参数说明:
数据提交时机:
2、当用户的角色等级发生变化后
点击(此处)折叠或打开
- private void sendUserInfo() {
- SDKParams sdkParams = new SDKParams();
- sdkParams.put(SDKParamKey.STRING_ROLE_ID, "roleId");
- sdkParams.put(SDKParamKey.STRING_ROLE_NAME, "roleName");
- sdkParams.put(SDKParamKey.LONG_ROLE_LEVEL, 1);
- sdkParams.put(SDKParamKey.STRING_ZONE_ID, "zoneId");
- sdkParams.put(SDKParamKey.STRING_ZONE_NAME, "serverId");
- sdkParams.put(SDKParamKey.LONG_ROLE_CTIME, 1456397360);
- try {
- sdk.submitRoleData(MainActivity.this, sdkParams);
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
参数定义
参数名称
类型
是否必填
说明
STRING_ROLE_ID
roleId
String
是
角色ID,长度不超过50
STRING_ROLE_NAME
roleName
String
是
角色名称,长度不超过50
LONG_ROLE_LEVEL
roleLevel
Long
是
角色等级,长度不超过10
LONG_ROLE_CTIME
roleCTime
Long
是
角色创建时间(单位:秒),长度10,获取服务器存储的时间,不可用手机本地时间
STRING_ZONE_ID
zoneId
String
是
区服ID,长度不超过50
STRING_ZONE_NAME
zoneName
String
是
区服名称,长度不超过50
登出与退出:登出为注销当前账号,游戏应返回登陆界面,退出为关闭游戏。
接入登出接口:
点击(此处)折叠或打开
- private void logout(){
- try {
- sdk.logout(MainActivity.this, null);
- } catch (AliLackActivityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (AliNotInitException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
到这里就是接入完毕了,添加相应UI控件出包就是一个接入渠道的demo了,如果和游戏交互完成服务端接入完成,打包后就是成品啦,clean后到bin下面找 .apk包吧。
如果想了解更多,请联系我们或关注官网
了解更多:www.typesdk.com
问题解答:1771930259
联系邮箱:qianyuzhou@typesdk.com
项目地址:https://github.com/typesdk
- 游戏sdk接入教程:uc(阿里游戏)接入
- 游戏sdk接入教程:360渠道SDK接入
- 游戏SDK接入
- cocos2djs游戏android sdk接入
- 游戏sdk接入教程:接入应用宝渠道SDK之一登录篇
- air游戏接入小米支付sdk
- Unity3d游戏开发之如何接入SDK
- 小米游戏中心sdk接入unity
- 教你快速高效接入SDK——游戏接入SDK(只接入抽象框架)
- JavaScript强化教程 —— Cocos2d-JS游戏快速接入微信JS-SDK
- 【游戏服务器开发】SDK接入——以nibia为例的SDK接入总结
- 高效率完成一次接入80个手游渠道SDK——游戏接入SDK客户端篇
- 高效率完成一次接入80个手游渠道SDK——游戏接入SDK服务端篇
- unity3d游戏开发之如何快速接入渠道SDK
- cocos2dx android工程接入电信爱游戏sdk
- ****************本文是Lua编写的游戏接入多盟SDK*******************
- U8SDK——Cocos2dx游戏快速渠道SDK接入
- cocos 游戏接入Android平台的广告SDK
- java的原码,反码与补码
- git管理项目时的.ignore文件模板
- 服务器搭建出现问题
- 金蝶EAS,BOS,KDTable表格增加普通行、合计行,需先解析表格
- 编译预处理
- 游戏sdk接入教程:uc(阿里游戏)接入
- numtri-section1.5
- LeetCode题目:String to Integer (atoi)
- MongoDB复制集安全认证
- tf.nn.conv2d 参数含义及结果维度
- tensorflow 多线程操作文件中关于文件名命名的思考
- redis自启动
- MyBatis--查询缓存
- java 检测代码运行时间