「iOS」行车服务app 「客户端、后端思路+代码」资讯

  • 多年来开销了一个天车服务项目,iOS客户端接纳Objective-C编纂,
    后端拔取PHP搭建,部署在阿里云,操作系统为Linux CentOS 7.3,数据库MySQL,服务器为Apache,是相比基础的LAMP组合。

作者:郑晓冬

来源:爱范儿(ID:ifanr)

编辑:Juvae

  • iOS端代码部分我会讲述全体的支付思路,一些妙不可言的功效点也会详细说说。
  • 后端代码相比较简单,想要自己尝尝开发API的iOS开发者能够参照。
  • 发这篇文的要害目标是对近来的付出做一个完整回顾,同时希望对有亟待的同室提供到部分增援,有许多不尽合理和完善的地点,也呼吁各位同学不吝赐教,感谢大家!

这两天有关今日头条音讯栏改版的小说反映,已经可以用「怨声载道」来形容了。

第一上总体的效应图:

在新浪上查找相关紧要词,可以看来每隔几分钟就有一条新动态,从大 V
到普通用户都在吐槽这件事情;在江宁丈母娘发起的投票中,抢先 97%
的用户挑选了更爱好旧版音信栏;和菜头甚至为此卸载了法定客户端。

资讯 1

用户们对网易产品首席执行官的怨恨大致可以综合为灵魂拷问三连:你们到底懂不懂产品?是不是闲着没事就乱改?新浪怎么还不把全部产品团队裁掉?

show.gif

进而,在 11 月 17
日,许四人纷纷表示自己又被切回了旧版。于是我们又初步纷纷估算,产品首席执行官是不是怂了,也起始通晓只可以服众了?

在POI检索结果页面,地图控件呈现为空白,是因为模拟器运行的缘由,真机效果卓越

为了弄通晓所有以上这个疑问,爱范儿对特别负责信息通告的博客园产品老董@杰森大卤肉 举行了一回专访,针对我们广泛好奇的题目做了一雨后春笋问答。

这里是 iOS项目地址后端项目地址 。假若有援助,希望点一下Star以示鼓励,感谢~

此间是后端代码简析的稿子后端代码简析

「Tips」:对于发现代码运行报错的同学,项目利用CocoaPods展开第三方库的合一。在此之前为了便利自己对Pods文本夹做了ignore操作。刚刚已经更新,我们可以一贯打开后缀为xcworkspace的类别文件运行。不过这样Github上边的品类体积会相比大。

简易介绍:项目UI全体尽量保持了饿了么的褐色风格,其中一些页面参考了高德地图饿了么Max+的筹划风格。

从收集内容我们得知,乐乎的信息栏改版并不是一代四起的测试,而是站在所有公司战略层面考虑的大方向调整,且花费了较多的人力和时间去实施。而明天的「大规模复苏旧版」,也并不意味和讯决定妥协于舆论。

品种效率点

  • 账户、用户资料管理
  • 参照饿了么UI的稳定、天气模块
  • 基于高德地图API开发的POI搜寻,同时界面也参加了部分和高德地图app类似的特征
  • 自定义交互逻辑的约定及结果通告效率
  • 简言之参照Max+app的消息模块
  • 用户历史足迹、历史事件维护

看完这篇作品,也许你会对处于差评风波中心的「和讯产品老总」有一个更立体清晰的体味。

品种应用到的API及第三方库

  • 高德地图API
  • 和风天气API
  • 自己搭建的后端相关接口
  • AFNetworking 3.0
  • SDWebImage
  • MBProgressHUD
  • 花色内的Icon大量行使Alibaba的iconfont图标,极力推荐

旧版本不佳呢?为何要这样改?

品种涉嫌的技术点

  • 高德地图API的相干应用。包括地图POI检索导航等功能。
  • GCD的运用示例。包括耗时操作的后台执行、UI更新相关操作等。
  • NSUserDefaults珍爱账户音讯。这里是为使用方便,仅供参考。
  • Core Animation的使用。由于TableView加载时选择HUD的用户体验不是很友善,我自己包装了Loading页面。

