概述

接入心德

游戏接入是比较费时间的,也行少些一个字母或多了一个字母,有时候都有可能需要重做,所以一定不要怕麻烦,多余渠道方的技术交流。

本文描述

本文是按照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(九游)相关推荐

  1. python怎么制作游戏修改器_Mancala (Python Edition)游戏修改器_九游手机游戏

    Mancala (Python Edition)游戏修改器游戏攻略 Mancala is an ancient family of board games. This version is known ...

  2. 九游与阿里手游初步整合 将获淘宝支付宝入口

    九游在其2015年度战略发布会上宣布,对阿里巴巴手游业务的整合已初步完成.会上,UC副总裁林永颂公布,2014年UC游戏给合作伙伴的分成超过9亿元,再次刷新2012年和2013年1亿和3亿的记录,保持 ...

  3. UC手游平台九游已成与91手机助手、360并列的国内三大手机游戏平台

    专访俞永福:不排斥外界支持 UC希望独立发展 发布日期:2013-02-20 来源:腾讯科技 UC优视与百度的"绯闻"愈传愈烈,真相却很简单:双方在谈,但仅此而已,远没有" ...

  4. 神雕侠侣手游服务器维修到多久,神雕侠侣手游常见问题_神雕侠侣手游问答_疑难解答_九游手机游戏...

    [神雕侠侣]节日礼包开放领取啦,九游为大家提供了大量[神雕侠侣]节日礼包,欢迎大家点击领取[神雕侠侣]节日礼包,大家不要错过哦!~ 使用期限:202...[详情] <神雕侠侣>手游将在8月 ...

  5. messenger未能连接到服务器,BTS Messenger 2连接服务器失败_九游手机游戏

    BTS Messenger 2连接服务器失败游戏攻略 ☆.。.:*No Wi-fi necessary!.。.:*☆ Enjoy chatting with your favorite members ...

  6. 天使动漫网显示服务器错误,HEALTHY HAROLD, HEALTHY ME连接服务器失败_九游手机游戏...

    HEALTHY HAROLD, HEALTHY ME连接服务器失败游戏攻略 A fun, interactive game for pre school children and their pare ...

  7. microsoft拼图闪退_Nonogram彩色拼图2018(Picross,Griddler)闪退无法运行解决方法_九游手机游戏...

    Nonogram彩色拼图2018(Picross,Griddler)闪退无法运行解决方法游戏攻略 Nonogram颜色2018版本. 逻辑游戏的传说.汉克斯,也叫斯格勒. 官方名称是picross,在 ...

  8. 战旗三国一直显示连接服务器,Power Spider 2连接服务器失败_九游手机游戏

    Power Spider 2连接服务器失败游戏攻略 Story: Power Spider was once a police man named Chris Anderson who needed ...

  9. 玩生死狙击找不到服务器怎么办,生死狙击手游进不了游戏解决方法 生死狙击手游进游戏诀窍...

    生死狙击手游是一款超级火爆的手机枪战游戏,很多玩家在玩游戏时都会碰到进不了服务器的问题,一直在打圈圈或者进入失败,那么生死狙击手游进不了游戏该怎么办呢?快来看看生死狙击手游进游戏诀窍吧. 生死狙击手游 ...

最新文章

  1. c语言递归求差分方程,递归方程组解的渐进阶的求法——差分方程法
  2. [2018/11/14] 学习的思考
  3. spring boot高性能实现二维码扫码登录(上)——单服务器版
  4. 联轴器选型_联轴器| 软件工程
  5. 网页获取客户端IP的两种方法
  6. (软件工程复习核心重点)第四章总体设计-第四节:描绘软件结构的图形工具
  7. shell脚本之从1加到100之和的思路
  8. 自定义 Web 服务器控件
  9. Python中 将txt文件转换为csv文件
  10. [搜片神器]服务器SQL2005查询分页语句你理解了么
  11. Python Day56-57 js
  12. 关于在线评论有用性的论文研读笔记---31-40篇
  13. 用 Telegram bot 搭个消息提醒服务
  14. 搜狗输入法取消软键盘
  15. Modbus串行传输方式
  16. VS2017系统找不到指定的文件
  17. 不是因为有希望才坚持,而是因为坚持才有希望!
  18. Redis源码分析之unlock
  19. COCO格式数据集制作并使用yolact网络训练
  20. Ubuntu 20.04 设置窗口打不开或者不显示解决方法

热门文章

  1. poj2315足球游戏
  2. 思科确认 Yanluowang 勒索软件泄露被盗公司数据
  3. 一个简单的格式化信函生成器
  4. 数据结构串之寻找整数
  5. 计算机启动修复怎么还原,电脑开机出现系统恢复选项该怎么办
  6. java调adobe打印_Java报表工具打印方案集锦 | 改变自己
  7. Linux怎么改引导方式为uefi,联想电脑怎么将uefi改成legacy启动|uefi改成legacy引导模式...
  8. 宝塔Linux面板 软件商店中安装不了任何php版本的解决方法
  9. python实验原理_Python实现蒙特卡洛算法小实验过程详解
  10. ITK入门教程(13)点集之得到点中的存储数据