SDK

打造一款SDK产品

Build a nice SDK

Posted by 宸笙 on June 24, 2018

什么是SDK

Software Development Kit(软件开发工具包),简单说:就是能帮助程序员快速开发的工具,表现形式一般为类库并可直接调用和替换升级;

本文更多的阐述SDK相关的生态和场景,至于技术部分可以参考下笔者的另一篇总结《SDK概述》

SDK分类

对象存储SDK,消息推送SDK,即时通讯SDK,音视频SDK,图像处理SDK,统计埋点类SDK,直播SDK,广告SDK,热修复SDK,地图SDK,游戏SDK,微博SDK,图像识别SDK,实时数据SDK,性能统计ApmSDK,支付SDK,分享SDK,短信SDK等;有的重业务,有的偏技术,偏技术的能更好的做到用户无感知,也有技术难度,而很多SDK均是对开放接口(RestApi)的封装;

SDK行业生态

这里主要讨论的是移动端的SDK,在移动互联网的早期,很多创业公司开始各种创业,比如电商类的,社交类的等等,不过有一类公司却出其不意定位在为开发者提供一个平台或公用组件,经过较好实践后供开发者复用,这类公司面向的对象是开发App的程序员,是面向开发者(toD)的公司,通过向开发者提供开放接口和SDK组件等服务来实现盈利等;

打造一款SDK产品

行业定位与需求调研

  1. 比如笔者所在行业是后端云服务,这个时候可以先调研行业的解决方案,可以不限于国内,比如国外的Parse,实际上也可以看到国内的Baas服务商基本很多的Api都是和Parse的SDK高度相似的,14年很多类似的创业公司的文档也是很类似的;
  2. 就拿Baas举例,基本要实现的有:
    • 数据存储
    • 文件服务
    • 实时数据功能
    • or 推送功能 or IM
    • 云逻辑支持
    • 开放的平台RestApi
    • 使用更为便捷的客户端SDK
    • 其他功能封装-短信SDK等

开发SDK

确定了需求和要实现的功能就能开始和后端同事约定接口并开发SDK了,这里的SDK即可以是对Rest接口的封装,也可以走另一套逻辑,所以你能看到比如Bmob的短信充值,有SDK短信和RestApi短信之分;其实你可能有困惑,为什么既然都有RestApi了还需要客户端SDK呢,其实客户端SDK是为了能更方便的调用不同客户端平台特性,也能节省很多开发者的劳动,比如常用的缓存,数据的序列化和反序列化,这些相当于一种复用的思想,你直接用SDK写好了的即可一般都会开发以下语言的SDK:

  • Android
  • IOS
  • JavaScript
  • Java
  • PHP
  • Unity(C#)
  • 其他 对其他相对小众语言的支持可能不会单独额外招人,可能是来自社区的贡献或者是其他同事客串写的,比如Golang,Python等,举例说,新浪微博SDK的Python版本就是廖雪峰前辈写的;

SDK开发工程师

  1. 公司的核心产品就是SDK,所以对SDK开发工程师的技能是有一定要求的,需要有较好的基础和设计能力,才能hold住很多开发者;
  2. SDK工程师可能同时也是技术支持,有的公司有明确的划分,有的可能都是一个人承担;

持续迭代维护

SDK是开发者服务公司的核心产品,生命周期较长,就需要持续迭代开发,迭代的基本是三种原因:

  1. 新增功能
  2. Bug修复
  3. 内部优化和重构

需要注意的是,每次版本迭代都需要写好ChangeLog和注意升级成本,后者很影响到开发者的使用体验;

反馈机制

来自用户(开发者)的反馈有助于更好的改善SDK产品,对于工程师来说,用很多用户在用的产品也是对自己的肯定,开发的SDK接受开发者的考验,修复内在的Bug,在这个过程中也是对能力的提升,一般来说,反馈机制有:

  1. QQ群;

    简单直接,但是很难沉淀而且重复严重,几乎没有复用;

  2. 社区论坛;

    方便开发者提交问题,技术人员解答,但容易有其他无关信息,因为每个用户逗能回答和提交;

  3. 工单系统和进一步的知识库;

    为了更好提供技术支持,引入了工单和知识库系统,每个工单只有提问者和官方人员可见,同时官方技术人员可以根据问题是否典型选择添加到知识库供其他开发者参考;

    入口如下: WorkOrder 可以选择不同的分类和版本信息等,方便技术人员排查分析;

    知识库页面: KnownResp

    这样以来能从一定程度上提高效率,积累沉淀问题并减少很多重复的工作;

持续有效的技术支持

其实不管反馈渠道和机制多么完善,及时的技术支持才是重要的(尤其是对Vip用户),但是有个问题,工程师们更多的是写代码,怎么做到尽量及时呢,看到有的公司是规定工程师一天要隔一定时间比如4小时去查看工单系统,其实可以这么做,写个简单的爬虫,有新的工单提交即可看到通知,从主动轮询到被动通知,就是一个观察者模式嘛;

引导用户如何有效提问

  1. 学会提问也是技术活;

    很多用户表达不清晰导致效率不高,工程师需要适当引导,比如是不是基础功能使用出了问题,是否对照测试过SDKDemo,是否校对过代码等;也看到友商公司专门给开发者录制了一个教学视频讲述如何正确提问;

  2. 工程师的心态调整;

    技术支持也有技术含量,学会用技术去改善重复性的问题,在沟通中帮开发者解决技术问题也是对自己的一种锻炼;

    文档和问题表述能力,写文档的能力容易被忽略,简明晓畅的表达让开发者容易读懂,在这个过程中你的专业程度也会被锻炼到;

完善的辅助Demo和文档

  1. 完善的Demo和文档能使得开发者流畅地接入和使用SDK;
  2. 文档不仅包括常用Api使用,还更应该介绍不同的使用场景,常见问题处理等;

社区建设

  1. 项目

    SDK工程师开发使用SDK开发的App项目并开源,代表着SDK的最佳实践;

  2. 让开发者也参与进来

    文档项目或者一些开源的SDK可以支持让开发者一起参与并完善;

  3. 技术团队的博客输出

    代表着团队的技术实例和技术分享热情,可以看到很多类似公司都有技术博客页面或者在掘金之类的技术媒体的官方账号;

如何选择一款SDK or 怎样的SDK才是较为靠谱的

  1. 使用者是否有知名开发者或者团队;
  2. SDK是否支持主流开发平台;
  3. 是否有完善的文档,Demo支持;
  4. 技术支持是否及时响应,工单系统等;
  5. SDK的稳定性,是否持续更新,SDK新旧版本的替换升级版本等;
  6. SDK的Api是否好用明确等;