更新时间:2017-2-22

客户端接入准备工作


在客户端接入TypeSDK前,你需要从TypeSDK官网下载TypeSDK提供的Unity部分接入资源。如果您的开发环境没有外网,还建议您将接入文档及Unity项目Demo下载并复制到您的开发环境,文档和Demo中提供了大量的范例代码,您可更具需要直接复制和修改,帮助您快速完成编码工作。

GITHUB

导入资源


将typesdk_unity.unitypackage导入到Unity工程中,资源中包含了TypeSDK 聚合接入框架、TypeSDK定制自建Android渠道接入代码、TypeSDK定制自建Android渠道SDK资源。资源配置了TypeSDK官方调试环境,客户端开发人员可以将项目切换至Android平台后直接进行真机调试。

客户端启动后流程描述


  1. 在调用其它API前需先调用初始化接口对SDK进行初始化。
  2. 在等待完成初始化接口调用后方可调用登录接口
  3. 登录成功选择角色进入游戏后需要调用提交用户信息接口
  4. 登录成功后如果需要切换账号,需调用登出接口,并非所有渠道都支持用户账号切换,故不建议在游戏设置按钮主动进行账号切换。
  5. 登录成功后需要监听登录成功回调、重新登录成功回调。收到回调说明用户在渠道SDK内操作了用户切换。需要游戏完成游戏账号操作。
  6. 在期望退出时游戏需要调用退出接口

了解详细事件流程

调用接口和回调函数


1. 调用接口

函数名称 功能说明
InitSDK SDK初始化
Login 显示登录界面
PayItem 显示支付界面
ExitGame 大退游戏(等于杀进程)
IsHasRequest 判断渠道是否支持某功能(例如:用户中心)
UpdatePlayerInfo 提交用户信息到渠道(渠道要求在进入游戏后调用)

2. 回调函数

回调侦听的事件类型 事件说明
TypeEventType.EVENT_INIT_FINISH SDK初始化完毕
TypeEventType.EVENT_LOGIN_SUCCESS 登录成功回调
TypeEventType.EVENT_PAY_RESULT 支付结果回调
TypeEventType.EVENT_LOGOUT 登出完毕回调
TypeEventType.EVENT_RELOGIN 重新登录成功回调
TypeEventType.EVENT_CANCEL_EXIT_GAME 退出应用回调
typesdkbaselib中已经提供了预先注册完毕所有回调侦听的cs文件:U3DTypeEventListener.cs接入开发者需要在U3DTypeEventListener监听类中,根据不同回调事件实现相应的游戏逻辑。 也可以根据自己需要,在游戏内合适的地方,参考demo自行注册相关的函数侦听。

TypeSDK基础数据类型


U3DTypeBaseData

TypeSDK用到的数据类型继承于U3DTypeBaseData,您可用使用此对象及其方法,获取或创建TypeSDK传递数据对象。

1. 创建U3DTypeBaseData对象

U3DTypeBaseData  baseData = new U3DTypeBaseData();

2. 设置一条属性

函数名 public void SetData(string attName,string attValue)
参数列表 string attName, U3DTypeAttName中定义的字段
string attValue 目前支持int,string,boolean 三种类型基本数据
返回值 Void
示例:

baseData.SetData(“键名”,”值”); (键名使用U3DTypeAttName定义的字段)

3. 获得一个string类型的属性 attname为标识

函数名 public string GetData(string attName)
参数列表 string attName, U3DTypeAttName中定义的字段
返回值 String 指定key值的string类型value

4. 获得一个int类型的属性 attname为标识

函数名 public int GetInt (string attName)
参数列表 string attName, U3DTypeAttName中定义的字段
返回值 Int 指定key值的int类型value

5. 获得一个bool类型的属性 attname为标识

函数名 public bool GetBool(string attName)
参数列表 string attName, U3DTypeAttName中定义的字段
返回值 Bool 指定key值的boolean类型value

使用例子

//新建一个对象

U3DTypeBaseData egData = new U3DTypeBaseData ();
<em>//给该对象赋值</em>

egData.SetData (U3DTypeAttName.APP_KEY, "123456789");

<em>//</em><em>读取一个string类型数据</em><em>readStr = "123456789</em>
string readStr = egData.GetData (U3DTypeAttName.APP_KEY);

<em>//</em><em>读取一个</em><em>int</em><em>类型数据</em><em>readInt</em>
int readInt = egData.GetInt(U3DTypeAttName.APP_KEY); <em> = 123456789</em>

响应消息传递类型


U3DTypeEvent

TypeSDK通过U3DTypeEvent对象传递响应消息传递的消息类型

public delegate void U3DTypeEventDelegate( U3DTypeEvent evt);

事件对象例子

获取SDK用户登录成功的消息。

void LoginResult(U3DTypeEvent evt)
{
U3DTypeBaseData data = evt.evtData;
string userID = data.GetData(U3DTypeAttName.USER_ID);
string userToken = data.GetData(U3DTypeAttName.USER_TOKEN);
}

详细调用接口


1. SDK初始化接口

接口函数:

public void InitSDK()

