Java转iOS-第一个项目总结(1)

发布时间:2023-11-14 点击:111
0.前言
本人14年12月份,从网站开发组转到了移动开发组,自己的java两年半工作经验变成了objective-c零经验。2015年1月份新启动了一个移动项目,年后因为人事变动,自己从辅助开发变成了"核心"开发,目前项目基本接近尾声,下面进行总结,希望对一些人能有帮助, 另外也希望ios大牛进行指导
1.项目介绍
项目属于一款社区类软件,包含小组/帖子,视频,文章,评论,推荐搜索,即时通讯,好友,第三方登录/分享,推送等,涵盖常用app的基本功能
2.项目使用的第三方开源库
http://github.ibireme.com/github/list/ios/整理了比较常用的ios第三方组件,以及github上的统计
项目使用了cocoapods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个
1.afnetworking
目前比较推荐的ios网络请求组件,默认网络请求是异步,通过block回调的方式对返回数据进行处理。
需要注意的是afnetworking对服务器返回的contenttype要求比较严格,默认只支持application/json的返回。所以可能需要添加对text/html返回的支持,否则可能无法获得返回数据。
另外就是文件上传,这里推荐使用第二种
[formdataappendpartwithformdata:name:]; [formdataappendpartwithfiledata:name:filename:mimetype:];
第一种只需要传入表单名和文件流,源码也是根据文件流获得对应的文件名和文件类型,然后调用第二种方法。但是楼主遇到了使用第一种方法,提交后后台判断为非文件上传,无法获得文件流。还有如果后台是根据文件后缀文件类型,那么第一种也无法使用。
afnetworking是异步的,也可以使用同步的网络请求方法.
2.fmdb
对sqlite数据库操作进行了封装,demo也比较简单
3.mbprogresshud
也是ios项目常用的一个组件,用于显示过渡效果的,比如网络请求之前显示loading,网络结束隐藏loading。建议封装在baseviewcontroller中,所有viewcontroller继承就能使用
4.mjrefresh
这个是传智播客李明杰老师的作品,自己的oc基础就是看他的视频半个周末就基本拿下了。mjrefresh主要用于刷新操作,提供了常用的刷新操作,还有刷新动画,用着很好用。建议把方法封装在baseviewcontroller中,这样修改刷新操作时,就只需要改动一份。(之前用的旧版mjrefresh,只支持普通的刷新,不支持动画,后来更新后版本变化比较大,旧的方法已经不推荐使用了,所以还是封装基类中使用比较好,方便以后修改)
5.sdwebimage
也是ios最常用的一个组件,用户加载网络图片,可以缓存到本地。大概原理时,第一次加载后,会根据url加密作为文件名缓存在本地,如果再次加载图片时,就直接从本地加载。用着也比较简单。这里也分享遇到的一个问题,先从网络加载一张小图,然后小图作为占位图,再从网络加载一张大图
[imageviewsd_setimagewithurl:[nsurlurlwithstring:imageurlstring]placeholderimage:defaultpostpic]; [imageviewsd_setimagewithurl:[nsurlurlwithstring:_bigimageurlstringarray[i]]placeholderimage:imageview.imageoptions:sdwebimagedelayplaceholdercompleted:^(uiimage*image,nserror*error,sdimagecachetypecachetype,nsurl*imageurl){ }];
6.rdvtabbarcontroller
一个tabbar组件,可以方便设置底部菜单的文字图片,点击效果,小红点提示等
7.toast
类似android的toast提示效果,封装在baseviewcontroller中,需要的地方进行提示
8.xmppframework
ios唯一的xmpp类库,作者在去年8月份添加了xep-0198协议支持(流管理,用于xmpp断线重连),但是通过pod进行更新时,无法下载到最新版本,可能0198还没有完善好,无法作为正式版。
9.tpkeyboardavoiding
用户键盘弹出自动计算高度,进行屏幕滚动操作
10.amr
做即时通讯的音频处理,目前我们的即时通讯使用的录音文件是m4a,便于web端的音频播放
11.tqrichtextview
用于做富文本视图控件显示,用于即时通讯的表情显示,以及资源评论的富文本显示
12.csgrowingtextview
用作即时通讯文本框和评论文本框使用,可以显示多行输入
13.mjextension
也是李明杰老师的作品,用于json转model进行使用,有点类似于java中谷歌的gson。转换效率据说也很高,使用也比较简单,只要前后台约定好,json直接就转成了model。一个工作多年的ios朋友说,一个项目主要的是对model层的管理,他推荐的是mantle。不过mj这个更轻量级点,用着也更加简单。
3.工具和插件介绍
xcode
ios开发的官方工具,也没别的选择。有些功能做的确实挺帅的,比如stroyboard的拖拽事件绑定。不爽的地方就是没有代码格式化,另外点击方法,可能跑到另外一个类中了!!另外左边的目录也不会自动发生变化,定位到对应文件,需要command shift j
simpholders2
可以快速找到模拟器对应的沙盒目录,启动后右侧顶部工具栏有个类似关闭按键的按钮,显示最近的几个应用,点击就进入到了对应的沙盒目录
vvdocumenter-xcode
xcode工具,///生成注解模板,xcode这功能都不给集成,唉
其他的基本就不用介绍了,有的也不怎么好用。svn可以使用cornerstone,git可以使用sourcetree,sqlite可以使用sqlite professional(不过是收费的,免费的只能查看),还可以用火狐浏览器的sqlite插件。
4.集成友盟
友盟,提供了app和运用的一站式解决方案。公司上个移动项目用到了友盟的推送服务,这个项目中, 还使用了分享,第三方登录的功能,自己也亲自参与到了相关集成。友盟的开发者文档还算是比较全的,遇到问题可以联系客服或者到友盟的论坛找解决方案。
1.关于推送
ios推送分为本地推送和远程推送,本地推送是指本地自己弹出信息,另外一个就是远程推送,当应用未启动时,也能收到相关推送信息。我们项目没有使用本地推送,使用的都是友盟的远程推送。包括消息(聊天)和通知(用户信息通知)中。用户在聊天过程中,手机除了发送即时通讯以外,也调用后台接口,发送友盟推送。另外用户的帖子,评论,关注,点赞等都会由后台调用友盟的推送。
友盟推送(另外一个域名)包括单播,列播,和广播,其中广播限定次数每天3次,可以和友盟申请提高次数,其他不限定次数,目前来看单播速度还是挺快的。使用友盟推送,需要在苹果开发者账号中,新建两个推送证书,提交给友盟(友盟有详细的文档,可以参考)。可以在友盟后台,把测试设备的devicetoken加到友盟推送的后台,从友盟后台发起推送。(需要64位token,需要通过方法进行计算,直接在xcode或者ituns中拿到token不行)
推送的大概流程就是,手机在第一次启动app的时候开启推送服务,手机在启动app的时候,注册友盟服务,同时把devicetoken提交到自己的后台,后台可以在需要的时候拿着devicetoken调用友盟的推送接口,友盟再去发起苹果的推送服务,使对应的设备收到远程推送信息。
2.关于第三方登录和分享
这块儿都在友盟的社会化分享中,里面提供了比较全面的文档。建议第三方分享模块不用自己特殊设计,可以使用友盟的默认分享模块(我们项目的分享模块自己进行了设计,包括了收藏,所以整块都需要自定义写ui和写分享代码)。关于友盟的第三方登录和分享需要注意的时,qq和微信登录分享,都需要手机上安装应用,appstore审核会卡这点,所以需要判断手机是否安装应用,隐藏没有安装应用的图标,这块儿友盟的sdk已经有相关的判断方法(应该是友盟集成了qq和微信sdk,qq和微信sdk提供了判断方法)。
第三方登录分享需要到相关的平台注册开发者账号。微信开发者账号(注意不是订阅号)第三方登录需要交钱才能开通,可以支持微信和朋友圈分享。qq开发者账号可以支持qq和qq空间分享(qq微博好像需要微博开发者账号)。新浪微博需要微博开发者账号。qq分享开发阶段需要把测试账号加成开发者账号的好友才能测试,微博也类似。
第三方登录自己遇到了qq提示不是最新版的文本,在友盟论坛中找到了解决方案。
第三方登录,我们项目集成了qq,微信,新浪微博登录。三个平台都能获得用户的scr

云服务器哪里便宜今日价格
开启了百度云加速网站就打不开麻烦帮忙看下原因
怎么进行域名解析 域名解析之后网站才能用吗
阿里云学生服务器怎么优惠购买
阿里云服务器的价格表
我想买个便宜云服务器
云虚拟主机怎么管理
看得见才有用!聊聊移动APP导航设计的改版实战