在上一篇《iOS平台接口设计及思路》中我们阐述了ios平台的接口结构和思路。在这里我们将阐述unity平台下的接口结构和思路。
unity平台是开发平台,我们的程序代码是在这个ide下堆叠的。unity端并不需要过多的考虑不同运行平台(安卓/iOS)上的底层机制是如何实现的,本身unity已经做了相应的处理,我们只需要知道自己当前的运行平台是什么样的,然后做好相关的平台差异
2.对不同运行平台(安卓/iOS)能自适配
化接口调用就行。
因为unity平台是开发平台,游戏渠道的差异性我们在运行平台(安卓/iOS)上做了处理,那么unity部分客户端,就不怎么需要关心渠道差异化的处理了。
一、那么我们还是照例,先看看想要设计的需求
1.调用简便
二、设计的模块
1.唯一的给外部调用接口模块
2.针对不同运行平台(安卓/ios/windows)的接口实现
三、具体的细节
如图所示的结构,我们在untiy主要实现了以下几个功能
1.游戏客户端的所有接口调用是通过typesdk类
2.typesdk会根据当前运行平台的不同,调用接口在不同平台上的实现逻辑
3.这些不同平台上的实现逻辑会跨平台调用原生环境的接口
4.原生环境所有的信息数据发送给typenotify类
5.typenotify类将相关数据转发给typesdk类
6.typesdk再将数据处理后反馈给游戏客户端
给到游戏调用的 typeSDK类中我们需要以下的接口定义
登录接口 public void InitSDK()
获取缓存在原生平台处的sdk用户数据 public U3DTypeBaseData GetUserData()
获取缓存在原生平台的渠道配置信息 public U3DTypeBaseData GetPlatformData()
登录接口 public void Login()
登出接口 public void Logout()
支付接口 public string PayItem(U3DTypeBaseData _in_pay)
提交用户信息接口 public void UpdatePlayerInfo()
大退游戏接口 public void ExitGame()
根据函数名执行拓展函数接口 public void DoAnyFunction(string _func_name,U3DTypeBaseData _in_data)
我们可以通过类继承来实现不同的运行环境下调用不同的接口
在c#中,我们可以使用宏定义来实现这一功能,具体示例可以参考以下代码的例子
public class TypeSDK : #if UNITY_ANDROID Bonjour_Type_Common #elif UNITY_IOS Bonjour_Type_Common_IOS #elif UNITY_STANDALONE_WIN Bonjour_Type_Common_Win #else Bonjour_Type_Common_Win #endif { }
用来响应原生平台的数据传递类typenotify
因为unity本身已经对跨平台的数据接收做了很好的封装,只需要知道我们的脚本对象名字,其他平台就可以直接执行这个脚本内的函数,所以我们在设计聚合sdk时,做了如下的一些响应函数的定义
//登录成功响应 public void NotifyLogin(string _in_data) //登出响应 public void NotifyLogout(string _in_data) //支付结果响应 public void NotifyPayResult(string _in_data) //初始化完毕响应 public void NotifyInitFinish(string _in_data) //拓展函数回调响应 void NotifyExtraFunction(string _json_string)
如此一来,整个流程就成型了一个完整的体系。从接口的调用,到跨平台数据的接收都有了相关的设计。
这个项目已开源,大家有兴趣可以自己研究或者参照项目编写自己的聚合SDK
项目地址:https://code.csdn.net/typesdk_code
项目地址:https://github.com/typesdk