其一题目也是大部分人都极端关注的问题。据 @杰森(詹森)大卤肉
表示,决定对音信栏改版的原由可以分成三有的:一是为着提高头部用户处理音讯的功效;二是增强大气普通用户的插足度;三是适应接下去博客园日渐丰盛的制品成效。

支出思路

  • #### 登录注册页面

资讯 2

IMG_2008.PNG

  • 花色起始化时接纳Tabbar VC作为rootController,倘若这时候未曾账户音信,则运用模态弹出形式弹出登录页面。

  • 这有些相比较简单,客户端会先对用户输入的音信进行简易的法定判断,然后调用登录接口。

  • 有一对有关TextField的点击空白和Return回收键盘以及呼出键盘时控件移位制止遮挡的代码可以小心一下。

  • Tabbar VC伊始化时,第一个tab栏的VC会进展定位操作,假设这时候为已报到情状,则直接调用发送历史足迹的接口。在未登录状态下,用户点击登录按钮,登录成功时,会向第一个tab栏VC发送一个调用历史足迹接口的通知

  • #### 主界面(tabbar栏首页)

资讯 3

IMG_2009.PNG

资讯 4

IMG_2010.PNG

  • ##### 地理地点和气候部分。

    • 这有些是单独包装的View,UI参考了饿了么。地理地点和公告列表按钮的点击事件采纳代理交由最近VC实现。
    • 由于模拟器定位赢得的坐标无法利用高德地图的境内API,我对运行环境做了瞬间判定,假如果模拟器运行,则设置了默认坐标,对应地方大概是北京市海淀区北京理工大学
    • 眼下VC加载过程中,开启定位,在地理地方反编码的成功回调中调用天气新闻的接口。注意地理地方和天候音信的UI更新放在主线程执行。
    • 点击地理地点的文字时,会模态弹出重新定位的界面,重新定位按钮的点击事件采纳代理交由主界面VC实现,制止在此界面再次实例化定位有关的目的。
  • ##### 功能栏

    • 使用UICollectionView展示。各个CellIcon动用阿里巴巴的iconfont图标,将以往的图片素材转为字体来利用,对于素材整理、高清保真、代码方便来说有巨大的频率提升。在Web移动客户端支付领域曾经异常广阔地在行使。
  • ##### 某一效果VC

资讯 5

IMG_2011.PNG

  • 这部分UI参考了高德地图附近界面UI以及一些特性。导航栏隐去,最上边是一个地图控件,以及透明的归来按钮。上边是POI信息的tableview。在tableview向下滑动时,地图隐去,tableviewframe迈入,导航栏出现。向上滑动到顶部时,tableview下移,地图出现,导航栏隐去。
  • tableview滑动时特性的贯彻:通过scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate代办方法,判断滑动的可行性,从而对tableviewframe以及导航栏等元素进行操作。
    代码如下:

//判断滑动手势方向,决定tableview的frame改变
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
  CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];
  if (translation.y>0) {
      NSLog(@"ssssss");
      {
          NSIndexPath *dic = self.poiList.indexPathsForVisibleRows.firstObject;
          if (self.poiList.frame.origin.y == 64 && dic.row == 0){
              [UIView animateWithDuration:0.2 animations:^{

                  NSLog(@"visible:::%@",dic);
                  showMap = YES;
                  self.navigationController.navigationBar.hidden = YES;
                  self.poiList.frame = listFrame;
              }];
          }
      }
  }else if(translation.y<0){
      NSLog(@"tttt");
      if (self.poiList.frame.origin.y == 300){
          [UIView animateWithDuration:0.2 animations:^{
              showMap = NO;
              self.navigationController.navigationBar.hidden = NO;
              self.poiList.frame = listFullFrame;
          }];
      }
  }
}
  • 在界面加载时,使用了温馨包装的loading页面:

    资讯 6

    IMG_2018.PNG

    • 在页面view加载的最初始,将loading页的view参与到近来VC的view中。在页面数据加载成功的回调中,调用tableviewreload方法,而后将loading页移除。
    • loading页使用basicAnimation打造了简短的呼吸动画,keyPath为logo图标的透明度。
  • 第一个cell的POI地点默认同预约,显示预约图标,点击进入预约界面。

    资讯 7

    IMG_2012.PNG

    • 本条部分的和后端的彼此逻辑是友善定义的。一般的约定过程是预约请求发送成功后,一段时间内由店家举行同意或拒绝操作,而后客户端收到结果回执。由于本项目简单模拟此过程,均采纳http协议举办通信。所以我的兑现格局是后端收到预约请求后,直接使用擅自数形式模拟店家的收受或拒绝。一定时间后,客户端调用结果查询的接口来得到预约结果。
    • 贯彻格局为,点击预定按钮,若预约接口调用成功,按钮字样变为预约中,钟表icon起初转动,并且按钮变为不可点击状态。与此同时,使用performSelector办法延时调用获取预约结果的接口。在此网络请求的成功回调中,向主界面发送布告,而后主界面通告按钮左边显示文告数量的新民主主义革命图标。如图。
    • 这边通告列表的多少是存在UserDefaults中的,不同装备之间不可能一起。其中涉嫌到部分userDefaults中数量要求的学识,具体可以参照代码。这里是因为急需是临时想出,假如正常实现情势需要开销获取通知数据的接口。我为了节省开支时间所以使用这种措施来模拟实现了。这些地点在事后能够圆满~

      资讯 8

      IMG_2013.PNG

  • #### 资讯Tab栏

