原先的2d项目已经告一段落,接下来是打算学习unity3d的,进入公司unity项目以后由于之前有接sdk的经验,所以进入项目组后第一个工作内容就是给我们unity游戏接入anySDK。这几天通过自己踩坑和请教主程以后,大概算是把登录这块搞定了。
其实anySDK的文档非常的详细(比起同为触控的cocos,anySDK的文档容我赞一下),最好的方式就是去git上下载官方的例子,地址:
接入anySDK需要的东西主要是两个,一个是anySDK客户端,用来申请anySDK服务,创建游戏,测试帐号等等。另一个就是anySDK的框架包,不同的引擎不一样,比如我们是unity4.6的那么下载的是libAnySDKForUnity_libstdc++.unitypackage
以git上unity的例子为例,anySDK的初始化放在例子里的Init.cs里面,用到的几个参数说明一下。
appKey,appSecret,privateKey这三个放在一起说,他们来自于使用anySDK客户端开通服务,创建完游戏后在配置管理页面可以看到的这三个。还有一个参数是oauthLoginServer 是发送到服务器端做验证的地址,这个服务端的验证是需要我们自己的游戏服务端程序开发的。由于我们这个项目前后端都做,我个人之前也做过javaweb开发,所以验证服务也由我个人来开发。
同样可以去anySDK的git上下载那个simple_server的例子,里面有java验证服务端的例子,我是通过假设tomcat服务器实现的验证服务器。oauthLoginServer传入架设的验证服务器地址。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page import="com.xingfu.mzj.action.impl.AnySDKAction" %><% AnySDKAction login = new AnySDKAction(); login.check(request, response);%>
在jsp里调用相应action类的方法做登录验证,我这里取名叫check。(原谅我2年没做java了,只会基本的java web实现方式,专业的服务端程序应该会用struts等框架,总之原理是一样的目的就是验证服务端接到客户端登录请求,再去向any服务端转发请求而已)
至于check函数的具体内容get上下载下来的simple_server例子里面有,就不贴了,不过注意最后调用的一个叫sendToClient的一个函数,发送的json结构里面有一个ext字段,这个字段将来会作为msg回传给游戏客户端的
void Start() { AnySDKUser.getInstance () .setListener (this,"UserExternalCall"); }void UserExternalCall(string msg) { Debug.Log("UserExternalCall("+ msg+")"); Dictionarydic = AnySDKUtil.stringToDictionary (msg); int code = Convert.ToInt32(dic["code"]); string result = dic["msg"]; switch(code) { case (int)UserActionResultCode.kInitSuccess://初始化SDK成功回调 Debug.Log("初始化SDK成功回调"); break; case (int)UserActionResultCode.kInitFail://初始化SDK失败回调 Debug.Log("初始化SDK失败回调"); break; case (int)UserActionResultCode.kLoginSuccess://登陆成功回调 Debug.Log("登陆成功回调,result:" + result); string[] msgArray = result.Split(new char[]{','}); string userId = msgArray[0]; string accessToken = msgArray[1]; Debug.Log("userId:" + userId + ",accessToken:" + accessToken); break; ...
例如unity脚本里面的start函数里设置了登录回调函数为UserExternalCall,接下来的处理里面会把msg转换成一个数据字典,而这个result就是数据字典dic里面的msg,而这个msg也就是由验证服务端传过来的json里面的ext字段.用官方文档里面的原话就是
ext:默认为空,游戏服务器可以在ext域中存放游戏逻辑相关的数据(比如开发商服务器内部设定用户标识),这些数据会在游戏客户端获取到登录成功回调时附带的msg信息里完整的拿到,然后用来执行相应的游戏逻辑;
也就是这是个自己用来存储一些anySDK没有提供的数据会传给客户端的,是根据自己游戏的登录不同,可以自己去使用的一个扩展字段(说的通俗点,传你们游戏特有的需要的一些信息,没有可以不传,完全看游戏自身需求)
再测试登录的时候使用的帐号可以通过anySDK的客户端提供的开发者管理后台生成你们游戏的测试帐号,然后登录的时候就用这个账号,只要用户名密码正确,验证服务器地址正确,最后登录成功就会回调unity游戏客户端的UserExternalCall方法,会走到登录成功那个分支。这样一来,客户端对接验证服务端去any那里登录再返回客户端的这套流程就算ok了。接下来就是客户端自己的登录流程了
以上