接上篇,广告SDK设计
SDK接口设计
一个好的SDK应该至少包含三部分:
- SDK库
- 接入文档
- demo
1.API及注释
根据之前的经验,API接口其实越简单越好,最好的样子就是一个初始化接口、一个调用接口和一个关闭接口,完事;调用方不想多花一秒钟看你的API。
- 简单合理;
- 如果一个方法能实现,就不采用两个方法;
- 方法参数尽量做到最少,若方法参数超过3个,则封装成参数模型;SDK内部可以获取的,在内部获取就好
- 非必须实现的protocol,用optional关键字清晰标注
- 内部变量不暴露到外边,若需要暴露,则readonly属性
- 若有相似广告形式,如直播贴片和视频贴片功能几乎一样,分成两个类单独开发
- 尽量使用同步接口,不使用异步接口
- 记得提供一个版本号接口
- 命名规范
- 类名统一加平台的前缀,方便开发者区分,例如YXAdSDKXXX类
- 采用驼峰命名,类名、方法名、字段名能清晰表明其用途
- 多个数值采用枚举值
- 注释详细
- 清晰表明当前方法调用线程、参数范围、参数类型、默认值等信息
- 必要内部逻辑,告知开发者,如开屏请求,内部保证在2s内回调,开发者无需再添加倒计时定时器
- 新版本新增接口、属性等,加入对应的版本标识
- 可扩展
- 接口设计应该能考虑未来可预见变化,这也是区分水平的点;如原生广告请求参数,多设计一个ext参数,未来若有需要可以直接在此传递
- 回调protocol尽可能详尽,最好能将UI整个过程开放出来;比如视频贴片回调,加入开始、当前播放时长等回调,若开发者临时需要,也不必再改SDK
- 隐私性
- SDK要有自我保护意识,就是说开发者不能改外部的一些参数、值之类,影响到SDK内部逻辑。比如说,原生广告会回调素材模型给开发者,在模型中不要加入上报url等字段,SDK内部保留即可。
- 暴露给开发者的每个字段都是不得不暴露才暴露的,开发时候要深思熟虑
2.文档
良好的文档,会让开发者对接很舒服,后期的麻烦也会更少。
文档应该至少包含以下几部分,各大主流SDK基本也是这么做的:
一图剩千言:
广告SDK接入文档目录
3.demo
demo的作用是,让开发者了解调用过程,降低学习成本;换句话说就是,方便其抄代码。
做到将所有暴露的类及方法展现给开发者,有时候要加一些特殊情况的实现,给开发者提供一些便利。
SDK架构设计
外部良好的接口+内部优良的设计就是一套好的SDK了
SDK的架构跟App的架构差不太多,其实都是MVC的变体,只不过SDK没有C,所以要有个其他的容器处理UI与数据交互逻辑。
按层级分,可以由上到下分为:API层 -> service层 -> module层
- API层,提供开发者调用接口,内部调用service层,封装部分逻辑、数据等
- service层,业务层,调用module层功能块,组合数据,创建UI、处理业务逻辑等,是SDK核心层级
- module层,底层功能块,一般有
- network(client)
- cache(模型缓存、图片视频缓存、上报信息缓存等)
- utils(提供)
- dataCenter(提供全局配置信息、机型信息、沙盒目录等等)
- logger(提供日志、上报服务)
- library(reachiablity、encode/decode、一些扩展)
- 关于架构的个人感受
最开始的底层模块要设计好,如果不好就重构
特别是模块与模块之间的接口部分,多为上层考虑,这里是考验经验水平的地,只懂理论不行
这里有一个腾讯的小哥,总结的SDK系列文章,比我的更有深度,推荐看看:SDK设计心得之接口设计
网友评论