资讯 9

IMG_2014.PNG

  • 那边没有花费过多的肥力。数据预置了天涯论坛情报有关数据。界面UI参考了自己平常使用的Max+iOS客户端的信息功效。第一个Cell以全图为背景,可以用来突出展示紧要内容。

  • 资讯详情页是一个简便的webView。同样利用了自己包裹的Loading图。移除时机就简单放在了webViewfinishLoad回调方法中。其实对于Webview诚然加载成功时机的判定还有好多方可聊的事物,日后补偿。

  • #### 设置页面

资讯 10

IMG_2015.PNG

  • 以此页面不问可知是采纳六个sectiontableview兑现。在页面的viewWillAppear主意中,需要调用获取缓存数据大小的措施,单独更新清除缓存cell的始末。因为在历次切换tab的进程中,缓存数据都有可能暴发变化。

  • ##### 个人信息

    • 页面还是采纳tableview实现。在消息编辑页面,仿照了微信音讯变更页面的逻辑。页面出现时,顿时弹出键盘。关于使textField在页面加载成功时即变成第一响应者的题材,需要重写- (BOOL)becomeFirstResponder艺术。代码如下:

    - (BOOL)becomeFirstResponder
    

{
[super becomeFirstResponder];
return [self.textInput becomeFirstResponder];
}
“`

资讯 11

IMG_2016.PNG

  • ##### 历史足迹、历史预定、积分信息

资讯 12

IMG_2017.PNG

资讯 13

IMG_2019.PNG


这部分也仍然接纳了打包的loading页面。如若数据条目为空,则不出示tableview,提示暂无相关信息,如图。

  • ##### 清除缓存

    • 这边其实只行使了SDImageCache的连锁办法。大家还可以够祛除本app的缓存数据所在目录来达到确实祛除缓存的目的,日后商量。
    • 缓存数据获取的开头单位是B,我们需要除以10241次、2次来判定当前数量是在KB级别仍然MB级别,并作正确呈现。
  • ##### 退出登录

    • 点击此按钮,清除userDefaults中相关数据,然后模态弹出登录页面。
    • 此地可以小心的一些是,我们在模态弹出登陆页,并且再度登录之后,界面是在脱离登录往日的页面的,也就是tab栏的第多少个页面。假若想要再度登录之后,界面出现在tab栏的首页,我们得以在模态弹出登录页的完成回调中,对脚下tabVC的selected index举办安装。代码如下:

    DELoginViewController *loginVC = [[DELoginViewController alloc] init];
            [self presentViewController:loginVC animated:YES completion:^{
                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                    // 耗时的操作
                    dispatch_async(dispatch_get_main_queue(), ^{
                        // 更新界面
                        AppDelegate * appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
                        appDelegate.tabbarVC.selectedIndex = 0;
                    });
                });
            }];
    

代码的重点开支思路基本描述完,具体的底细大家可以和我继续交换~项目中有很多不尽合理的兑现情势,小一些是考虑到时间因素。欢迎大家展开座谈、指教。
有连带的题材,欢迎我们举行留言。项目中选用的自有接口,部署在自身的阿里云服务器中,可外网访问。请求我们合理使用。

后端项目数据库相关的sql代码,我已上传至后端项目

假使我们有趣味,将来我得以再讲述一下server端的代码,当然,后端我也是初学者的品位,仅供想要入门的同校参考。

自己的私房博客网站地址:
哈尔(Hal)o的个人博客
,欢迎我们访问。

代码已开源,地址在篇章首部。假诺点一下star,我真正会十分感谢~
halo

基于微博 2017 年第三季度财报显示,Q3 果壳网月活跃用户达到了 3.76
亿,其中移动端活跃用户占全部活跃用户比例超越了
90%。而随着用户数的加强,用户特征更加多样化。从产品的角度看,虎扑用户大约可以分为两类:头部用户和普通用户。

头部用户每一日都能采用巨大量的相互音讯,但其实,因为个人对新闻的处理能力异常简单,所有在旧版音讯栏中他们处理音信的频率会相比较低。打个比方,某大
V 每一日中午打开今日头条能接收 1 千条新通告,由于个体精力原因,每一回只好最多刷
100、200 条音讯。在旧版信息栏中通报按时间排序,这就导致后边 800
条被忽视掉了。

最近的改观是想要让他俩在有效的时日内能更使得的竞相。比如说很多大号他们或许会更关注「我关注的人对自己有哪些互动」,或者说「有人在转化自己内容时在中间写了相比较有意思的见识」,他们对这类音讯会相比较敏感。所以大家做了一个改版,假若说你接到一百条评论,我们就会把里面你敬爱的人的评价给停放下面来,即使那条评论公布时间比其他用户早。

@詹森(杰森)大卤肉 说道。

简短,今日头条打乱原有时间流消息通告,改为智能排序,是为着扶持用户挑选出他们更感兴趣的始末,并将那有的内容优先展示。但从杂谈反映看,这种「扶助」,最近犹如并从未买好头部用户们。

除此以外她还增补,新版通告格局(下文简称新版)会把尚未新增内容(如转发语)的转速内容折叠为一条,突显为「xxx
等 xx 人转发了您的果壳网」。

俺们会把剩余的有新增内容、有转发语的新闻给列出来。可是因为任何转发通报被折叠为了一条,只剩下一个数字,所以现在留存的一个问题是:用户会倍感到我的消息是不是丢了?

@詹森大卤肉
说道。据他表示,这一多级改动的目标都是为着帮扶头部用户增长处理音信的频率,那也是改版立项之初起初开头考虑的。

但还要还有另一类用户,他们没有这样多音讯可处理,在应用博客园时也基本都是居于「围观」的状态,他们属于网易定义中的普通用户,同时也是绝大多数用户。相比之下,这多少个用户在果壳网能感受到的留存感较弱。@杰森(詹森)大卤肉
表示,乐乎希望能拉近他们和社区的偏离:

天涯论坛安身立命的一贯是在于有社交关系、有相互,这是今日头条区别于传统音讯客户端的有史以来。作为社交媒体平台,天涯论坛希望能通过社交的格局来让用户拿到越来越的满意。所以见到现在多数普通用户的情景我们会起来盘算,为何这一部分用户没有存在感?原因就是他俩在平时的运用中很少能收到其他用户的竞相。

合流(把不同类型音信合在一起)其实只是这次改版的外在表现情势,更深层次的改观还有许多。我们事先也有看外国的一些软件比如
Facebook、Ins 这一类社交类的
app,它们的系统通报中除去用户的转评赞信息,还会把跟用户相关的情节也推给用户。比如与您相关的人发帖了,或者你关心的人关注了新的用户。其实这就是为了拉近用户与整个社区的离开。

参照 Ins
的关照界面,会在点赞评论关注之外参预「那一个人大饱眼福了图片」「那个人关心了什么人何人」类音信:

但这么些公告究竟是不是用户真正需要的吧?今日头条会不会也如法炮制这种样式,在终极确定版本的音信栏中加入大量「我关切的用户又干了吗」?@杰森(杰森(Jason))大卤肉
的作答是「这一块我们会比较审慎」。

上文提到,网易信息栏改版的最终一个驱引力是为了适应接下去网易日渐增长的成品效果。用户对社区所做的别样表现都是急需持有反馈的,在中期,天涯论坛内的并行的一言一行唯有转评赞,而现在,例如关注话题的换代、问答的更新等都是原先从未有过的。

比方你关心了一个一流话题,这就是您与这些社区时有发生的相互,表明你需要以此话题内更多信息的汇报,那么我们就务须给你这有的上报,但那一个通告已经无力回天透过旧一套的信息形式来给你传达了。在旧版中这类通告是身处私信里,可是私信的固定本应是人与人里面私密互换的制品,如若走这多少个渠道的话会让用户对私信这么些产品日益暴发抵触,失去了社交的感觉到。所以在新版的音信栏里,假诺用户关注了某个新鲜事,该话题有新内容会在通报里呈现。

新版新鲜事更新指示界面

这能不可以一向在原先的大三类上面再加上几栏「话题更新」之类的成团呢?@詹森大卤肉
表示,「这样的话公告页面就会越来越累赘,而且根本上它如故一个查封的形象和缓解方法,总不可以多出现一个产品就多加一个进口吧。」

旧版的顶级话题更新在私信里

这也是乐乎将消息栏分为「布告」和「聊天」两大类的案由。那种格局除了能将「公众可见的通报」和「私密性的聊天」区分开来,让私信回归私密社交的性质。

此外,除了上文中已经介绍了的智能排序、转发折叠、分布告和聊天两栏等,新版还依照用户认知中转赞评的优先级,对三者做出了折叠和排序上的界别:评论
> 转发 > 赞;评论不折叠,有转发语时不折叠,赞折叠。

时刻被骂,会有心理阴影吗?

实则,「几乎所有人都讨厌新版」对今日头条来说是一个伪命题。

依照,天涯论坛每一遍推出新产品和效劳,都会做在健全上线在此以前做 AB
版测试,或者叫灰度测试,然后依照测试数据开展优化和调整,再逐渐覆盖到更多用户。

而此次的新版新闻箱,天涯论坛从二〇一八年八月份就从头做灰度测试,这时根本面对新登记用户。再后来渐渐扩张范围,直到2019年年中才把具有低互动用户也一并测试完。从这一批用户的多少反馈上来看,结果相对相比较正向,不管是开拓,仍然刷新、互动,他们的活跃度都比原先要高。所以对于普通用户这一块,天涯论坛新版的测试结果是达到了预期设想的。

但到了近来,针对头部用户推广的灰度测试却迎来了有史以来最大的负面舆论轰炸。对此
@杰森大卤肉 表示:

自然大家做工作也不是说俺们认为 ok
了就直接往下推进,咱们也会关切数据。(目前)那一遍测试我们的灰度数据尚未直达预期的话,我们就不会一意孤行地去推动。所以我们这两天也把一些用户改回了旧版,首要仍然想通过灰度测试去不断改进产品的形式。接下来我们相应还会不停推出改良的版本,从来改到大家满足截止。

唯独客观来说,任何一款产品都无法成功让具有的人满足。事实上 @杰森大卤肉
说的「改到满足停止」指的是:去看用户的痛点在哪个地方,紧要吐槽哪儿,使用过程中会碰到什么问题。

比如有用户举报觉得温馨音讯丢了内容看不到了,我们就会针对这一局部去改正;有些用户说只想关注评论类,即便实际新版顶部也已经做了这一部分筛选,可是那个筛选机制可能依然不够感知,导致成千上万用户还不知情有其一效能,所以大家下一步想在筛选这一块也做一个加重,比如从「点击展开」改成「刷新过程中直接表露」。

对产品首席执行官来说,顶端通告举办的输入太深,这就属于可改正的局面之一。先把这一部分深化,等用户习惯了后头再逐月往回收,让它成为一个更是精简的界面,这是博客园接下来会使用的处理形式。

改版背后的故事

在众多网友看来,知乎平昔是成品经营改动产品无视用户体验,而用户再跑到
@来去之间
新浪下声讨。通过下面多少个问答,也许你能够看出背后更多不均等的信息。

Q:当时决定要改版时,是团组织统一意见或者领导拍板决定吗?

A:其实是发源于公司里面很多下面的主心骨决定的。因为布告在一切客户端里尽管只是很小的一对,但对此任何新浪来说,互动是果壳网和此外音信类产品的平素区别(标志性意义)。假设脱离了社交,天涯论坛就只能改成一个纯资讯客户端了。用户为何要采用网易?除了用户正常的始末消费(刷知乎)之外,社交、用户粘度也是很要紧的点。不管是从用户方面来讲,仍然从公司角度来看,提高互动都是大家接下去自然要做的政工。但原来的打招呼情势承载不了我们的愿望,不可能让大家达成接下来想要达到的靶子。

二〇一八年我们有了想法之后就展开了禀报,最伊始集团领导是反对的,不允许调整。我们就准备不断去说服他,后来把集团主任和一部分同事放进第一批灰度测试名单,先用了大体上一年左右,他们也是逐日从不适应到适应,前日微微同事切回到旧版本反而不习惯了,找到我们要求再切回新版。这个灰度测试的累积,也给大家优化产品提供了经历,增添了信念。

Q:从哪些时候初叶做这件工作?花了稍稍人力?

A:从上年四十一月份初阶准备,整个集体有三四十人,包括前端后端研发,因为整个通告流的改版实际上是一个干净的改变。在此此前就是一个纯的列表,现在不光把这转评赞三有的集合起来了,还愿意能升迁头部用户互动效率,以及让更多用户在通报界面就能观望有可消费的内容。

Q:被骂了如此多,有心绪阴影吗?

A:其实还好……
因为做产品就是这般,大家也急需为判断错误而付出代价。用户无论骂依然赞都是一种反馈,咱们需要遵照这么些反映来去判断正确的主旋律,然后去改进。

Q:通知只是天涯论坛的一小部分,但你觉得你们这一个小效率的调整能为整个今日头条的经验带来哪些?

A:说来说去依然天涯论坛的有史以来:社交。我们如故期待更多的用户能出席社农行为中去,普通用户假如只是围观的话,过一段时间就可能会消亡。对她们的话,同样的音信资讯产品已经有许多,为啥要留在知乎啊?其实新浪还有大量的用户不明白博客园该怎么玩,也不领会怎么去改正自己首页的始末,所以我们会给他们更多涉及类的推介。如若唯有按在此之前信息流的形式,他们或者就没东西可刷了。

果壳网需要改正的还有为数不少

从产品的回答中,爱范儿多次听到了「社交」这样一个字眼。从此前天涯论坛上线推广「新鲜事」、鼓励媒体类蓝
V
等作为足以看出来,博客园希望团结能为用户提供音信的遵循。但随之面对知乎等消息类产品的隆起,新浪需要找到一个有标志性、独特性的效能,来将自己和这么些制品分别开来,这就是它最初的立命之本——社交。

除此之外我们这群资深网民,果壳网的几亿用户中其实还有大量的基层用户,他们或许都不利用分组效能,甚至没能找到更多和气或者感兴趣的博主,音讯栏七个月没有一条新动态,但那些用户才是组成果壳网庞大用户量的内核。为了让他俩多点存在感,天涯论坛绞尽脑汁,于是想出了给他们的通告页加多些东西。

依据新浪的逻辑,留住了这有的新用户,也就保住了用户量。而大 V
、KOL、头部用户的粉丝大部分都是普通用户,他们接受的并行信息都源于于那些人,所以从遥远来看,有粉丝,就有大
V。

做产品做技术的人都习惯用数码说话,不过数字后边的用户属性同样也很关键。连什么选用产品都不完全了解的新用户,经由推荐布告提升活跃度之后,他们是会进一步成为忠实用户,仍旧走马观花点点看看过后就忘了?在为低活跃用户扩充推荐音信的同时,如何制止影响其他用户处理音信的效用和经验,又是另一个亟需考虑的问题。

要想做到更好的用户存在和感受,乐乎需要改进的还有许多。

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注