原创文章,转载请注明:转载自Keegan小钢
并标明原文链接:http://keeganlee.me/post/practice/20160807
微信订阅号:keeganlee_me
写于2016-08-07
我计划做一款App产品,包括Android和iOS,做完打算将Android和iOS客户端的代码开源,并将上架到应用宝和AppStore,之后还会不断迭代。而在做这款产品的过程中,我会尽量将一些相关的思考、决策、心得总结等整理成文分享出来。这个周期将会比较长,因此,文章我将以连载的方式发布。
项目简介
产品定位为垂直于程序猿的社交App。前期的社交性会偏弱,功能上会有点类似于微博。但我打算将发布内容分为两类:问答和分享。问答类似于StackOverflow的技术问答,程序猿可以发布技术问题,其他程序猿可以提供解答。分享则可以发布程序猿平时的生活趣事、学习笔记和技术文章等。用户关系则打算采用和微博一样的单向关注关系。另外,对每个用户会增加技术栈标签的设置。程序猿可以查看到与自己同技术栈的其他程序猿发布的内容,即使没有关注关系。
整个项目会涉及到原型设计、UI设计、API设计、移动端开发、服务端开发、服务器选型、应用上架,我打算全部自己一个人搞定,至少坚持到完成第一版的上架之后,才再考虑是否邀请其他人加入一起搞。
原型设计我采用墨刀,一款在线的原型设计平台,上手非常简单。网站还提供了视频讲解的新手教程,非常方便。
UI设计我打算采用Sketch,一款专为UI设计而生的工具。据闻可以智能标记字体大小、颜色、间距等。也自带了非常方便的切片工具,可以轻松将一个图标导出为适配Android和iOS的各种尺寸。不过,目前还没上手。另外,目前也正在学习色彩搭配相关的设计知识。
API我打算采用RESTFul架构,分别用POST、PUT、GET、DELETE方法对资源做CURD操作。使用RESTFul的难点在于如何定义好各种资源的表述,即URI的定义。
移动端开发则打算第一版只用原生实现,可能Android和iOS同步开发,即开发完Android的一个页面后,就开发iOS的同个页面。另外,iOS开发打算用Swift,尽量不用OC。
服务端开发打算用Spring Boot,数据库可能选用MongoDB。
服务器选型则还没想好,但应该也是在AWS和阿里云之间选一个。
应用上架,iOS上App Store是必须的了;而Android目前只考虑应用宝,其他市场上不上,到时再决定,这个可以不急。
功能需求整理
App第一版的功能需求,我想最简化,只实现核心功能必需的,其他功能,能不要就不要。最初时,我整理出的功能需求如下:
- 手机号 + 短信验证码注册
- 手机号 + 短信验证码登录
- 微信登录
- 上传图片
- 修改头像
- 修改昵称
- 设置用户技术栈标签
- 获取同栈之猿的内容列表
- 获取关注之猿的内容列表
- 获取同栈的用户列表(未有关注之猿时获取)
- 发布问题
- 发布分享
- 关注某条内容
- 取消关注内容
- 获取内容的评论列表
- 添加评论
- 回复评论
- 点赞评论
- 关注某用户
- 取消关注某用户
- 获取某人详细资料
- 获取某人的发布内容
- 获取某人关注的人
- 获取某人的粉丝列表
- 获取我的消息
- 提交意见反馈
- 退出登录
首先,注册登录我并没有使用密码的方式,而只使用短信验证码。主要是因为登录密码会引发一些麻烦的问题,比如如何安全传输?如何安全保存?2011年的CSDN、天涯、世纪佳缘等网站的“密码外泄门”,和2014年的携程“泄密门”,都证明了直接保存私密信息是不安全的。因此,我干脆不使用登录密码了。而且,因为没有登录密码了,相应的也不需要提供修改密码和重置密码的功能了。
接着,再考虑手机号 + 短信验证码的注册登录方式,其实也有问题:明显依赖于短信平台的稳定性和及时到达率。虽然有些平台提供了免费的短信验证码服务,但这些平台基本存在不稳定的情况,经常会出现收不到短信或隔很久才收到短信的情况。而稳定快速的短信平台都是按条数收费的,这成本有点高。那么,干脆点,取消手机号注册登录的方式算了,只要有微信登录就够了。
另外,因为微信登录后就可以获得用户的头像和昵称了,那么,其实,修改头像和修改昵称的功能其实也可以不需要了。
那么,最后整理的功能需求可以如下:
- 微信登录
- 设置用户技术栈标签
- 获取同栈之猿的内容列表
- 获取关注之猿的内容列表
- 获取同栈的用户列表(未有关注之猿时获取)
- 发布问题
- 发布分享
- 关注某条内容
- 取消关注内容
- 获取内容的评论列表
- 添加评论
- 回复评论
- 点赞评论
- 关注某用户
- 取消关注某用户
- 获取某人详细资料
- 获取某人的发布内容
- 获取某人关注的人
- 获取某人的粉丝列表
- 获取我的消息
- 提交意见反馈
- 退出登录
写在最后
目前的进度就是完成了原型设计,并整理好了功能需求。对了,还有设计好了App Logo。接下来要做的就是根据功能需求设计REST API。
扫描以下二维码即可关注订阅号。