记一次完整手机APP项目的开发

原创 2017年09月03日 17:42:14

写在前面

从2015年12月开始到2017年3月在一个创业团队完整参与了一个运动类的手机APP的开发,虽然最后这个项目失败了但是我学到了很多东西,现在已经过去一段时间了可能已经忘记了一部分细节的东西了但是希望通过博客的方式能把我那段时间学习到的东西记录下来,虽然还有整个项目开发过程中的一些波折,但是我还是主要想分享技术,接下来我想写的都是纯干货~

项目背景

运动页是一个体育类的手机APP,拥有IOS客户端,Andriod客户端以及微信H5界面,主要的功能有:创建运动、搜索运动、运动报名、运动浏览、关注、分享、IM聊天、评论留言、在线支付、账户充值等功能,是一个包含社交功能的运动APP,市场上类似的项目有很多,如中羽联、趣运动、球长部落、互动吧等。

项目初始

最开始该项目发起人找到我的时候我还是一名在校的研究生,刚开始给他做的是一个微信公众号的小项目,主要是实现一个简单的赛事报名功能,不过毕竟H5实现的功能不如APP的功能强大,所以在完成这个项目后没多久,老板(下文中简称BOSS)就找到我给我说了他的一个手机APP开发的想法,期间不断的交流他的想法(主要是在做需求分析),而我需要做的就是把BOSS的想法进行评估,然后做出Demo展示,最后在春节前夕定下来了,准备做这么一个APP,其实我对IOS开发是零基础的,只是在以前大学的时候做过andriod的一个项目,不会object-c,不过通过自己学习了一些IOS相关的知识后就开始搭建项目工程了。

运动页

整个项目前期开发只有我和我一个同学,他负责开发IOS客户端,我负责写业务逻辑(包括服务器后台API接口,和IOS上的业务代码),到后期整个项目增加到了5人,有专职的UI以及Android开发。

项目架构

整个项目包含IOS客户端、Andriod客户端、API接口服务器,为了加速项目的开发速度,对于一些需求,如果有比较成熟的方案的话我们都会使用,比如项目中的IM功能,使用了融云IM来实现,当前还有其他的一些特性的开发也使用了第三方的组件,主要有微信SDK、ping++、百度地图等。接下来主要介绍的是API接口服务器端中使用的技术:

  • MySQL 数据库
  • ActiveMQ 消息队列
  • apidoc API接口文档生成
  • ThinkPHP PHP框架
  • xCache 缓存
  • Nginx Web服务器
  • workerman-statistics 分布式统计监控系统

ActiveMQ

Apache ActiveMQ是一个开源的消息队列,主要用于业务之间的解耦,例如用户注册后,向队列中发送一个任务,后台服务器进一步处理:申请融云用户Token值,下载用户授权的微信账号头像文件等,队列中的消息会被一个后台进行处理,每次处理的时候就直接从队列中获取一个任务按照如下流程进行处理
事件处理流程:

Created with Raphaël 2.1.0开始process是否为真?结束erroryesno

Tip:当process返回true的时候,将会把该事件消息从消息队列中移除

消息队列是一种很常用的解耦方式,能在系统中打通各个模块。

一些问题的解决

API接口安全

在开发整个项目过程中考虑到接口安全,需要对数据进行加密,一种方式是直接使用HTTPS来进行加密,这种方式是比较安全的,但是考虑到性能而且在整个过程中只需要对其中一些隐私数据进行加密传输,于是就采用了参数签名的方式来保证数据被篡改:

function getSign($param, $code, $sign_type = 'MD5'){
        //去除数组中的空值和签名参数(sign/sign_type)
        $param = self::paramFilter($param);
        //按键名升序排列数组
        $param = self::paramSort($param);
        //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
        $param_str = self::createLinkstring($param);
        //把拼接后的字符串再与安全校验码直接连接起来
        $param_str = $param_str . $code;
        //创建签名字符串
        return self::createSign($param_str, $sign_type);
    }

