前言
gank 客户端很多,优秀的也不少,但一直找不到适合自己日常使用的。偶然机会看到iOS平台gank客户端 https://github.com/yeziahehe/Gank ,感谢这位作者提供的UI,捣鼓一下跑手机上,感觉不错。于是就有了这个项目。
概述
干货的部分的接口还是用gank提供的,用户部分则是自己写,实现了基本的登录、注册、收藏等功能。
正文
Android部分技术方面还是挺简单的,没有mvp 也没有rx 。这个笔者使用了一个优化过的MVC架构,具体详情 https://mp.weixin.qq.com/s?__biz=MzA4MjA0MTc4NQ==&mid=403123455&idx=1&sn=9d414a52f2399768e61d03b3aefc3cb6#rd 个人觉得这个框架的好处就是信息流、数据流都挺简单,各层之间的交互也不是很频繁。推送、短信验证方面使用bomb平台。升级使用的bugly,好处是它可以收集整理很多APP的信息。其他的其实都是一些标配的类库,不想赘述。
java后台部分更是简单的增删改查,这里我算是个菜鸟,之前没接触过java后台,算是摸着石头过河。感兴趣的同学可以看看这个https://github.com/wanliyang1990/AppServiceRestFul
其实值得一提应该是api接口这方面,包括规范、安全等。因为种种原因,之前接触过的项目接口都不是很规范,更别说安全了。这种感觉其实难描述,用着不爽吧自己又不会写,后台同事也会以各种理由说服你,将就着吧。这次终于有机会可以自己操刀实现了,其实收获挺多。以下是具体实现过程,其中原理出自 http://blog.csdn.net/fengshizty/article/details/48754609 建议对着原理往下看。这里以登录为例。
我们规定三个固定的参数,每次请求都要带上这三个
Android代码:Gank_Android/bsae_library/src/main/java/cn/gank/androidlibs/httphelper/OKHelper.java
图1 图2timestamp 时间戳:这里要是服务器的时间戳,而不是本地的时间戳,因为有的手机时间不对。这里用的是时间差的方式(具体看代码)。
token Token令牌:服务器认证完后给客户端返回一个Token令牌,用户再次获取信息时就是以此为凭证。初始值为空,保存本地,登录后更新
sign 所有参数(除了sign)经过签名加密后的字符串
经过void handleParams(Context context, Map params)方法后,请求的参数变为 原来的参数+timestamp+token+sign
请求来到后台,这里通过拦截请求做相关处理。相关代码位置 Gank_Service/src/main/java/com/gank/service/interceptor/RequestInterceptor.java
每一个请求后台程序都会走preHandle 方法。
标注1处的接口都是初始化(还没有token)或token过期的接口,所以不用验证token。
标注2处就是判断固定的参数,如果缺失,则返回false,并返回错误信息。
标注3则是判断请求是否过期(不是超时),这就是上面Android部分的获取时间戳的时候要获取服务器的时间戳的原因。
标注4则是token验证,redis以String类型的key-value形式把数据缓存在服务器本地,可以设置过期时间。这里以token为key,uid(这里是手机号)为value。
标注5是sign签名的验证,生成sign签名的方法要跟app的一样,验证签名是否相同需要根据所用的签名方法选择相应的验证方法,这里笔者用的是MD5加盐的方法做签名的,所以验证的方法也要用MD5加盐的验证方法。
地址
gank https://github.com/shijunxing0130/gank 有问题留言,或者邮件联系 shijunxing0924@gmail.com
apk体验 http://fir.im/md7w
总结
敢于去尝试新的领域的知识并取得一些进步,可以增强学习的信心和学习的欲望。也许对于java后台我并不是要非常精通,但是如果能把原理搞清楚,对于前端的开发是很有帮助的,特别是对于接口bug的定位。最近也在学习iOS,其实发现原理跟Android是一样的,包括小程序,掌握了应用和页面的生命周期,便可以灵活的运用了。
网友评论