打造百亿量级、亿级日活SDK的十大关键要点

312 阅读8分钟

一个好的SDK应该具备易用性、稳定性、轻量、灵活的特点,而个推作为国内第三方推送市场的早期进入者,一直致力于为开发者提供高效稳定的推送SDK。

经过十年的深耕与创新,个推夯实了行业地位。截止2019年6月,个推SDK累计安装量超440亿,日活独立设备数达4.3 亿,并成功服务了人民日报、新华社、微博、马蜂窝、酷我音乐等一系列明星APP。辉煌数据的背后是强大的技术支撑。

这期文章,我们特地采访了个推Android 资深开发敬瑜,以个推推送SDK为例,来聊聊打造大型SDK的关键技术点。

作者 个推Android 资深开发 敬瑜

01 开发 SDK 和 开发APP 有什么联系?

APP 和 SDK两者关系密切,APP是SDK的主要载体, SDK 则是 APP开发所需的重要工具。从研发者的角度来看,SDK开发和 APP开发均属于 Android 顶层应用开发,并无本质区别,两者的目的均是要提供产品给客户使用;但从商业角度来讲,APP 是to C 的产品,用户是广大群众;而 SDK 则是to B 的产品,用户为广大开发者,两者在运营模式上有所不同。

02 SDK 开发最关键的点是什么?

SDK没有UI交互,用户使用 APP 时并不会感知到SDK 的存在。但是作为APP的重要部分,SDK的性能直接影响着APP的性能,也间接影响着用户在使用APP时的体验和感受。总结个推推送SDK的开发经验,我们认为SDK开发最需要注意的是其稳定性。

作为一款第三方 SDK,稳定性是第一要素,我们要保证推送SDK在不同环境下(APP、终端设备等)都能正常运行。要想保障稳定性,复杂环境的兼容是关键。减少使用非 SDK 接口也有助于提升稳定性。

除了稳定性外,以下几个问题对于打造优质SDK也很重要。

03 SDK 版本适配以及厂商兼容情况如何?

个推 SDK 支持 Android 端和 iOS 端,以下文章均使用 Android 端来举例。

截止目前,Android 系统从07年发布第一版至今,经历了多次迭代,Android Q为其最新版本。个推Android SDK 支持 Android 2.3及以上版本,几乎可以在市面上现存的所有Android 版本上运行。

** 1)版本适配**
APP 主要在手机上运行,若想 APP 在 Pad、电视之类的智能设备上运行,则基本需要单独适配,也就是说,APP 会根据其使用环境调试相应的版本。而 SDK 的运行环境相对复杂,我们根本不知道自己开发的 SDK 会在什么样的环境下运行,可能是手机、Pad、电视,也可能是车载设备,甚至是冰箱等智能家居设备。这类设备的 Android 系统版本从 2.3至10.0 不等。我们在开发SDK 的时候需要尽量地向下兼容。为此,个推推送 SDK 依旧保留着对 Android 2.3 系统的兼容。

** 2)厂商兼容**
一个成熟的 SDK 势必要保证在不同的厂商设备上正常运行,尤其是当SDK 内部涉及到Android 四大组件时需要特别注意厂商的兼容性,注意其是否会限制固定 action 的广播使用及限制固定类名 service 的启动。而如果 SDK 开发涉及到 Android framewrok 的引用,某些功能可能会失效。比如AndFix 的底层实现依托于 Art/Dalvik 虚拟机的架构,但是大部分厂商会对虚拟机进行定制,修改底层 ArtMethod 结构,这时,AndFix将无法在修改过虚拟机的设备上生效。

所以在 SDK 开发过程中我们要尽量避免Android Framework 的引用。个推在使用Android 四大组件的时候,会要求开发者提供自定义 Service,其Service 只需要继承个推默认的即可,这样可以保证 SDK 在不同厂商上均能正常运行。

04 怎么看待现在市面上的 SDK广泛支持多混合开发这一现象?

