移动SDK开发的最佳做法
市场上有许多免费提供的SDK和可重用组件。 有人可能会问,编写SDK的黄金标准是什么。 在回答这个问题时,我们始终可以仰望Apple。 它为新SDK引入了精心制作的文档,编程指南以及大多数SDK组件和框架的示例代码,做得非常出色。 为了符合该标准,开发人员在设计移动SDK和编写API时应格外小心,这一点至关重要。
开发iOS SDK或库是指提供稳定且令人愉悦的API,这些API向最终用户/开发人员展示产品的功能。 此外,SDK还包含文档和示例代码,以帮助开发人员使用它。
如您所知,开发移动SDK绝非易事。 但是,遵循某些规则可以确保它达到完美。 在为不同的产品开发了许多SDK之后,我们对它有了更好的了解。 因此,我们在此为您提供了一些开发iOS SDK的最佳实践。
为什么
您必须问自己的第一个问题是为什么要构建SDK:
- 是否因为您要提供一些可以供多个应用程序开发人员使用的服务?
- 是否因为您想使用户不受内部实现,API调用和服务的业务逻辑的影响?
- 还是因为您需要在兼容性,可伸缩性和将来的增强方面具有灵活性,并且不希望其他人修改您的业务逻辑或服务或反向工程师?
如果您对以上任何一个问题的回答都是肯定的,那么您必须构建一个SDK。
什么
一旦确定要构建SDK,就必须确定要在SDK中包含哪些功能。
- 它需要用户界面还是没有UI?
- 它是否搭载在其他应用程序或系统框架的UI上
- 启用功能之前,是否需要任何明确的用户权限?
- 它是否涉及Web视图,网络调用,安全注意事项或任何其他平台设备特定的功能?
怎么样
在此阶段,您将决定如何开发移动SDK。 精心设计的SDK应该旨在使您的生活更轻松,但这是一个繁琐的过程,涉及大量工作,因此您可以帮助创造最佳的用户体验。
在继续开发移动SDK之前,您需要考虑以下一些不同方面。
简单
市场上大多数令人愉悦的框架,可重用组件之所以没有名声,并不是因为工作或API的复杂性,而是因为应用程序开发人员在集成SDK时遇到的困难。 当SDK难以集成并且开发人员无法掌握SDK提供的功能时,这确实很痛苦。
这是自动化时代。 为了说服开发人员使用您的SDK,必须在SDK集成中调整自动化。 这可以通过脚本,可可豆荚和提供Xcode模板来完成,该模板将下载并与指定目标自动集成。
集成了SDK后,应用程序开发人员便开始研究API。 作为SDK开发人员,通过引入与开发人员不同的新约定,“不要发明新的轮子”。 最好遵循标准约定,命名应用程序开发人员熟悉的变量,方法和设计模式。
简化移动SDK的提示:
- 使用您的应用密钥和机密ID初始化SDK的过程不应超过一行。
- 在您的SDK中提供特定的接口和对象,并对其进行详细记录。
- 处理SDK中的错误和异常,并通过回调或委托将状态返回给应用程序。
安全
SDK开发中最重要的方面之一是框架的安全性。 在处理付款时,重要的是要了解各种API的安全性方面,并确保没有以任何形式存储与客户的付款工具有关的敏感信息。
这里要遵循的一些最佳实践是:
- 对所有网络呼叫使用SSL。
- 使用证书固定可避免中间人攻击,并确保SDK与正确的服务器通信。
- 避免使用本地存储敏感信息。 如果确实需要,则以加密方式安全地存储它。
- 事务完成后,清除所有系统创建的Web缓存数据和其他本地数据(如果已存储)。
可扩展性
支付系统总是在变化,可能必须将新的支付工具添加到SDK中。 为了轻松添加更新的支付工具,请使SDK与后端支付工具的更改无关。 如果SDK使用基于Web的后端,则可以这样做,因为可以修改网页以包含新的付款方式,而不会影响SDK。 但是,对于所有付款方式,基于Web的界面和SDK之间的通信和握手应保持一致。
兼容性
确保SDK与最新的OS版本和体系结构兼容。 遵循由新的OS版本强制执行的所有准则,并使用最新的OS版本测试SDK。
首次开发SDK时,将设置该SDK支持的基本操作系统版本。 确保将来的SDK版本也支持您开始使用的第一个版本。 每个客户端可能有其自己的理由来支持特定的操作系统。 SDK应该能够支持客户端。 除非绝对必要,并且一旦确认用户数量足以放弃支持,否则不要删除对先前支持的操作系统的支持。
连贯性
确保您的SDK保持所提供功能的一致性。 例如,如果支付SDK中有一个API可以启动交易,则请确保该SDK也支持取消。 不要让使用您的SDK的开发人员悬而未决。
抽象化
从SDK的内部细节中尽可能隐藏开发人员。 创建通常在付款交易中处理的实际对象。 至少可以向用户公开以下内容。
- 订单对象-允许用户将订单详细信息封装在一个对象中。 包括实际付款服务提供商所需的所有信息以及商家跟踪订单所需的信息。
- 服务器配置-SDK集成商通常会需要某种暂存或测试服务器来测试其付款流程,而不会实际产生任何费用。 因此,请提供服务器配置,使其可以根据自己的要求进行实例化。 对于开发,他们可以使用登台或测试服务器,而对于生产,他们可以使用实际的付款服务器。
- 交易对象-封装交易信息和状态的对象。
记录中
在SDK中提供支持以打开日志记录,以便开发人员可以查看实际发生的事务以及在应用程序和服务器之间传输的有效负载类型。 这将有助于故障排除并为用户提供支持。
用户界面
如果您的服务要求用户登录到平台,请提供本机用户界面以执行登录过程。 如果需要基于Web的界面,请提供适当的委托或回调以指示各个步骤并提供事务状态。
尽管您可以为服务提供自己的用户界面,但是请提供足够的支持以自定义本机UI,以使其不会降低或隐藏您的品牌。
存储
如果您的SDK需要存储,请确保将数据存储在自己的名称空间或容器中,而不要使用应用程序的名称空间。 考虑数据的安全性方面,并确保敏感信息是安全和加密的。 使用临时文件夹或缓存目录来存储临时数据,以避免备份到云中。
资源资源
在编写SDK尤其是移动SDK时,开发人员应了解SDK消耗的资源量。 SDK应该满足要求,但同时保持最少的资源并提供最大的功能。 为了提供最大的功能,以下因素起着重要作用:
一种。 电池 :请勿通过大量轮询或频繁请求诸如位置更新之类的资源来杀死用户的手机电池。如有疑问,请始终推迟任务或执行批处理,以免浪费用户的手机电池。 使用“能源诊断”之类的仪器来检查电池消耗。
b。 网络 :使用网络比较棘手。 如果特定要求是实时的,则使用优化的系统API来完成任务;如果不是实时的,则进行批处理。 请记住,用户可能并不总是在蜂窝网络服务区,因此对此一无所知。 始终尝试使用尽可能小的网络有效负载,并使用数据压缩技术通过采用gzip编码来减轻用户的网络带宽。 如果SDK需要从服务器下载大量数据,请确保在用户位于蜂窝网络上时充分警告该用户。
C。 内存 :SDK应该在必要时进行分配,并在完成工作后立即释放内存。 SDK中的内存泄漏通常会收到负面反馈。 建议对所有类处理低内存警告。 运行仪器以进行分配和内存泄漏,并进行严格测试。
d。 性能 :可以推断,良好的设计与良好的性能息息相关,因此了解SDK的行为至关重要。 在不检查性能的情况下将SDK交付给开发人员很危险。 在交付SDK之前,请先对您的SDK进行性能分析。 适度进行性能测试,并在SDK实施过程中进行所有及时的单元测试和API使用。 您的最终目标是开发一个不影响使用SDK的主机应用程序的移动SDK。
e。 规模 :做出必要但明智的决定,同时将资源包括在内
您的库或SDK,因为这会导致主机应用的App Store大小增加。 有许多内置工具支持诸如应用程序精简,切片和启用位代码之类的功能。 它更多是基于决策的要求,如果使用不当,应了解后果。
第三方来源的自定义名称空间
尽量避免在SDK中使用其他第三方模块。 但是,如果您真的必须使用它,那么,当主应用程序使用相同的第三方模块时,请更改类名称和全局变量,以避免发生冲突。
示例代码和文档
当向他们提供SDK时,文档是应用程序开发人员首先要研究的内容。 SDK应当随附编写良好的文档,这非常关键,该文档提供了如何使用SDK的路线图,并提供了对SDK公共头文件的了解。 建议在文档中提供API使用示例。 文档应被视为您的移动SDK的卖点。
提供交互式文档很好,但是建立一个文档很费时间。 有很多工具可用于获取简洁的交互式文档,例如DoxyGen,AppleDocs和Jazzy。 举例来说,当您使用Jazzy时,只需几步即可生成与Apple十分相似的Objective-C和Swift文档。
最后但是同样重要的; 提供足够的示例代码,以使开发人员可以轻松地将SDK集成到他们的应用中。 大多数时候,开发人员只是复制并粘贴示例代码,然后更改键和标识符。 确保示例代码中还包含一些单元测试,以使集成商能够使用自己的参数进行自己的单元测试。
打包
如何打包SDK并发布到世界各地,对成功开发SDK也有重要影响。 因此,特别注意要分发的SDK的包装非常重要。
- 提供有关实际SDK的简单但完整的文档,示例代码,许可,并以结构良好的层次结构为我阅读。
- 创建CocoaPods,Carthage,静态和动态框架设置,以允许人们以他们想要的任何形式集成您的SDK。
本文由 Robosoft Technologies的 技术架构师Ramachandra N撰写 。
- 我需要知道如何获得关于哪个播放器正在stream式传输的信息(player,spotify,napster …)
- 如何使用Springboard Services Framework来使用SBSLaunchApplicationWithIdentifier
- Swift中的UIWebView和JavaScriptInterface
- Receiver(<ViewController:>)没有标识符为'showAlerting'的segue
- 如何翻转iOS UITableViewCell?
- 从具体types“模糊引用会员地图”
- 如何拍摄带有重叠标志的照片并将其保存到相机胶卷上
- 我的UINavigationitem的TitleView在ios 6中得到了扩展
- insertObject:atIndex: – 索引3超出空数组的边界