欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~css
做者:胡泽锐,2010 年毕业加入腾讯,前后负责过QQ空间、网页应用、移动应用、移动游戏相关的工做,有着丰富的平台产品经验以及大前端开发经验,目前在腾讯云负责前端以及终端相关的工做,提出并推进移动开发平台产品的落地。前端
很高兴能和你们分享移动开发的历史、现状、以及将来,一块儿探索面向云端的全新模式——移动开发即服务。正由于有了移动开发即服务的理念,才有了移动开发平台这个产品。传统模式下,你们都是以单个产品或者能力的方式提供服务,好比推送的就提供推送的服务,分析的就提供分析的服务。也许在单个产品下,能作到体验的极致,在接入使用,或者管理上能作到很方便。但对整个移动开发来说,这种单品的割裂会致使整个移动开发体验的不流畅、不完善,各个产品之间的割裂会致使整个移动开发的节奏也是割裂的,咱们没法完整地作到一件事情从头至尾只在一个平台上作,因此腾讯云提出一个全新的模式——移动开发即服务。css3
这里面包含两个概念,一是要作移动开发总体的事,咱们要服务移动开发整个的生命周期。二是作服务的事,服务这里也包含两点:一是咱们的开发体验必需要作到完善,二是使用体验也要尽力作到最好。数据库
下图是腾讯云和腾讯内的各个产品合做,深度整合各个产品,联合推出的全新的移动开发平台。若是只是看功能的话,这些产品都不是什么特别新的东西,好比移动分析,这些产品不仅在腾讯公司内部普遍应用,在公司外部也有相似的产品提供对应的服务。好比MTA咱们公司已经使用了好久;bugly在公司内外获得印证,在业界也有普遍的使用;计费米大师集成了公司全部产品的计费功能,包括应用宝、开发平台这种toB的产品,也有王者荣耀、QQ飞车具体的应用。tomcat
移动开发平台就是将这些产品进行深度整合,变成一个总体,以一种全新的开发模式和体验提供给开发者。开发平台4月份上线,在一个多月的使用过程当中,咱们发现开发者使用的火爆程度超出了咱们的预期。经过对用户回访以及统计数据,咱们总结出三个关键点。服务器
在进行用户回访的时候我常常问一个问题,你以为在接入和使用产品的过程当中有没有遇到什么难题?用户通常给个人反馈都是这样的:挺顺利的、没有遇到什么问题;挺好的、能顺利接入。其中有两个回答我印象比较深入,一是说挺好的,文档能看懂;二是说文档挺齐全的,想用的几个功能,如自定义、标签推送都能很快找到。微信
也许对外部的人来讲,这种反馈很广泛很正常。但以一个移动开发者多年的经验,我以为这两点实际上是很高的评价。咱们通常在使用其余的产品时,常常会遇到几个问题。第一个是文档看不懂;第二个是跟着文档操做遇到问题时不知道该怎么作,不知道要怎么进行下去;第三个是在遇到一些比较高级功能的时候,找不到文档应该怎么作。因此,我认为上面的两个回答是对开发平台易用性比较高的评价。架构
这个提高包括两个方面,在接入过程当中,接入一个能力也好、多个能力也好,开发平台提供比较简便便捷的方式,节省用户接入的时间。第二个是在使用过程当中,由于咱们提供比较齐全的功能,可以让用户比较专一在核心业务上,而减小被打断的时间。运维
从统计数据来看,咱们发现使用咱们产品的开发者,最终的留存率能够达到50%,这是一个很可观的数字。另外,咱们也接到不少用户咨询,但愿把线上的产品迁移到咱们的开发者平台上。咱们如今主要是提供新开发的产品,尚未针对现有产品提供迁移的服务。由于这类用户的咨询量也比较大,因此咱们也在准备这方面的事情。微服务
这些关键词从正面、侧面体现了整个产品的易用性和可用性。后面我会具体分享一下,在整个开发平台在设计和使用过程当中,咱们都作了哪些事情来提升开发者的易用性和可用性。
上图是根据我的工做经验及移动开发的历史进程总结出的四个时间点。2010年是我首次接触移动APP开发;2012-2013年真正从零到上线参与和主导一个移动APP的开发;2014-2015年在我负责移动游戏的时候,当时的服务已是比较成熟的阶段了;2017年我在腾讯云负责终端和前端的工做,有一次与合做伙伴进行一个移动APP的项目,首次之外部人员的角度认识如何去构建一个移动应用。在这期间咱们也遇到了各类各样的问题,使我下定决心去作一个移动开发平台这样的产品。
2010年,实际上是移动开发刚兴起的阶段,我认为这是一个拓荒的时代。由于当时国内资料特别少,咱们常常从国外找一些资料,早期阶段遇到的最大问题就是在性能方面,当时花费了至关多的时间去改进性能。咱们关注内存、渲染、速度,用各类方式去进行优化。
第二个阶段是2012-2013年,就是在这个时期提出了移动优先的概念。手机进入大屏时代,比较标志性的事件是三星note系列的大卖和iPhone5的推出。当时不少开发者一窝蜂地涌入移动开发,但那时的移动服务仍是很不齐全的。有一次咱们须要一个像如今的信鸽这样的推送服务,咱们尝试了不少服务,发现都很难知足需求。因此咱们只能本身作一个,但这个过程很是艰难。推送要保证触达率、时延等,咱们在开发过程当中常常被打断,好比作到一半,有人提出本身接收不到推送,咱们就必须停下来寻找缘由,在上线以后也会遇到推送触达率不够这样的问题。移动推送只是一个简单的缩影,当时会遇到不少这种组件不完善的问题。虽然你们都在转向移动开发,但当时的服务还不够齐全。
2014-2015年我在公司内部负责移动游戏,当时开发的过程就行了不少,一些周边的事情已经不须要本身去作了。我在作架构设计的时候,会将一些不一样阶段用到的功能预先加入进来,好比移动分析、移动推送这类经常使用的服务,像排行榜、公告系统等也会在一开始包含进来。虽然服务比较齐全,可是也会遇到一些问题,好比集成方式不统1、初始化方式不统1、使用方式不统一,不一样的厂家或不一样的部门提供的是不一样的集成方式、初始化方式、使用方式,对于使用者来讲就很不友好。因此咱们就作了一些封装,好比当时把全部初始化的东西放在统一的地方去屏蔽初始化的细节。二是在上面包了薄薄一层,尽可能让整个使用方式统一。我相信你们作移动应用的时候也常常遇到这样的事情,须要本身把不一样厂家提供的不一样的接口统一块儿来。
2017年,我和合做伙伴一块儿进行了一个移动应用的项目,可是也调研了国外的云厂家是怎样去作的,好比亚马逊。当时亚马逊已经提出了这样的概念,把全部场景、全部生命周期的东西包含在一块儿,推出一个Mobile Hub产品,包括移动开发的整个阶段,好比开发、测试、部署,整个研发的体验都作得比较好。国外移动开发者服务进入一个新的阶段,咱们认为这是面向云的一个阶段,但其实国内在这方面作得还比较初级。固然不一样的产品面向云的方式会有点不太同样,咱们如今提供的方式也会与aws有点不同。不过基本上的理念是差很少的,是一个面向云的全新开发模式,让移动开发者以整个移动开发的方式来作,而不是以推送、分析这样的单个产品去作。
咱们回顾一下作移动开发的整个进程。从零开始作一个应用,在没有开发前就应该去作架构的规划,我会考虑把可能用到的能力,先统一集成进来。首先我须要分析能力,第一步我就要先去官网注册一个账号,而后把SDK集成进来,第三是编码去使用它,第四是上线以后须要查看数据的管理时候要去控制台。搞定分析后,发现推送须要将这个过程再作一次,还有不少其余服务也是如此。这种事情至少作了五六遍,作了不少重复的事情,只是为了把不一样的能力整合到一块儿。
当全部的能力集合在一块儿,还须要作代码总体体系的设计。设计完成后,我就会发现一些存在的问题,好比代码散乱,我花了很大的精力去解决代码散乱的问题。这个问题是怎么形成的?第一是集成方式不统一,有些是给我一个SDK的包手动集成进去,有些是用工具如gradle,cocoapods集成进来,还有是提供另外的方式让我集成进来。集成这一部分没有办法作到在同一个地方把全部的服务所有整合在一块儿,在一我的开发的时候可能问题不大,但在多人合做的时候就会出现一些问题。好比当我在作项目沟通或者项目交接的时候,必需要说清楚推送服务的集成方式,还须要写文档说明每一个能力是如何实现的,咱们花了不少的时间和精力去解决这样的问题。二是初始化和使用方式不统一,有的是按需初始化,有的是让我在项目一开始就进行初始化。使用方式也不太统一,各类模式混杂所致使的问题就是使用的时候让人难以理解,项目交接的时候也很是困难。有些初始化的部分代码不同,并且代码也散乱在不一样的地方。在一个架构师的角度看来,这是一个很是很差的体验。
第二个是沟通成本高。当我作完总体的架构设计以后,还必须召集整个团队的开发人员一块儿开会,告诉他们如何使用这个产品,如何使用每一个能力。这是启动阶段的开发和培训,须要占用一部分的时间。整个开发团队在开发过程当中也没法作到只专一业务,他们常常会遇到一些问题。好比在使用某个服务的时候须要一个功能,找不到的话就找人联系我,我再去查看对应的文档,或是尝试解决后并反馈给他,这中间有一个时间成本。并且在这种状况下,开发过程当中每次的打断其实都让整个团队的效率下降。
第三个是研发效率的低下。看到云服务带来的便捷,会感受到传统模式下的方式实际上是不够高效的。举个简单的例子,若是想要集成一个简单的文件上传下载的服务,之前我会搭建一个存储的服务器,本身实现上传下载的细节。但如今不是这样了,你们均可以用对象存储服务去作这样的功能,提供了便捷的SDK去作这样的事。可是我须要本身把这个能力集成进来,集成服务以后才能够便捷地使用,使用几行代码实现文件上传和下载。如今是云时代,云能够提高研发效率、提升各类研发性能,可是移动开发者没有办法直接享受到云的便捷,须要作一些事情把云的服务整合进来。当时作架构时只能花不少精力、写不少文档和范例解决沟通成本高的问题,将云的功能整合进来,提供给团队的开发者。
我以为这种事情其实应该规范化、批量化,咱们应该给移动开发者提供一个更好的服务,将整个移动开发做为一个总体的服务。我想起2015年看到的某咨询机构调研中的一个片段,当时的体会并非特别深,但当我作完这个应用的时候,脑海里就想起了这个图。2015年中国移动开发者使用第三方服务工具最看重的因素,排名第一和第二的分别是丰富性和易用性。刚看到时也没有特别大的感觉,但2017年在进行应用的时候发现确实是这样。丰富性和易用性,是咱们移动开发者真正考虑的很重要的因素。
当咱们下定决心作移动开发平台的时候,首先咱们进行了用户调研,经过各类手段跟用户面对面的沟通。经过调查问卷,调研了移动开发者的诉求到底是什么。一轮调查下来,不停地抽象,最后总结出一句话:把精力放在核心业务上,提高效率。这是一个很是朴素的需求,但事实上咱们的现状很难知足这样的需求。好比作到一半时须要一个存储能力,常常就须要放下手头的事去调研一下市面上都提供了哪些存储服务,再把它集成进来。作到一半时须要一个推送服务,也要调研一下市面上推送服务的厂家,通过调研再把它肯定下来。特别是架构师,常常把精力花费在一些本应该很容易解决的事上。因此咱们认为移动开发者的核心诉求是把精力放在核心业务上、提高效率。让一些能够通用化的,相似于分析服务、推送服务、存储服务的这些服务由第三方厂家提供,由于这不是我核心的逻辑。
肯定了核心诉求后,咱们通过分析后认为移动开发平台应该从下面几个方面去设计。
说到架构师思惟,当时认为能够分两部分考虑这样的问题。第一部分就是服务,架构师是如何考虑服务的?一是易用,二是性能,三是可扩展,第二和部分是代码,代码的可读性、可维护性和可拓展性是我做为架构师必需要重点关注的几个问题。因此咱们的移动开发平台所提供的服务,必须是知足易用、可扩展和高性能的。咱们应该也能让架构师在代码层面,作到可读可维护可扩展。这是从架构师的角度去思考问题,咱们须要作到的一些事情。
既然咱们的思路已经肯定了,要怎么去作呢?咱们的产品一共分为控制台和SDK两个部分,一是控制台,控制台必须是统一的,全部的服务必须在同一个地方控制,这是没有任何疑问的。全部的服务必须在统一的地方去作控制和管理,集成也应该是统一的。SDK是移动开发者最最关注的一个点。当时思考把SDK分为三个方面,SDK的集成、SDK的初始化、SDK的使用,咱们从这三个象限来考虑整个用户的使用体验。SDK的部分咱们考虑了几种方式,首先咱们提出all in one的模式,也是按需打包的模式,这是国内厂家最多见的模式。但它们在初始化的时候是独立的,使用的时候也是独立的,这种方式很快就被我毙掉了,这种模式会存在比较多的问题,好比打包下载,手动集成,当我有版本升级的时候怎么处理?很麻烦。第二是当我须要一个新能力的时候怎么处理?是单独勾一个仍是把之前用的所有勾上下载呢?用户会有这样的困扰。这种体验,跟传统的体验方式可能会有一些优化,但我以为达不到个人预期。
第二种模式,统一配置,按需使用。如今咱们使用的也主要是这种方式,全部包的集成和使用都是用配置来实现的,集成是不须要任何代码,经过配置方式去作的。而后各自独立初始化,这点可能你们以为初始化跟以前仍是同样,但其实会有点不同的点。正常状况下是不须要初始化的,好比使用标准配置就不须要进行初始化。可是若是须要定制服务,好比说个人分析是多少秒上报一次或实时上报,仍是说一段时间整合在一块儿上报或达到必定的量上报,这是开发者根据他的须要去作独立配置的,这种状况就须要去作初始化,作不到零代码集成。你使用标准配置的状况下,你的使用和初始化集成都是零代码的,但当你须要作定制的时候可能就须要代码去作一些事情。
怎么能用更好的方式给移动开发者提供服务呢?这是我一直在思考的问题,有一天忽然想到像咱们这种不懂服务器的人都能独立搭建一个服务器,好比ngnix,tomcat,那是为何?是否是咱们的移动开发也能作到这样,集成和初始化其实都不须要代码去作参与?延着这条路去想,就想出了一种新的方式,零代码集成、基于配置。如今也正在向这方面去作,但愿能作到彻底的自动初始化。
首先集成跟之前同样,经过配置的方式去集成,零代码。二是初始化,刚才说对于标准状况能作到自动初始化的,但对于定制的服务须要代码,如今针对这种状况也是基于配置来作,配置完以后一下载就自动初始化了。这种状况下全部的集成和初始化所有用配置文件来作,真正作到零代码的集成。
从一个架构师的角度,我认为这样成本会降得特别特别低。由于全部的初始化和集成,都是经过配置文件来作。当有版本升级的时候,改一个配置就能够了。当我须要一个新的策略的时候,也是改一个配置就能够了。这种状况下无论作项目交接也好,或者对下面人培训也好,整个沟通的成本都特别低。
而后是统一的使用方式,这一部分咱们也但愿作到零代码,这个听起来好像不太可能,但实际上咱们已经在往这个方向努力。好比自定义事件上报功能,点击一个按纽后上报一条信息。正常使用的状况是在代码里加点击事件,加一行代码就上报了。如今是经过配置来作这样的事,配置点击什么按钮,上报什么事件,集成以后点击按钮以后自动上报一个新事件,经过配置的方式来作到自定义的上报或使用,零代码使用。
因此咱们但愿使用方式也能作到零代码,整个过程都作到零代码,经过配置去使用,这是咱们的目标和愿景。这样才能真正为移动开发者提供移动开发即服务的产品,之后移动开发者对于全部周边的事情,都不须要去关注了。只须要关注你们都能看懂的配置文件,之后的项目交接或者项目培训都很简单了,以后但愿能够作到这种全站的无代码集成使用。
咱们但愿提供一个一体化的闭环体验。上图是咱们即将推出的一些功能,好比分享和广告监测。咱们常常须要经过分享来扩大影响力或者拉来一些新的用户,正常的分享SDK只提供了分享功能,但咱们提供分享功能是但愿分享以后还能监测每个阶段,好比用户是否点击,让每个环节可追踪可优化。广告监测主要是由于如今获客成本愈来愈高,咱们也常常作一些广告拉一些新客户进来。但每个广告的效果其实很难作到精确追踪,咱们也但愿有一个广告监测的功能,帮助开发者监测每个广告的效果,帮助你们省钱。
第三是计算,第四是数据库。咱们但愿优化中国移动开发的方式,再也不和后台强耦合,直接经过云端去构建整个应用,从demo到上线、运行、上量,咱们的计算服务都是可用的,提供的是弹性的能力,如今能用上线以后也能用,数据库也是。咱们但愿经过这些产品打造云端一体化的产品闭环体验,从开始的计算、数据存储、文件存储到后面用户的分析、广告的监测,用户的推送和活跃的运营、支付,一切都在一个平台上能够作到。从研发、测试、发布、运维到运营,但愿咱们的移动开发平台能成为整个开发生态闭环的产品。
Q:刚才听到最终的方案是有一个控制台,经过一些配置,下一个包,集成到好比说移动应用里面,直接就能够实现你的无代码。但假设咱们在开发过程当中,或者说产品不断迭代中可能改需求了,好比某一个配置我想改了,但那个SDK已经集成到APP里面了,有什么方式能够去解决这个需求吗?
A:咱们在一开始设计的时候已经考虑到了,你可能在不一样的阶段,都会使用咱们的功能,甚至去优化咱们的一些功能。这种状况下怎么办?第一,咱们提供的是一个通用服务,你的需求可能变了,好比在推送的时候一开始须要对账号进行推送,以后须要对标签进行推送。这种变动不该该涉及到通用服务这一部分,咱们应该能适配大家的需求,大家的需求达不到,那是咱们本身作得不够。第二点,你的配置已经集成到服务中了,若是须要一些变动,修改配置文件就行了。咱们但愿在任何阶段任什么时候候使用咱们的服务,无论更改也好、从新使用也好,或是优化也好,咱们都应该用一个最便捷的方式去帮助你去作这样的事。
Q:是否是跟可视化埋点同样?
A:有点像,我只是举个例子,但愿后面用配置的方式去使用咱们每个服务,从开发到后面整个的使用所有用配置文件实现。
更多相关资料,请点击下方连接获取:
胡泽锐:移动开发即服务.pdf
问答
如何在云服务器已有的开发系统下搭建开发环境?
相关阅读
杨列昂:腾讯移动分析与服务架构
微服务架构云端应用
移动开发之css3实现背景几种渐变效果
此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1138312?fromSource=waitui
欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~