untiy游戏接入之uc_sdk(九游)
概述
接入心德
游戏接入是比较费时间的,也行少些一个字母或多了一个字母,有时候都有可能需要重做,所以一定不要怕麻烦,多余渠道方的技术交流。
本文描述
本文是按照uc6.1.0sdk的文档进行接入的,具体的细节,和步骤,还要根据自己公司的接入框架进行接入,本文只是按照我自己公司的接入框架和个人习惯方式来接入的,仅提供参考作用。
UC 6.1.0-sdk目录
uc的接入方式分为两种:
- android原生代码接入
- 通过u3d引擎接入
本文讲述的是android原生接入的
注意:我用的是eclipse接入的,因为给的android studio demo导入as中有问题,应该是渠道方配置了什么东西, 所以把类全部拷贝到ec中,看着布局,根据点击事件把方法抽出来了。
u3d准备工作
这里只说了游戏工程都有对应的渠道文件,主要是用与我们抽取的接口进行交互的
注:其实这部份是不归我们写的,这些工作是属于前端的。前端忙所以自己比着葫芦画瓢写了
打包方式
这次的打包方式跟以往不同,以往都是通过untiy里的脚本进行一键打包,这次是吧游戏项目以andorid的形式导出来,进行接入的。倒出来以后就跟正常开发app一样了
与play800(爱玩堂)的打包方式一样的:http://blog.csdn.net/qq_34501274/article/details/53404307
sdk初始化
android:
//广播 对登录 支付 退出 登出 角色提交 函数的事件的回调处理等等
SDKEventReceiver receiver = new SDKEventReceiver() {@Subscribe(event = SDKEventKey.ON_INIT_SUCC)private void onInitSucc() {// 初始化成功}@Subscribe(event = SDKEventKey.ON_INIT_FAILED)private void onInitFailed(String data) {// 初始化失败Log.e("init失败", "111111111111111111111"); }@Subscribe(event = SDKEventKey.ON_LOGIN_SUCC)private void onLoginSucc(String sid) {Log.e("登录成功", "111111111111111111111"); /*** 当登录成功时SDKEventKey.ON_LOGIN_SUCC事件被触发,* 同时通过带回登录sid给游戏,sid为用户的登录会话标识, 用于给游戏服务器校验用户登录状态使用。* *///这里向u3d发送数据UnityPlayer.UnitySendMessage("Main Camera", "LoginResult", sid);}@Subscribe(event = SDKEventKey.ON_LOGIN_FAILED)private void onLoginFailed(String desc) {Log.e("登录失败", "111111111111111111111");}@Subscribe(event = SDKEventKey.ON_LOGOUT_SUCC)private void onLogoutSucc() {Log.e("登出成功", "111111111111111111111");AccountInfo.instance().setSid("");Login();}@Subscribe(event = SDKEventKey.ON_LOGOUT_FAILED)private void onLogoutFailed() {Log.e("登出失败", "111111111111111111111");}@Subscribe(event = SDKEventKey.ON_EXIT_SUCC)private void onExit(String desc) {UnityPlayerNativeActivity.this.finish();// // 退出程序Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);android.os.Process.killProcess(android.os.Process.myPid());}@Subscribe(event = SDKEventKey.ON_EXIT_CANCELED)private void onExitCanceled(String desc) {// Toast.makeText(GameActivity.this, desc+"退出失败",// Toast.LENGTH_SHORT).show();}@Subscribe(event = SDKEventKey.ON_CREATE_ORDER_SUCC)private void onCreateOrderSucc(OrderInfo orderInfo) {Log.e("支付成功", "pay succ");}@Subscribe(event = SDKEventKey.ON_PAY_USER_EXIT)private void onPayUserExit(OrderInfo orderInfo) {Log.e("支付失败", "pay fail");}};
protected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState); /*** * 初始化*/initSDK();/***这里的广播是对所有方法事件的回调处理*/UCGameSdk.defaultSdk().registeSDKEventReceiver(receiver);
//初始化接口//根据渠道的不同 即使u3d调取了初始化sdk的方法,也需要 在onCreat方法里在掉一次public void initSDK() {GameParamInfo gameParamInfo = new GameParamInfo();gameParamInfo.setEnablePayHistory(true);// 开启查询充值历史功能gameParamInfo.setEnableUserChange(true);// 开启账号切换功能gameParamInfo.setCpId(UCSdkConfig.cpId);gameParamInfo.setGameId(UCSdkConfig.gameId);gameParamInfo.setServerId(UCSdkConfig.serverId);gameParamInfo.setOrientation(UCOrientation.LANDSCAPE);SDKParams sdkParams = new SDKParams();sdkParams.put(SDKParamKey.GAME_PARAMS, gameParamInfo);// FIXME always debugsdkParams.put(SDKParamKey.DEBUG_MODE, UCSdkConfig.debugMode);try {UCGameSdk.defaultSdk().initSdk(this, sdkParams);Log.e("initSdk", "1------------");} catch (AliLackActivityException e) {// TODO Auto-generated catch blocke.printStackTrace();}Log.e("initSdk", "2------------");}
u3d:
public class uc1GameSdk
{public static void init(){Debug.Log("##--Start init--##");using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){jo.Call("initSDK");}}
登录
android
/*** 登录* */public void Login() {ucSdkLogin();}public void ucSdkLogin() {try {UCGameSdk.defaultSdk().login(this, null);} catch (AliLackActivityException e) {e.printStackTrace();} catch (AliNotInitException e) {e.printStackTrace();}}
u3d
public static void login(){Debug.Log("##--Start login--##");using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){jo.Call("Login");}}}
支付
android
public void pay(String sign, String signType, String accountId,String cpOrderId, String notifyUrl, String amount) {// callSdkApi ("pay", amount, serverId, roleId, roleName, grade,// customInfo, notifyUrl, transactionNumCP);Map<String, String> paramMap = new HashMap<String, String>();paramMap.put(SDKParamKey.SIGN, sign);// 必须paramMap.put(SDKParamKey.SIGN_TYPE, signType);// 必须paramMap.put(SDKParamKey.ACCOUNT_ID, accountId);// 必须:用户id,充值用户的统一账号ID,由阿里游戏平台生成。paramMap.put(SDKParamKey.CP_ORDER_ID, cpOrderId);// 订单号paramMap.put(SDKParamKey.NOTIFY_URL, notifyUrl);// 服务器通知地址,如果为空以服务端配置地址作为通知地址,长度不超过100paramMap.put(SDKParamKey.AMOUNT, amount);// 价格 必须// paramMap.put(SDKParamKey.CALLBACK_INFO, customInfo);//// cp自定义信息,在支付结果通知时回传,CP可以自己定义格式,长度不超过250SDKParams sdkParams = new SDKParams();Map<String, Object> map = new HashMap<String, Object>();map.putAll(paramMap);sdkParams.putAll(map);try {UCGameSdk.defaultSdk().pay(this, sdkParams);} catch (Exception e) {e.printStackTrace();// addOutputResult("charge failed - Exception: " + e.toString() +// "\n");}}
u3d
注:因为根据uc文档来看,支付牵扯到二次请求所以这里在点击商品后和打开sdk的支付界面之间加入了一个post请求,先向服务器下订单,根据服务器返回的数据,在调出sdk支付界面。这样安全性更高点
public static void pay(RechargeConfig config){//用户在我们服务器上的id//角色id//服务器id//用价格//角色名称//商品Id//uc帐号Id//设备号long str = PlayerData.curCharacter.id;// payload["goods"] = config.id;//向服务器发送生成订单请求WWWForm form = new WWWForm();form.AddField("uid", PlayerData.cid.ToString());form.AddField("charId", str.ToString());form.AddField("serverId", PlayerData.curServer.id.ToString());form.AddField("amount", config.price + ".00");form.AddField("charName", PlayerData.curCharacter.Name.ToString());form.AddField("goods",config.id.ToString());form.AddField("accountId", ChannelConstant.accountid.ToString());form.AddField("device", ChannelConstant.device.ToString());string api = "支付回调地址";//www 是服务器返回的数据ARPGNet.instance.HttpPost(ARPGApplication.instance.host + api, form, (www) =>{Debug.Log("##--HTTP POST请求--##");if (www == null || !String.IsNullOrEmpty(www.error)){if (!String.IsNullOrEmpty(www.error)){Debuger.LogError(www.error);}return;}JsonObject result = SimpleJson.SimpleJson.DeserializeObject<JsonObject>(www.text);Debug.Log("##--result服务器返回结果--##"+www.text); if(result.ContainsKey("info") ){JsonObject info = (JsonObject)result["info"];Debug.Log("##--result if--##"+info.ToString());//游戏服务端生成的签名//签名类型//uc帐号id//游戏的服务端订单号//支付回调地址//充值金额string sign = Convert.ToString(info["sign"]);string signType = Convert.ToString(info["signType"]);string accountId = Convert.ToString(info["accountId"]);string cpOrderId = Convert.ToString(info["cpOrderId"]);string notifyUrl = Convert.ToString(info["notifyUrl"]);string amount = Convert.ToString(info["amount"]);Debug.Log("##--服务器返回订单信息--## " + "sign--"+sign+ "signType--"+signType+"accountid--"+accountId+"cpOrderId--"+cpOrderId+"notifyUrl--"+notifyUrl+"amount--"+amount);using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")){Debug.Log("##--uc1SDK pay--##"); jo.Call("pay", sign,signType,accountId,cpOrderId,notifyUrl,amount);}}}}, 7f, null); }
本文就说这么多就够了,后面的切换帐号,退出游戏,角色提交,等等,都是大同小异的。游戏接入其实没有想象的那么难,只是比较繁琐而已。
本人描述能力有限,如有不足之处,欢迎留言指出!
untiy游戏接入之uc_sdk(九游)相关推荐
- python怎么制作游戏修改器_Mancala (Python Edition)游戏修改器_九游手机游戏
Mancala (Python Edition)游戏修改器游戏攻略 Mancala is an ancient family of board games. This version is known ...
- 九游与阿里手游初步整合 将获淘宝支付宝入口
九游在其2015年度战略发布会上宣布,对阿里巴巴手游业务的整合已初步完成.会上,UC副总裁林永颂公布,2014年UC游戏给合作伙伴的分成超过9亿元,再次刷新2012年和2013年1亿和3亿的记录,保持 ...
- UC手游平台九游已成与91手机助手、360并列的国内三大手机游戏平台
专访俞永福:不排斥外界支持 UC希望独立发展 发布日期:2013-02-20 来源:腾讯科技 UC优视与百度的"绯闻"愈传愈烈,真相却很简单:双方在谈,但仅此而已,远没有" ...
- 神雕侠侣手游服务器维修到多久,神雕侠侣手游常见问题_神雕侠侣手游问答_疑难解答_九游手机游戏...
[神雕侠侣]节日礼包开放领取啦,九游为大家提供了大量[神雕侠侣]节日礼包,欢迎大家点击领取[神雕侠侣]节日礼包,大家不要错过哦!~ 使用期限:202...[详情] <神雕侠侣>手游将在8月 ...
- messenger未能连接到服务器,BTS Messenger 2连接服务器失败_九游手机游戏
BTS Messenger 2连接服务器失败游戏攻略 ☆.。.:*No Wi-fi necessary!.。.:*☆ Enjoy chatting with your favorite members ...
- 天使动漫网显示服务器错误,HEALTHY HAROLD, HEALTHY ME连接服务器失败_九游手机游戏...
HEALTHY HAROLD, HEALTHY ME连接服务器失败游戏攻略 A fun, interactive game for pre school children and their pare ...
- microsoft拼图闪退_Nonogram彩色拼图2018(Picross,Griddler)闪退无法运行解决方法_九游手机游戏...
Nonogram彩色拼图2018(Picross,Griddler)闪退无法运行解决方法游戏攻略 Nonogram颜色2018版本. 逻辑游戏的传说.汉克斯,也叫斯格勒. 官方名称是picross,在 ...
- 战旗三国一直显示连接服务器,Power Spider 2连接服务器失败_九游手机游戏
Power Spider 2连接服务器失败游戏攻略 Story: Power Spider was once a police man named Chris Anderson who needed ...
- 玩生死狙击找不到服务器怎么办,生死狙击手游进不了游戏解决方法 生死狙击手游进游戏诀窍...
生死狙击手游是一款超级火爆的手机枪战游戏,很多玩家在玩游戏时都会碰到进不了服务器的问题,一直在打圈圈或者进入失败,那么生死狙击手游进不了游戏该怎么办呢?快来看看生死狙击手游进游戏诀窍吧. 生死狙击手游 ...
最新文章
- c语言递归求差分方程,递归方程组解的渐进阶的求法——差分方程法
- [2018/11/14] 学习的思考
- spring boot高性能实现二维码扫码登录(上)——单服务器版
- 联轴器选型_联轴器| 软件工程
- 网页获取客户端IP的两种方法
- (软件工程复习核心重点)第四章总体设计-第四节:描绘软件结构的图形工具
- shell脚本之从1加到100之和的思路
- 自定义 Web 服务器控件
- Python中 将txt文件转换为csv文件
- [搜片神器]服务器SQL2005查询分页语句你理解了么
- Python Day56-57 js
- 关于在线评论有用性的论文研读笔记---31-40篇
- 用 Telegram bot 搭个消息提醒服务
- 搜狗输入法取消软键盘
- Modbus串行传输方式
- VS2017系统找不到指定的文件
- 不是因为有希望才坚持,而是因为坚持才有希望!
- Redis源码分析之unlock
- COCO格式数据集制作并使用yolact网络训练
- Ubuntu 20.04 设置窗口打不开或者不显示解决方法
热门文章
- poj2315足球游戏
- 思科确认 Yanluowang 勒索软件泄露被盗公司数据
- 一个简单的格式化信函生成器
- 数据结构串之寻找整数
- 计算机启动修复怎么还原,电脑开机出现系统恢复选项该怎么办
- java调adobe打印_Java报表工具打印方案集锦 | 改变自己
- Linux怎么改引导方式为uefi,联想电脑怎么将uefi改成legacy启动|uefi改成legacy引导模式...
- 宝塔Linux面板 软件商店中安装不了任何php版本的解决方法
- python实验原理_Python实现蒙特卡洛算法小实验过程详解
- ITK入门教程(13)点集之得到点中的存储数据