大前端开发是必然的趋势,现在新推出的产品会优先使用混合开发,保证一套代码可以在多个终端上运行。因此,一个成熟的 SDK 有必要对不同的语言框架进行适配。目前,个推 SDK 不仅支持 Android、iOS系统,还支持混合开发,如unity3d cocos2dx react-native flutter cordova apicloud等。具体见个推实验室

05 Android SDK 是否会使用开源项目?

不会使用。
有以下几点考虑:

  • 使用开源项目会增加包的体积;
  • 不能保证开源项目支持复杂的终端环境;
    -客户的 APP可能已使用开源项目,将导致编译失败;

06 如何适配海外市场环境?

开拓Google Play 市场是各大互联网公司的长远规划之一。个推Android SDK Google Play版本自发布以来,积极适配复杂的海外环境,为海外App消息的稳定下发提供强大的支撑和保障。为了有更好的用户体验,个推推送 SDK 还在国外众多地方布置了机房,以保证推送的到达率。另外,个推推送SDK还需要对 Google Play 制定的各种规则进行适配,以及还要考虑不同国家不同版本机型的适配问题。这要求我们在开发过程中尽量使用 Google 生产的手机进行调试与测试。

07 SDK 如何降低手机电量、流量的消耗?

为了给用户更好的使用体验,我们会尽可能地降低SDK对电量以及流量所造成的消耗。为此,我们不会使用蓝牙这类电量消耗较高的工具。此外,我们还会采用多链路合并技术来节约流量。

为了准确地了解所耗电量、流量的降低情况,我们还会做一个全面的测试。每次发版之前,我们都会采用严格的测试标准,使用特定的 APP 进行电量压测。为了尽可能地排除外来因素的干扰,保证测试的准确性,我们往往会使用集成了个推推送 SDK 的 APP来测量。常见测量 APP 的方式有Batterystats & bugreport和Battery Historian。具体细节可以自行查阅 PowerProfile.java 和 power_profile.xml 的使用与原理。

08 如何自主检测 SDK 的异常?

经过近 10 年的优化与升级,个推推送 SDK 的异常情况已经控制在一个非常非常低的水平,但因为 Android 市场碎片化非常严重,SDK 在如此碎片化的环境下运行难免会出现各种意想不到的突发情况,为此我们专门开发了SDK运行自查系统,类似于精简版的 bugly。该内部产品与 SDK 相辅相成,可以自主检测 SDK 的异常情况,并在发现异常后主动上报。其次,在代码层面,我们也做了一些防控,避免 SDK 因为异常而导致无法正常使用。另外,我们还成立了技术支持团队,服务广大的开发者,定期回访客户,帮助解决客户遇到的问题。

09 开发SDK还有什么是需要注意的么?

SDK开发过程中,我们还需要注意安全性。安全性不仅仅代表网络数据交互的安全、本地数据存储的安全,也涉及到 SDK 的加固、混淆、第三方安全软件审核。举例来说,个推 Android SDK 提供了四大组件的对接,SDK 内部会特别注意,避免这些组件被反序列化攻击。为了让开发者更加放心地使用我们的SDK,我们公司内部建立了严格的安全管理机制,来保障SDK的安全性。

10 对 SDK 开发者有何建议?

其实从 Android APP 诞生开始,SDK 的开发就从未中断过。SDK 开发者与 APP 开发者的工作内容基本相同,但是开发 SDK 更注重对 Java 语言以及 Android 底层的理解。如果大家想从事Android SDK 开发,建议多研究 Java 的相关知识,深入理解 Android framework 层。

开发SDK并不难,难的是如何让自己开发的 SDK 在复杂的环境下稳定运行。这需要我们对 SDK 的架构有一个比较清晰的认知,并对前文所提到的问题进行认真思考。

多年来,个推 SDK始终以服务开发者为己任,持续为用户提供优质的体验。为了进一步提升推送后台的保活能力,个推已发布 2.13.3.0版本,并对 Android Q 进行了适配,请前往个推文档中心下载http://docs.getui.com/download.html,即刻体验。
在这里插入图片描述