sdk的初始化接口,再调用其他sdk功能前,请务必先执行该接口,所有渠道都要求在应用启动开始就调用此接口。

调用例子

U3DTypeSDK.Instance.InitSDK();

回调函数:

//初始化完成后回调函数
void NotifyInitFinish(U3DTypeEvent evt)
{
//游戏需要等待此回调出现后才允许在游戏逻辑内调用登录接口。
}

2. 调用登录窗口

接口函数:

public void Login ()

显示登录界面,若登录成功则会发送TypeEventType.EVENT_LOGIN_SUCCESS消息。请在登录界面自动执行调用,不可出现需要点击按钮才显示的情况。 当用户登录失败时需要,再次调用此接口。

调用例子

U3DTypeSDK.Instance.Login();

回调函数:

//登录操作完成后的回调函数
void NotifyLogin(U3DTypeEvent evt){
//解析渠道登录成功返回的信息,一般有user_token,user_id...
//此时返回的结果不能作为登录依据,需要进过服务端验证,取的服务器返回的最终数据。
//CP方需要将信息解析为CP服务器约定的数据格式转发给游戏服务器,并由游戏服务器转发至TypeSDK Server以完成游戏的登录验证
string userId = evt.evtData.GetData(U3DTypeAttName.USER_ID);
}

3. 提交用户信息

接口函数:

public void UpdatePlayerInfo ()

在有些指定事件,需要设置用户相关信息并且提交。登录完成进入游戏、用户升级、建角。

需要设置的属性如下,当没有该属性时,请传空字符串
string ROLE_TYPE = "create_role";//角色统计信息类型即调用时机,(createRole:创建角色,levelUp:角色升级,enterGame:选定角色进入游戏,不能为空字符串)
string SAVED_BALANCE = "0";//当前角色余额(RMB购买的游戏币),默认为0
string USER_NAME = "user_name"; //用户名
string USER_TOKEN = "user_token"; //游戏服务端在完成登录token验证返回中的渠道授权token。需要将授权token返回游戏客户端,并通过此参数提交TypeSDK客户端。
string USER_ID = "user_id"; //用户id,游戏服务端在完成登录token验证返回中获得,务必填写。
string USER_HEAD_ID = "user_head_id"; //用户头像id
string USER_HEAD_URL = "user_head_url"; //用户头像url
string VIP_LEVEL = "vip_level";//VIP等级,没有传0
string PARTY_NAME = "party_name";//工会名称,如:天下第一
string ROLE_ID = "role_id"; //角色id
string ROLE_NAME = "role_name"; //角色名字
string ROLE_LEVEL = "role_level"; //角色等级
string ROLE_CREATE_TIME = "role_create_time";//角色创建时间,一定要服务器时间(单位/秒)
string ROLE_LEVELUP_TIME = "role_levelup_time";//角色升级时间(单位/秒)
string ZONE_ID = "zone_id"; //所在大区id
string ZONE_NAME= "zone_name"; //所在大区名称
string SEVER_ID = "server_id"; //所在服务器id
string SERVER_NAME = "server_name";//所在服务器名称
调用例子
//设置所有的数据
U3DTypeSDK.Instance.GetUserData().SetData(U3DTypeAttName.USER_ID,"123");
U3DTypeSDK.Instance.GetUserData().SetData(U3DTypeAttName.USER_NAME,"user1342137");
U3DTypeSDK.Instance.GetUserData().SetData(U3DTypeAttName.ROLE_ID,"c1276481");
U3DTypeSDK.Instance.GetUserData().SetData(U3DTypeAttName.ROLE_NAME,"无敌二三");
U3DTypeSDK.Instance.GetUserData().SetData(U3DTypeAttName.ROLE_LEVEL,"32");
// .....其他需要设置的信息
// 提交数据
U3DTypeSDK.Instance.UpdatePlayerInfo();
回调函数:

4. 支付

