一个iOS应用内购买模块的开发

笑着哭i 提交于 2019-12-09 10:02:53

模块设计

或许觉得功能不难,给我的需求就简单几句话。在编码之前我想弄清楚自己开发的模块是怎么样的,该怎么与外界交互。我要找到个工具将这点弄明白,于是想到画UML图。

UML活动图

UML建模之活动图介绍(Activity Diagram)了解了一下,画活动图比较好,感觉这个大概能达到我的目的。于是画了如下两个图,分别表示IAP两个阶段发生的事:

  • 请求商品信息

请求商品信息

  • 购买商品

购买商品

简单介绍

当时了解到的需求是只用提供Web调用的接口,参照Android的设计,我以为本模块只用负责逻辑处理部分,不涉及UI展示,所以设计了以上活动图,我的工作主要是App部分。后来需求改了。

需求改变

  • 本模块负责IAP所有事项,包括UI展示
  • 本模块需要能被原生App调用
  • 考虑到虚拟币商品的固定性,简化购买过程
    • 虚拟币商品比较固定,展示商品时可以拿本地商品信息展示,而不用等到App Store返回商品信息
    • 将请求商品信息与购买商品合并到“确定支付”过程中

UML时序图

需求更改后活动图有变化,可第一版代码编写后,模块与外界的交互已经比较好理解,我就没再上新图了。我用另外一种图确定了模块内的设计。顺便学习一下时序图

IAP时序图

简单介绍

  • 调用者
    • ViewController:这里是App原生调用代码。考虑到易嵌入性,我这次放弃使用代理方式,而选择了Block作为反馈处理。但愿代码中没有出现Cycle Retain
  • IAP模块
    • IAPViewController:模块的主要处理类,负责与用户交互,及调用IAPManagerIAPObserver 与App Store进行交互;
    • IAPManager:负责处理请求商品信息;
    • IAPObserver:负责处理购买商品。

IAPManagerIAPObserver只将过程信息打成log,错误信息提示等与用户交互相关的处理通过Block交给IAPViewController

Demo

iapTest

后续

  • UML图是利用在线工具processon画的,保存什么的还是很方便,不过功能不及EA等;
  • 设计与代码都在学习中,欢迎一起交流。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!