iOS 广告SDK总结(二)

作者: George_Luofz | 来源:发表于2018-03-19 14:45 被阅读1172次

    接上篇,广告SDK设计

    SDK接口设计

    一个好的SDK应该至少包含三部分:

    1. SDK库
    2. 接入文档
    3. demo
    SDK对接文件目录
    1.API及注释

    根据之前的经验,API接口其实越简单越好,最好的样子就是一个初始化接口、一个调用接口和一个关闭接口,完事;调用方不想多花一秒钟看你的API。

    • 简单合理;
      1. 如果一个方法能实现,就不采用两个方法;
      2. 方法参数尽量做到最少,若方法参数超过3个,则封装成参数模型;SDK内部可以获取的,在内部获取就好
      3. 非必须实现的protocol,用optional关键字清晰标注
      4. 内部变量不暴露到外边,若需要暴露,则readonly属性
      5. 若有相似广告形式,如直播贴片和视频贴片功能几乎一样,分成两个类单独开发
      6. 尽量使用同步接口,不使用异步接口
      7. 记得提供一个版本号接口
    • 命名规范
      1. 类名统一加平台的前缀,方便开发者区分,例如YXAdSDKXXX类
      2. 采用驼峰命名,类名、方法名、字段名能清晰表明其用途
      3. 多个数值采用枚举值
    • 注释详细
      1. 清晰表明当前方法调用线程、参数范围、参数类型、默认值等信息
      2. 必要内部逻辑,告知开发者,如开屏请求,内部保证在2s内回调,开发者无需再添加倒计时定时器
      3. 新版本新增接口、属性等,加入对应的版本标识
    • 可扩展
      1. 接口设计应该能考虑未来可预见变化,这也是区分水平的点;如原生广告请求参数,多设计一个ext参数,未来若有需要可以直接在此传递
      2. 回调protocol尽可能详尽,最好能将UI整个过程开放出来;比如视频贴片回调,加入开始、当前播放时长等回调,若开发者临时需要,也不必再改SDK
    • 隐私性
      1. SDK要有自我保护意识,就是说开发者不能改外部的一些参数、值之类,影响到SDK内部逻辑。比如说,原生广告会回调素材模型给开发者,在模型中不要加入上报url等字段,SDK内部保留即可。
      2. 暴露给开发者的每个字段都是不得不暴露才暴露的,开发时候要深思熟虑
    2.文档

    良好的文档,会让开发者对接很舒服,后期的麻烦也会更少。
    文档应该至少包含以下几部分,各大主流SDK基本也是这么做的:
    一图剩千言:


    广告SDK接入文档目录
    3.demo

    demo的作用是,让开发者了解调用过程,降低学习成本;换句话说就是,方便其抄代码。
    做到将所有暴露的类及方法展现给开发者,有时候要加一些特殊情况的实现,给开发者提供一些便利。


    SDK架构设计

    外部良好的接口+内部优良的设计就是一套好的SDK了
    SDK的架构跟App的架构差不太多,其实都是MVC的变体,只不过SDK没有C,所以要有个其他的容器处理UI与数据交互逻辑。
    按层级分,可以由上到下分为:API层 -> service层 -> module层

    1. API层,提供开发者调用接口,内部调用service层,封装部分逻辑、数据等
    2. service层,业务层,调用module层功能块,组合数据,创建UI、处理业务逻辑等,是SDK核心层级
    3. module层,底层功能块,一般有
      1. network(client)
      2. cache(模型缓存、图片视频缓存、上报信息缓存等)
      3. utils(提供)
      4. dataCenter(提供全局配置信息、机型信息、沙盒目录等等)
      5. logger(提供日志、上报服务)
      6. library(reachiablity、encode/decode、一些扩展)
    4. 关于架构的个人感受
      最开始的底层模块要设计好,如果不好就重构
      特别是模块与模块之间的接口部分,多为上层考虑,这里是考验经验水平的地,只懂理论不行
      这里有一个腾讯的小哥,总结的SDK系列文章,比我的更有深度,推荐看看:SDK设计心得之接口设计

    相关文章

      网友评论

        本文标题:iOS 广告SDK总结(二)

        本文链接:https://www.haomeiwen.com/subject/rehpqftx.html