2.2 游戏SDK的流程图
游戏SDK最核心的是登录和支付功能,其它的都是运营相关的,例如埋点、数据统计等等~
登录和支付的流程大概如下图:
图画的比较简陋,解释一下,上半部分是登录流程、下半部分是支付流程,
流程还算比较简单的~
接下来说说游戏SDK开发的一些需要注意的点:
三、游戏SDK开发注意事项
3.1 少依赖
很多开发者都知道,作为SDK,应该尽量少使用开源库,或者说不用开源库,
而是通过手写网络框架,手写数据库等等,主要是考虑两个方面:
- 减小SDK体积 ;
- 避免第三方接入的时候发生依赖冲突
当然,依赖库并不是说不能用,有时候一些数据统计的库需要依赖第三方,那这种情况是没有办法避免的,可以在对接文档中提供一个解决依赖冲突的办法
3.2 解决依赖冲突
方式一
在app的build.gradle中添加类似配置如下:
configurations.all {
resolutionStrategy {
//解决v4包冲突,强制使用这个版本的v4包
force ‘com.android.support:support-v4:26.1.0’
}
}
方式二
exclude
implementation(“com.xxx.xxx:xx”) {
exclude group: ‘com.android.support’
}
复制代码
exclude是最常用的解决依赖冲突的方式,但如果多个依赖库引入不同版本的其它库,需要分别写好多个exclude,显然第一种方式比较简单粗暴。
3.3 对外暴露的接口尽量少
面向接口编程,以游戏SDK为例,对外暴露的接口一般有SDK初始化、登录、支付等,参考设计如下:
定义接口:
interface IGame {
// 1、在Application中调用,
fun registerApp(context: ApplicationContext, appId: String)
// 2、在activity中初始化
fun init(activity: Activity)
// 3、业务接口,登录、支付等等
fun login(loginCallBack: LoginCallBack)
fun pay(product: Product, payCallBack: PayCallBack)
…
}
复制代码
实现类
/**
- 实现类
*/
class GameImpl : IGame{
override fun registerApp(context: ApplicationContext, appId: String) {
//appid相关
}
override fun init(activity: Activity) {
//初始化逻辑,例如显示悬浮窗
}
override fun login(loginCallBack: LoginCallBack) {
//登录逻辑
}
override fun pay(product: Product, payCallBack: PayCallBack) {
//支付逻辑
}
…
}
复制代码
实现类是我们的内部逻辑,我们不希望被外部访问到,外部只需要知道有 IGame
这个接口中的方法就行,我们可以再写个单例的管理类来给外部使用
/**
- 单例的SDK管理类
*/
object GameSDKManager :IGame{
//实现类私有化
private val gameImpl: IGame by lazy { GameImpl() }
override fun registerApp(application: Application, appId: String) {
gameImpl.registerApp(application,appId)
}
override fun init(activity: Activity) {
gameImpl.init(activity)
}
override fun login(loginCallBack: LoginCallBack) {
gameImpl.login(loginCallBack)
}
override fun pay(product: Product, payCallBack: PayCallBack) {
gameImpl.pay(product,payCallBack)
}
}
复制代码
kotlin
的object
关键字表示单例,
外部通过GameSDKManager.xxx
来调用SDK中的方法,
以后要提供其它方法,只要修改 IGame
接口,然后在 GameSDKManager
和 GameImpl
中分别实现即可。
当然,不是说一定要这样拆分三个类,这只是一个面向接口编程的例子。
四、游戏SDK的坑
游戏SDK前期开发自测可能是很顺利的,难度不大,但是在跟游戏对接的时候可能会出现一些问题, 什么ClassNotFound、Resource not fou