接口函数:
public string PayItem (U3DTypeBaseData _in_pay);
在获取服务器生成订单号,并在TypeSDK Server服务器提交订单信息后,调用此接口启动渠道的支付界面,进行用户支付行为。 调用例子
//创建一个订单信息
U3DTypeBaseData payData = new U3DTypeBaseData();
//用户ID,渠道返回,没有填空字符串
payData.SetData(U3DTypeAttName.USER_ID,userData.GetData(U3DTypeAttName.USER_ID));
//用户token,登录验签完成后由游戏服务端返回,没有填空字符串
payData.SetData(U3DTypeAttName.USER_TOKEN,userData.GetData(U3DTypeAttName.USER_TOKEN));
//商品支付价格(单位:分)
payData.SetData(U3DTypeAttName.REAL_PRICE,"100");
//商品名称,不要出现空格和特殊字符。
payData.SetData(U3DTypeAttName.ITEM_NAME,"skbi");
//商品数量
payData.SetData(U3DTypeAttName.ITEM_COUNT,"1");
//所在服务器id(如果没有填“0”)
payData.SetData(U3DTypeAttName.SERVER_ID,"1");
//所在服务器名字(如果没有填“server_name”)
payData.SetData(U3DTypeAttName.SERVER_NAME,"安卓一区");
//所在大区id(如果没有填“0”),注意应用宝要求:账户分区ID_角色ID。每个应用都有一个分区ID为1的默认分区,分区可以在cpay.qq.com/mpay上自助配置。如果应用选择支持角色,则角色ID接在分区ID号后用"_"连接,角色ID需要进行urlencode。payData.SetData(U3DTypeAttName.ZONE_ID,"1");
//所在大区名字(如果没有填“server_name”)
payData.SetData(U3DTypeAttName.ZONE_NAME,"华北一区");
//内部订单号(必须填写,并保证多区情况下,订单号唯一)
payData.SetData(U3DTypeAttName.BILL_NUMBER,"NO_123456");
//商品id(需和TypeSDK Server商品列表保持一致)
payData.SetData(U3DTypeAttName.ITEM_SEVER_ID,"id");
//传递的额外参数(建议传入需要用来做订单标识的信息)
payData.SetData(U3DTypeAttName.EXTRA,"extra");
//商品描述,不要出现空格和特殊字符串
payData.SetData(U3DTypeAttName.ITEM_DESC,"1000元宝,送1000元宝");
//玩家在游戏中的角色ID
payData.SetData(U3DTypeAttName.ROLE_ID,"role_1234");
//玩家在游戏中的角色名字
payData.SetData(U3DTypeAttName.ROLE_NAME,"玩家编号001");
U3DTypeSDK.Instance.PayItem (U3DTypeBaseData _in_pay);
回调函数:
//支付结果通知回调,CP需根据支付返回结果完成相应逻辑。

void NotifyPayResult(U3DTypeEvent evt){
if (evt.evtData.GetData(U3DTypeAttName.PAY_RESULT).Equals("1"))
{//支付成功
Debug.Log("pay finished:" + evt.evtData.GetData(U3DTypeAttName.PAY_RESULT_DATA));
}
else
{//支付失败,或取消。
Debug.Log("pay failed:" + evt.evtData.GetData(U3DTypeAttName.PAY_RESULT_REASON));
}
}

event中data的参数包括以下内容 PAY_RESULT//支付结果(1/0/2)成功/失败(除取消)/支付取消 说明:客户端收到“失败或支付取消”状态,建议客户端可以使用户直接发起下笔充值。 PAY_RESULT_REASON//支付结果的原因(失败原因) PAY_RESULT_DATA//支付结果的返回数据

5. 登出账号

回调函数:

//登出结果通知回调,说明用户已经做了退出账户操作,
void NotifyLogout(U3DTypeEvent evt){
//需要返回登录界面,并重新调用登录
}

6. 请求关闭应用

接口函数:

public void ExitGame ();

用户需要退出游戏时,如按退出键,游戏不应直接退出游戏,需调用渠道退出接口,将退出确认行为交由渠道执行。游戏的真实退出需要执行的 逻辑可放在OnDestroy()中执行。 调用例子:

//查询当前渠道是否有退出确认窗口
if (U3DTypeSDK.Instance.IsHasRequest(“support_exit_window”))
{
//如渠道有退出确认窗口,则直接调用ExitGame
U3DTypeSDK.Instance.ExitGame();
}else{
//如渠道无退出确认窗口,建议弹出游戏的确认界面
//
if (GUI.Button(new Rect(50,250,200,30), "我要退出"))
{
//用户确认要退出后,执行ExitGame
U3DTypeSDK.Instance.ExitGame();
}
}

回调函数:

//取消退出游戏通知回调,如果用户在渠道确认退出界面取消了退出,则触发此回调。
void NotifyCancelExit(U3DTypeEvent evt){
}

7. 获取channel_id、cp_id

接口函数:

public U3DTypeBaseData GetPlatformData()

初始化后可随时调用,已获得渠道相关数据。 CHANNEL_ID//渠道的id, CP_ID//应用开发者自己的id(用作内部多游戏辨识)

调用范例:

U3DTypeBaseData platformData = U3DTypeSDK.Instance.GetPlatformData()
String channelID = platformData..GetData(U3DTypeAttName.CHANNEL_ID))
String cpID = platformData..GetData(U3DTypeAttName.CP_ID))

8. 获取用户渠道账号信息

接口函数:

public U3DTypeBaseData GetUserData()

收到用户登录成功回调后可随时调用,已随时获取用户相关数据。 获取用户信息数据 其中包含了 string USER_TOKEN = "user_token"; //用户渠道验证用token string USER_ID = "user_id"; //用户id

调用范例:

U3DTypeBaseData userData = U3DTypeSDK.Instance.GetUserData()
String userId = userData..GetData(U3DTypeAttName.USER_ID))
String userToken = userData..GetData(U3DTypeAttName.USER_TOKEN))

其他调试方法


除了在Android平台下直接进行真机调试外。为了放方便用户进行调试,TypeSDK Unity资源内集成了一套Winodws平台测试逻辑可帮助用户跑通SDK流程测试。

客户端调试.png

切换至Winodws平台后,即可直接Unity使用开发界面的播放按钮进行测试。