如何设计一款稳定、好用、安全的推送SDK?( 二 )
(4)链路合并:当一个设备有多个APP的推送链路同时活跃时 , 我们会运用合并链路技术 , 将使用同一款SDK的 APP 之间的长连接链路进行合并 , 减少流量电量的浪费 。
2. 稳
2.1 提升稳定性
在设计SDK时 , 还要考虑到SDK的使用稳定性 。 否则在实际应用中 , 可能会遇到ANR、OOM、Crash、内存泄露、闪退等棘手的问题 , 我们需要通过持续的迭代和优化来将错误最小化 。
(1)做好代码管理
除了借助SVN、GIT等工具做好代码托管外 , 还需遵循一定的代码规范 , 借助类似gerrit等工具进行代码review , 使用verify流程 。 在保证机器找不到问题的前提下 , 再用人眼去辨别是否符合业务逻辑 。
(2)自动化测试
自动化测试可以大幅提升回归测试的效率 , 非常适合敏捷的开发过程 。 此外 , 自动化测试可以替代大量的手工机械重复性操作 , 测试工程师可以把更多的时间花在更全面的用例设计和新功能测试上 。
(3)运用代码模块化等小技巧
代码模块化能以最少的模块、零部件 , 更快速地满足更多的个性化需求 。 异常处理可以提高系统的容错性 , 让程序更加稳定 。 代码检测能及时发现程序中的缺陷和错误 , 比如检测内存是否泄露 , 是否有安全漏洞等 , 保证代码质量 。
(4)线上灰度
实际场景中 , 我们很难去覆盖所有的环境 , 例如机型、网络等 , 需要通过线上用户的反馈去验证代码的健壮性 。 因此在产品大规模推向用户之前 , 我们需要进行少量的真实用户测试 , 即灰度上线来帮助减少风险 。
(5)日志系统
系统有问题是必然的 , 在尽量保持系统稳定的前提下 , 要考虑容错性 。 当问题发生时 , 需要第一时间以最快的速度排查 , 因此需要有一套完整的日志系统 。 此外 , 平时我们也可以通过日志系统的拨测检测系统的健壮性 , 可以在用户反馈之前及时发现并解决问题 。
2.2 兼容性
兼容性也是保证SDK稳定性的一个重要条件 , 主要考虑以下几个方面:
(1)接口兼容
每次版本更新后 , 对外接口要尽可能保持不变 。 对于改动较大的接口 , 可以使用 @Deprecated 注解对老接口进行标记 , 并且做新接口调用的兼容 , 而不是直接删除老接口 。
(2)主键兼容
当主键发生变更(例如去掉service、provider)时 , 部分老的安卓系统会有组件缓存 , 运行时直接告知“类”找不到 。 建议在AndroidManifest中保留声明 , 且对应“类”进行代码空实现 , 以减少发生crash的概率 。
(3)安卓系统兼容
可使用Build.VERSION.SDK_INT做API区分 。
(4)真机兼容
可以借助云测等平台进行兼容性测试 。
3. 好用
SDK的易用性可以从下面几个方面考虑:
(1)接入简单
接入SDK时有集成demo直接可以运行 , 且接入文档清晰、步骤简单 , 最好能实现一键集成 。
(2)保持核心优势
一款好的消息推送SDK , 我们主要考虑及时性、到达率、稳定性和准确性 。
例如:新闻媒体类APP对推送的及时性要求较高;通知类推送(如转账信息)会特别注重消息的到达率;稳定性指的是要保证推送SDK在不同环境下的正常运行 , 尤其是11.11等高并发场景;准确性主要针对广告营销类推送 , 需要在合适的时间、合适的地点和合适的场景把合适的内容推送给合适的人 。 其中 , 关于如何保证稳定性 , 可以从多线路、多IDC、热备份等角度考虑 。
①多线路调整:例如预埋三线域名 , 做一些轮询策略 , 防止域名被劫持 。
②多IDC设置:除了域名被劫持外 , 还可能遇到网络攻击 , 物理性损坏的情况 。 设置多IDC一方面是为了实现分流 , 另一方面也降低了风险 。
③热备份:系统处于正常运转状态下的备份 , 一旦系统出现问题 , 可以快速恢复 。
推荐阅读
- 传奇英雄▲荒野乱斗:最值得培养的传奇英雄,微氪玩家如何选择?
- 【】财鑫闻丨两市成交量连续2日破万亿,牛市真的来了?下一步如何擒“牛”?
- 精选泛科技|结果如何?,一加8续航遭质疑:上半年最全机型横评出炉
- 健康干货桶|重症肝病患者可否活动?如何掌握?
- 惠普|惠普战99 AMD版设计本上架:6299元起 买它!
- 精选泛科技一加8续航遭质疑:上半年最全机型横评出炉,结果如何?
- 驱动中国无缘屏下摄像头!华为Mate 40系列爆料:双曲面设计
- 「孙权」孙策逝世后,弟弟孙权是如何对待20岁嫂子大桥的?说出来别不信
- 科学家■如果宇宙由奇点大爆炸而来,那么奇点又是如何来的?
- 娱娱乐道|厚嘴唇加大饼脸,网友:她是如何火的?,杨超越大量旧照曝光