function createSign($param, $type = 'MD5'){
        $type = strtolower($type);
        if($type == 'md5'){
            return md5($param);
        }
        if ($type == 'sha1') {
            return sha1($param);
        }
        if($type == 'dsa'){
            exit('DSA 签名方法待后续开发,请先使用MD5签名方式');
        }
        exit("接口暂不支持" . $type . "类型的签名方式");
    }

将计算出来的sign作为一个参数发送往服务器,服务在收到请求后按照相同的规则将参数按照相同的参数进行计算得到sign_b,和参数中的sign进行比较,如果不一致则认为参数被篡改,丢弃该请求。

其他思考

虽然项目在开发中没有遇到大量用户的访问一些问题可能没有暴露出来,如高并发的访问如何保证服务的稳定可靠,但是在实际开发中都考虑了这些场景,如对经常从数据库中查询的记录都缓存在内存中,由于时间有限我这里就不展开讲了。

关于开源

由于现在工作原因,现在已经没有时间继续移动端的开发了,所以准备在之后一段时间内把代码整理好进行开源,毕竟项目没有成功,存在或多或少的问题,有技术上的,有项目规划上的。
https://github.com/zhujunxxxxx/SportsPage

项目截图




Figure 1. 运动列表




Figure 2. 运行页详情




Figure 3. 账户




Figure 4. 登录




Figure 5. 个人

读源码练内功(一):guava之eventbus

从guava中eventbus中学习如何进行annotation编程

在docker中部署tomcat并且部署java应用程序的步骤详解

作者:坐忘峰 字体:[增加 减小] 类型:转载 时间:2016-10-08 我要评论 本文给大家介绍如何在docker中部署tomcat及如何部署我们的应用程序到docker容器的tomca...

app-项目开发手机浏览器

  • 2015年06月10日 11:55
  • 21KB
  • 下载

App项目设计开发完整流程

App项目设计开发完整流程 作为一个PHP程序猿想转行APP开发可不是件容易的事情,话说隔行如隔山,这隔着一层语言也是多东西需要学习啊,一直对APP开发很感兴趣,最近请教了几个做移动...

App项目设计开发完整流程

转载自:http://blog.csdn.net/demon614/article/details/39692827 作为一个PHP程序猿想转行APP开发可不是件容易的事情,话说隔行如隔山,...

App项目设计开发完整流程

作为一个PHP程序猿想转行APP开发可不是件容易的事情,话说隔行如隔山,这隔着一层语言也是多东西需要学习啊,一直对APP开发很感兴趣,最近请教了几个做移动开发的朋友,看了很多的资料,决定把自己学到的东...

安卓仿手机网易新闻app项目开发系列之(三)数据抓取和解析 下

一.项目简介和思路   上次已经完成了数据的抓取,现在来对数据进行解析,也就是把截取到的json格式数据解析成有效的数据。 二.项目流程 1.解析json数据 public void initM...

安卓仿手机网易新闻app项目开发系列之(二)轮播图显示和RecyclerView适配器编写

一.项目简介和思路     接着上周项目继续,上周主要实现了tablayout的标题栏界面和屏幕切换效果。这次咱们来实现给屏幕页面填充些网页图片数据。效果如图     可以看出界面有两部分构成,上...

安卓仿手机网易新闻app项目开发系列之(四)数据分离与填充界面 下

一.项目简介和流程   接着上次讲的,今天实现的是上拉刷新和下拉加载,让页面数据进行更新,下面来结合代码来讲解。 二。项目流程 2.上拉和下拉刷新功能 1)下拉加载    在fragment.la...

Android开发把项目打包成apk,安卓到手机上,或者提交到app应用商店

#1.用Eclipse的话导出app其实还是很容易的。大家看我的步骤。有图有真相哦 选择一个项目 创建一个新的,位置随便,下面是密码 ...
  • ibey0nd
  • ibey0nd
  • 2014年08月02日 20:56
  • 2726
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:记一次完整手机APP项目的开发
举报原因:
原因补充:

(最多只允许输入30个字)