如何为客户端 SDK 写一篇好的开发者教程

116 阅读4分钟

概览

客户端 SDK(Software Development Kit),顾名思义,是集成在应用客户端的 SDK。SDK 作为产品与app 开发者的交互,从下载集成开始,历经功能开发、测试、打包等流程后作为应用的一部分上线,最终交付给 app 用户。

客户端 SDK 特殊在哪里呢?首先是终端设备的多样化,比如移动端、桌面端、嵌入式设备、浏览器等;其次是操作系统的多样化,比如 Android、iOS、macOS、Windows、Linux、HarmonyOS、Chrome、FireFox、Safari;再次是技术栈的多样化,比如 Java、Kotlin、Objective-C、Swift、C++、C#、React Native、Flutter、Unity、Electron、Uniapp、React.js、Vue.js。为了尽可能满足客户的需求,客户端 SDK 通常会扩大支持范围,为自己赢得竞争优势。

如何保证美好的第一印象

对于 ToB 业务,用户(应用开发者)的初体验就是从 SDK 的下载集成到 TTFHW(Time To First Hello World),这也是用户对 SDK 的第一印象。

如何保证美好的第一印象呢?对于应用开发者来说,不需要什么花里胡哨的东西。他们只认准一点:能跑通就是最美好的体验。如果跑都跑不通,后面的功能再多也体验不到。

提供可跑通的示例项目和配套的跑通指南

很多做 ToB 业务的公司都会准备好示例项目,把常见的功能集成好。开发者拿到示例项目,只要能跑起来,就能参考这个示例项目开发自己的应用。但是跑起来这个事情本身好像也没那么容易。

拿一个放在 GitHub 仓库里的示例项目为例。开发者需要连续做对这些事情才能算真正跑通:

  1. 使用正确的开发设备。
  2. 正确配置开发环境。
  3. 把项目仓库拉下来。
  4. 为项目安装正确的依赖项。
  5. 在正确的运行环境下运行项目。
  6. 运行成功后看到期望的效果

技术文档工程师说:交给我吧!把项目的 README 写成一个详尽的跑通教程即可!当然,自己写的教程,自己必须能跟着跑通。最好还有不熟悉项目的开发者也能自主跑通。

这里是一个 Android 示例项目的 README

有了这个跑通指南之后,仓库的 issue 就少了很多  “demo 怎么跑不通啊!”  的问题了。因为开发者基本都能一次跑通啦。

提供可跑通的手把手教程

跑通之后,开发者就要从项目里面看 SDK 的具体实现逻辑了。等一等,哪些是 SDK 的 API,哪些又是 Android 原生库,还有哪些是项目引用的第三方库呢?需要花点时间找了。对于没有耐心的开发者,也许就不看了,直接一句:“问客户支持吧“。

public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        Log.i(TAG, "onSurfaceTextureAvailable");
        mTextureDestroyed = false;
        mSurfaceWidth = width;
        mSurfaceHeight = height;
        mEglCore = new EglCore();
        mDummySurface = mEglCore.createOffscreenSurface(1, 1);
        mEglCore.makeCurrent(mDummySurface);
        mPreviewTexture = GlUtil.createTextureObject(GLES11Ext.GL_TEXTURE_EXTERNAL_OES);
        mPreviewSurfaceTexture = new SurfaceTexture(mPreviewTexture);
        mPreviewSurfaceTexture.setOnFrameAvailableListener(this);
        mDrawSurface = mEglCore.createWindowSurface(surface);
        mProgram = new ProgramTextureOES();
        if (mCamera != null || mPreviewing) {
            Log.e(TAG, "Camera preview has been started");
            return;
        }
        try {
            mCamera = Camera.open(mFacing);
            /**It is assumed to capture images of resolution 640x480. During development, it should
             * be the most suitable supported resolution that best fits the scenario.*/
            Camera.Parameters parameters = mCamera.getParameters();
            parameters.setPreviewSize(DEFAULT_CAPTURE_WIDTH, DEFAULT_CAPTURE_HEIGHT);
            mCamera.setParameters(parameters);
            mCamera.setPreviewTexture(mPreviewSurfaceTexture);
            /**The display orientation is 90 for both front and back facing cameras using a surface
             * texture for the preview when the screen is in portrait mode.*/
            mCamera.setDisplayOrientation(90);
            mCamera.startPreview();
            mPreviewing = true;
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

从示例项目里面扒代码确实是一个不错的方法,但是有没有对开发者更友好的方法呢?技术文档工程师回答:当然有!

以构建一个极简功能的应用为目标,从选择开发设备、配置开发环境开始,到使用 IDE(Integrated Development Environment)建立空项目、集成 SDK、实现基本逻辑、构建并运行项目、测试运行效果。一套全程保姆级的教程就诞生了。

下面是一个基于 Flutter 的客户端 app 教程:

等到运行完成的那一刻,开发者的 aha moment 就诞生了。

更进一步:可以实时互动的手把手教程

这是 Apple 的 SwiftUI 教程。设计感与可操作性的完美结合:

当然想做到苹果这样是不太容易的。但我们也可以做到类似的效果。

接下来,技术文档工程师还能做什么

开发者体验的提升永无止境。优秀的开发者体验,会给你的产品带来巨大的竞争优势。

举个例子,React.js 官方文档重构的事情:

github.com/reactjs/rea…

issue 里提到了通过实际操作来学习 React。而目前的 Beta 文档站点也践行了这个目标:

这里使用了 codesandbox 的嵌入。

可以看到,开发者文档和代码的边界其实是比较模糊的。软件行业的技术文档工程师需要拥抱代码,才能在正确的方向上有效提升开发者体验。