http://www.ox-holdings.com

大多数创业公司为了快速实现产品功能,重新设计的 API在 v3 中我们改进的重点是 SDK

摘要2016年6月份即时通讯云供应商LeanCloud的产品更新内容汇总,仅供参考。以下信息来自LeanCoud官方:6 月份最重大的改进在云引擎方面,云引擎开始支持 PHP这门世界上最好的语言,开发文档(网站托管和云函数)也已齐备。此外,我们计划开始测试 Java SDK 对云引擎的支持。在客户端,iOS ChatKit库也正式推出。ChatKit 是一个由 LeanCloud 官方推出、免费开源、自带 UI 的聊天组件,其底层聊天服务基于 LeanCloud 的 IM 实时通信服务 LeanMessage 而开发,支持 iOS 7+。它的最大特点是把聊天常用的一些功能与 UI 整合一起提供给开发者,帮助开发者快速集成 IM 服务,轻松实现聊天功能。同时它提供完全自由的授权协议,支持二次开发。iOS SDK 最新版本也发布了对 IPv6-Only 环境的支持。消息推送方面,我们很快会发布混合推送功能,支持小米、华为等第三方推送平台,提高 Android 手机在这些平台上的消息到达率,请留意我们的博客和微博通知。我们还发布了 LeanCloud iOS 应用。用户可以在手机上查看 LeanCloud 控制台中与应用相关的基本信息和统计数据,修改设置等等,欢迎下载和试用。更详细的汇总如下。网站及存储服务API 统计的慢查询统计增加了云引擎 hook 的调用统计,耗时较长的 hook 将在该菜单显示,用户可依此来进行优化。API 统计增加 HTTP 状态码和错误码统计,方便用户监控应用的健康状况。修复导入服务导入 Schema 失败的问题,感谢用户的反馈。增加429 错误码,提醒「超过流控限制」。加强检测 ACL 合法性。修复导出失败所调用的邮件模板。离线分析发布了新的结果导出的方案,增强稳定性。实时通信及短信美国节点支持敏感词过滤。完成了混合推送功能,支持小米、华为等第三方推送平台,发布时间请留意我们的博客和微博。lastMessage增加 from 等信息。iOS 推送历史记录增加成功计数字段。短信签名支持默认签名设置。改进短信流控机制,常见的参数和权限错误将不会增加发送次数。云引擎正式发布 PHP 语言支持及相关文档:网站托管开发指南和云函数开发指南。node-js-getting-started更新全局异常处理方式,并增加默认的 15 秒请求超时。上线新的日志收集服务,更加实时和稳定。增强 Hook 安全性,强制校验签名。命令行工具发布了 1.3 版本(Hook 签名和其他 Bug 修复)以及一些细节修改等。LeanEngine Node SDK发布 1.1 版本,强制认证所有 Hook 签名。我们很快会发布 Java SDK 测试版,以及对云引擎的支持,敬请留意我们的博客和微博。iOS SDKiOS SDK 最重要的改进是兼容 IPv6-only 环境,这是苹果官方的最新要求。最新版本是 3.3.4,其他改进如下:修复可变集合在遍历时被修改导致崩溃的问题。修复 protobuf 与用户使用的 protobuf 冲突的问题。修复当有未读消息时,出现「断开—重连」死循环的问题。修复文件类型消息中,文件属性偶尔丢失的问题。修复上传文件时,创建脏数据的问题。修复使用美国节点时,REST API 指向国内节点的问题。修复 protobuf 与用户使用的库冲突的问题。修复云引擎的请求日志无法打印的问题。注意:为了兼容 IPv6-only 网络环境,3.3.3 版本重写了网络层,使得静态库最低支持 iOS 7,后续版本不再支持 iOS 6。请将 iOS 应用的 deployment target 设置为 7.0 及以上。Android SDKAndroid SDK 主要改进集中在 IM SDK 的重连方面,增强稳定性:修复实时通讯网络重连时有可能出现的 NPE 问题。开发者可以自定义日志输出。修复AVIMConversation的attribute会覆盖更新的问题。修复创建会话时会报 4301 的问题。修复实时通讯断网后不能及时重连问题。修改AVIMConversation的setAttribute函数为增量更新,避免覆盖其他已经存在的属性。JavaScript SDK防止 SDK 覆盖全局变量 AV。Object.add、Object.addUnique、Object.remove等方法支持传入非数组类型的 value 参数。修复路由缓存异常时,不再出现多次 410 错误请求。美国节点上传到 S3 改为直接上传,不再通过服务器中转。增加AV.User.associateWithAuthData()方法。修复AV.User.signUpOrlogInWithAuthData()省略 callback 参数会报异常的问题。修复 React Native 中import leancloud-storage时抛出「cannot read property "APIServerURL" for undefined」异常的问题。JavaScript 实时通信和推送 SDK发布leancloud-realtime-typed-messages。改进ConversationQuery对lastMessage的支持,包含更完整的信息。PHP SDK支持云引擎,及 Slim 框架的中间件。云引擎 Node.js SDK详情参考Change Log,主要改进如下:添加对X-LC-UA头的跨域支持。升级 JavaScript SDK 到 leancloud-storage 1.0.0,可能存在细微不兼容。强制检查 Class Hook、User Hook、实时通讯 Hook 的签名信息,确保请求来自 LeanCloud(签名错误的请求会打印一条日志)。使用AV.Cloud.run运行云函数时,被运行的云函数将会得到和 HTTP 调用时结构一致的 request 参数。原文链接:

我们作为开发者去集成一个 Lib (也可以叫轮子、SDK、下文统一叫 Lib)时,我们会发现我们遇到的 Block, 按照功能的角度划分,其实可以分为这几种:

摘要即时通讯云 LeanCloud 下一代 JavaScript 即时通讯 SDK 的 3.0 beta 版本发布了!以下为来自即时通讯云 LeanCloud官方的消息:今天我们高兴地宣布 LeanCloud 下一代 JavaScript 实时通讯 SDK 的 3.0 beta 版本发布了!我们不仅为这一新版本(以下简称 v3)带来了性能提升,还加入了很多令人激动的新功能和改进,包括单点登录、未读消息通知、按条件查询对话、自动更新的对话和消息状态、自定义消息类型、更好的断线重连机制,以及重新设计的 API 等等。重新设计的 API在 v3 中我们改进的重点是 SDK 的易用性,为此我们设计了全新的 API。除了一些细小的命名与特性的区别,JavaScript SDK v3 的 API 与其他平台 SDK 的 API 已经统一。随着平台差异性的减少,开发者在为各平台应用设计与实现阶段所投入的工作量也会降低。相较于 v2,v3 API 对易用性的改进体现在以下几个方面:自动更新的对话和消息状态Promise 与异常处理新的事件模型可扩展的消息类型系统自动更新的状态v2 中封装了各种操作指令与事件,但是在真实的项目中,你仍然需要额外维护一些状态,这些状态包括了:对话:成员列表、未读消息数、最后消息时间、最后消息(如果有)消息:发送状态v3 中这些状态都会由 SDK 自动更新。这将大大简化业务逻辑的代码,比如当你使用类 MV* 框架时,你可以直接将这些实例与 View 层绑定,就像下面这个使用 Angular 展示消息列表的例子一样:<ul class="list-group"> <li class="list-group-item" ng-repeat="conversation in conversations"> <span class="badge">{{conversation.unreadMessagesCount}}Live demo: 与异常处理所有的异步 API 将返回 Promise 实例。相比于 v2 中回调的方式,Promise 将会避免回调嵌套过深的问题,同时解决了 v2 异步操作异常被 SDK 隐藏的问题。// 使用 Promise 以链式方法登录、创建会话、发送消息realtime .createIMClient('three-bodies') .then(tom => tom.createConversation({ member: ['the-earth'] })) .then(conversation => conversation.send(new TextMessage('不要回答!')) .then(message => { /* 成功 */ }) .catch(error => { /* 处理异常 */ });新的事件模型v3 中的事件 API 使用的依然是 Node.js 中EventEmitter的设计。与 v2 中所有事件都在RealtimeObject上派发不同,v3 中不同类型的事件会在不同的层面派发:网络状态相关的事件在Realtime实例上派发。某个客户端相关的事件在该IMClient实例上派发。某个对话相关的事件在该Conversation实例上派发,同时也会在其隶属的IMClient实例上派发。详细的事件列表与描述,请参阅API 文档的 Events 部分。可扩展的消息类型系统自定义一个消息类型从来没有像现在这么简单:@AV.messageType(3)@AV.messageField('foo')class CustomMessage extends AV.TypedMessage { constructor(foo) { super(); this.foo = foo; }}Live demo: TypeScript 或者 Babel 才能运行。这里还有个ES5 的例子。同时,基于 LeanCloud 存储服务,SDK 还提供了常见的富媒体消息类型(文件、图片、视频、音频、位置)。为了避免实时通讯 SDK 与存储 SDK 的耦合,这些富媒体消息类型是一个独立发布的 package,关于富媒体消息的详细内容请参阅《JavaScript 实时通信开发指南 – 富媒体消息》。新增功能JavaScript 的 API 与其他平台 SDK 的 API 的统一意味着以下功能已得到支持:单点登录「未读消息通知」模式对话条件查询构造器(ConversationQuery)断线重连机制SDK 的连接层也被重新设计,断线重连机制变得更加可靠,存在于 v2 中的 crash 与漏报已被消除。除了disconnect与reconnect,v3 中增加了两个新事件schedule与retry,通过它们你就可以了解到 SDK 在断线重连的过程中正在做什么,进而向用户给出更友好的提示。关于断线重连机制的细节请参阅《JavaScript 实时通信开发指南 – 网络状态响应》。性能提升v3 还包含了一些底层上的改进:二进制协议 ProtoBuf 的引入使传输消息时的流量消耗减少了 70%。多个 Client 实例共享一个长连接的措施减少了 SDK 消耗的资源。从 v2 升级v3 API 不兼容 v2。对于正在使用 v2 的用户,尽管 v2 中所有的 API 在 v3 中有对应的实现(参见《JavaScript 实时通信 SDK v3 迁移指南》),我们仍然需要提醒,迁移到 v3 意味着一定的迁移成本。此外,必须指出的是,v3 去掉了对 IE10 及以前版本的支持,如果需要兼容这部分运行环境,请继续使用 v2。在 v3 正式发布后,v2 依然会得到至少 6 个月的安全更新。LeanCloud官网

MaxLeap云代码的实现

如何提供基础服务和框架来方便用户开发?由于用户的开发环境和擅长的开发语言各种各样,比如使用Java,使用NodeJs,使用Python,使用JavaScript的等等,我们提供对应的各个开发语言的基础云代码SDK,丰富用户的选择,降低用户开发门槛和成本,这样云代码在CloudCode SDK基础上开发就会非常便捷,这些CloudCode SDK和MBaaS对外提供的移动SDK不同的地方在于它并不在移动设备上运行,而是在云端运行。也就是说开发者先要选择自己喜欢的云代码SDK,比如我很擅长JAVA,所以我会选择cloud-code-java-sdk来开发我的云代码,同时云代码SDK还要提供本地开发测试框架,总不能让用户线上开发调试吧,本地开发本地调试完成后再部署到云端。当然为了开发者更快的开始,MaxLeap同时提供了Demo和Quick-Start项目来让开发者更快接触云代码。

开发者在使用云代码部署到云端后该如何访问云代码?MaxLeap的云代码是通过基础的REST API来访问,云代码SDK负责提供Http服务对外暴露REST API,因为基于Http可以很好的兼容不同开发语言,实现跨平台访问,当然这些API不会直接暴露在用户面前,用户只有通过调用MBaaS的云代码服务API才能间接访问。

图片 1MaxLeap-cloud-code-2

不同开发语言的基础云代码SDK其实都具有相同的功能,最重要的是数据存储服务,CloudCode SDK通过封装一系列REST API来让开发者很便捷的访问基础MBaaS服务。除此之外还要提供云函数、后台任务、Hook操作、消息推送、日志、安全访问、分布式计数器、分布式锁等功能。

图片 2MaxLeap-cloud-code-3

  • 数据存储服务

    通过SDK可以很方便的使用MaxLeap的存储服务,例如对象的CRUD操作,同时集成了手机行业主流的金币系统。

  • 云函数

    运行在MaxLeap云端的函数,定义好云函数后可以通过REST API方式来访问,这个API是同步的。同时云函数提供白名单功能,方便被其他第三方网络服务调用。

  • 后台任务

    同样是运行在MaxLeap云端的函数,对于长期运行的任务而言,后台任务非常有用,例如与响应时间较长的外部网站集成或分批发送推送通知。如果您在运行云函数时经常遇到超时错误,则可以考虑使用后台任务,同时当您部署云代码后,可通过后台界面进行计划任务,你可以计划一次性任务或者周期性任务,这不但可以方便管理你的后台任务,同时也能清楚的追踪你的任务状态。

  • Hook操作

    Hook用于在对 Cloud Data 进行任何操作时(包括新建,删除及修改)执行特定的操作。例如,我们在用户注册成功之前,可以通过beforeCreate Hook,来检查其是否重名。也可以在其注册成功之后,通过afterCreate Hook,向其发送一条欢迎信息。Hook能很好地实现与数据操作相关的业务逻辑,它的优势在于,所有的业务在云端实现,而且被不同的应用/平台共享。

  • 消息推送

    在移动应用中,为每个客户端用户推送系统消息或定制消息必不可少,通过该功能开发者可以很便捷的将消息推送到所有或指定设备上。

  • 分布式计数器/锁

    云代码在云端是一个分布式应用,提供计数器、锁相关的功能以便多个实例之间可以共享同一份数据。

  • 日志

    提供Logging功能,以便您能记录Function,Hook或者Job在运行过程中出现的信息。

  • 命令行工具

    可以方便用户云代码项目的上传,部署,停止及版本管理。

云代码作为在云端部署的代码,MaxLeap是如何管理它们的呢?在这项重中之重方面我们可能会遇到下面这些问题:

  • 每个开发者的环境不同,操作系统也不相同,如何降低搭建各种环境的成本以及降低对操作系统的依赖、降低硬件要求和应用环境之间耦合度同时降低虚拟化消耗?
  • 管理的应用可能成千上万,但是服务器资源就那么多,该如何对每个应用实现虚拟化来整合应用和服务器降低成本?
  • 每个应用的重要程度也不同,有重度用户需要高可用高性能的服务,有低度用户可能一天也不会有几个请求,资源该如何分配?
  • 用户的代码部署在云端,如何保证用户的应用代码安全?
  • 用户代码服务如何做到高可用,出现故障该如何转移,如何做到服务不间断,新发布的代码出现异常该如何回滚?

基于上面遇到的问题,我们把用户的云代码作为一个松耦合的单个服务,也就是现在流行的微服务架构,通过docker来实现对微服务容器化,因为docker本身就是源于Paas,在MBaaS系统也非常适用,我们不用为每个云代码应用开启一个虚拟机来降低硬件要求和应用环境之间的耦合度,这能大大降低虚拟化消耗,降低成本,而且docker还能为应用提供一个从开发到部署上线都一致的环境,非常便于管理代码的流水线,让我们可以对云代码从开发到发布部署简单可靠的控制。同时Docker隔离应用的能力非常适用于用户的云代码,能让我们比通过虚拟机更好的整合云代码应用和服务器,基于docker,我们能为每个不同的云代码应用创建隔离的环境,并为他们分配指定的服务端口、内存资源等来隔离应用。

图片 3MaxLeap-cloud-code-4

在我们看来用户每次的代码发布都是一个构建镜像并推送镜像到私服上的过程,每次代码部署都是从私服上获取镜像并启动一个容器的过程,每次停止部署都是一个容器卸载的过程,每次升级代码都是一个重新生成不同标签的应用镜像的过程。用户每次上传发布云代码都需要为它指定一个版本,不同的版本会生成不同的镜像标签,可以同时部署多个版本,但我们做了限制,最多只能同时发布2个版本,我们称之为灰度发布,这是为了能让你的代码能平滑过渡升级,在灰度发布过程中用户需要设置版本负载均衡比重,以做到服务不间断,基于版本控制你可以回滚你的代码,你可以选择你发布过的任意版本进行部署,这真的非常方便。

图片 4MaxLeap-cloud-code-5

对于用户的云代码镜像、启动的容器、部署的策略以及容器所在的宿主机我们会有一个专门的CloudCode-Manager服务来进行管理,我们称这个服务为hydra。它希腊神话中的九头蛇,传说它拥有九颗头,其中一颗头要是被斩断,立刻又会生出两颗头来,在这里我们寓意用户的云代码可以达到高可用,如果用户部署的任何一个云代码实例出现故障达到服务不用,系统会自动在其他宿主机上重新启动一个相同实例。为了达到高可用、故障转移,云代码SDK需要提供心跳接口,在用户部署云代码后每隔一段时间hydra都会做心跳检查,检查失败重试一定次数后便认为该服务已经失效,我们会在另一台宿主机上重新部署一个和故障实例一模一样的实例,然后再卸载故障实例,如果卸载故障实例失败,比如故障实例所在的宿主机发生宕机,那么该故障实例会永久成为一个孤岛实例等待被强制回收。如果应用的云代码被重度使用超过负荷可以随时扩容,或者通过缩容来较少成本,通过任意扩容和缩容也就是通过部署容器任意实例数量来真正达到高可用,最常用的使用场景是商家在做活动时有访问高峰可以快速增加实例资源来减少压力,日常时则减少实例以低成本运行。

通过docker来整合应用和服务器,一台宿主机上可能部署了上百个容器应用,那应用是如何分发的呢,在云代码SDK中我们提供了REST服务,比如云函数、后台任务、心跳等API,所有应用的这些REST服务在启动后都是监听在容器的8080端口,容器需要允许外部访问就必须要映射容器端口到宿主机,所以在应用分发过程中,宿主机的端口管理非常必要,我们使用mysql来存储所有宿主机的信息,包括所有提供给云代码容器使用的可用端口,通过乐观锁来保证端口的并发分配,启动任意云代码容器时都会分配一个映射端口给容器,同时在zookeeper中同步应用的云代码服务地址提供给MBaaS云代码服务使用。这个过程使用事务来保证容器启动和数据库信息的一致性,同时使用zookeeper分布式锁来防止同一个应用被同时操作。云代码服务的REST层实时监控zookeeper中云容器访问地址信息变更,通过hosting形式提供路由功能,通过负载均衡算法选择可用地址来访问宿主机上的云代码达到分流效果,这样就能做到简单有效的应用分发。

上面我们说到云代码容器通过端口映射来允许外部访问,但考虑到用户的代码安全,并不是任何机器都可以访问云代码容器,这就需要一个网络安全体系来对用户的访问和网络进行限制。在网络隔离安全方面,我们在Docker的标准网络桥接接口docker0上启用内核防火墙iptables规则来限制Docker容器的源IP地址范围与外界通讯,所有的云代码宿主机只能由maxleap和hydra服务所在的机器访问,而云代码访问maxleap内部服务需要通过反向代理实现。

图片 5MaxLeap-cloud-code-6

在宿主机和容器之间安全隔离方面,通过访问控制的安全策略,使用selinux配置Linux内核安全模块,从而实现强制性的访问控制用以将进程约束在一套有限的系统资源或权限中。在容器与容器之间通过cgroups防止通过耗尽系统资源引发拒绝服务攻击,比如限制容器的CPU使用、内存使用、存储使用。

使用微服务容器化云代码能为应用开发者省去部署和维护方面的负担,但代价是一定程度上减弱了线上环境的透明性,为了能对线上代码的错误和性能特征有更多了解以便优化自己的代码或者扩容、缩容来达到水平扩展,我们需要给很好的监控云代码。

图片 6MaxLeap-cloud-code-7

1、首先是日志信息的收集,云代码的系统日志、用户的日志这些都需要收集起来提供给用户查看,MaxLeap的云代码使用主流的Logstash+elasticsearch来完成日志收集工作,我们会在每台宿主机上启动一个logstash-forwarder服务作为shipper来收集指定的云代码日志,Logstash汇聚日志后转发到ES存储。

2、其次是对容器资源的监控,Docker容器通过namespace做资源隔离,通过cgroup来做资源限制,我们有个专门的docker-monitor服务来监控所有宿主机上云代码容器的指标,它会周期性获取已注册的宿主机上所有云代码容器的cgroup stats,收集指标包括CPU MEM IO等,然后将数据PUSH到ES里。

3、最后是展示给用户,MaxLeap通过后台界面的方式展示出所有容器实例的性能和状态,还有部署的云代码版本所有的日志信息,用户可以很直观的了解到自己的云代码有什么错误的信息,在什么地方有瓶颈,该在哪方面优化代码。而我们内部会通过Kibana来展示,并通过Nagios来报警。

结语

国内很多PaaS里提供了大量的为移动应用服务的服务端功能,在这里可能很多人对BaaS和PaaS区分已经不是非常明确,但是这并不影响我们在自己的移动应用中去选择它。当然免费的服务毕竟人人都想要,但是如果业务稳定增加后,请别忘了及时为服务买单!

我们常常见到 CompletionHandler 被用到了第一种场景,而第一种场景“Block 执行”命名为 Callback 则更合适。

MaxLeap云代码的展望

看到这我们发现MaxLeap的云代码、云容器的架构基本都是围绕docker容器这个生态圈来实现的,那么如何更好的维护和优化这个生态圈将是我们将来的重中之重,在这里我们给出一些我们未来一段时间将要实现和优化的关键信息:

图片 7MaxLeap-cloud-code-8

  • 所有容器资源通过Mesos申请
  • 所有容器生命周期通过Marathon管理
  • 更智能的资源分配机制,更智能的压力监控实现自动扩容/缩容
  • 用户云代码托管方式支持git等第三方仓库
  • 用户上传云代码、云容器支持增量上传来减少等待时间
  • 更多容器安全方面的优化
  • 更多云代码/容器操作的Dev&Ops自动化
  • 更多基建架构方面的调整优化

MaxLeap更强大更优秀的云代码/云容器服务敬请大家期待。

相关阅读:移动云平台的基础架构之旅-云应用篇

作者系力谱宿云 LeapCloud 团队_云服务研发成员:David Young力谱宿云首发地址:

市场上BaaS种类也不少,只要你能想到的,基本都有公司提供了。而大部分ToB的产品都是收费的,要从这么多服务中,找出免费的服务加入到自己的App中,需要一定时间。

比如:

云代码的由来

随着MBaaS的发展,取代移动企业应用程序平台的趋势也越来越明显。MBaaS系统为了让企业能方便快捷的开发自己移动应用程序,提供了诸多移动客户端支持,有最通用的REST API,也有方便移动开发者的软件开发工具包,还有一定程度的监控和分析服务提供。而对于相对比较复杂的应用程序,开发者有时不想也不必在移动设备上运行很复杂或很费时或无法实现的业务逻辑,这种需求催生了云代码的产生。

图片 8MaxLeap-Cloud-Code-1

社交分享

  • 友盟+ / U-Share: 帮助应用或游戏快速具备国内外多平台分享、第三方登录功能,SDK包最小,集成成本最低,平台覆盖最全,并基于友盟+大数据,提供最为权威、实时的用户画像、分享回流等数据分析,助力产品开发与推广。 http://mobile.umeng.com/social
  • Mob / ShareSDK: 开发者可享受Mob提供的免费技术服务,短信或语音消息费用全免,不限条数,不限全球运营商。 http://sharesdk.mob.com/
  • MaxLeap / 社交分享: MaxLeap 社交分享组件集成目前主流社交平台,可以让您的应用快速拥有主流社交平台分享入口。 https://maxleap.cn/s/web/zh_cn/devcenter.html

示意图如下:

云代码的愿景

想象一下,如果你想要少量结果信息,但却必须要向设备发送大量对象列表,或者调用大量REST API才能完成此项工作时,这种操作显然会消耗你大量的带宽和用户流量。

想象一下,如果你想要设备周期性定时完成某个任务或者想在后台一直运行某个任务(比如资源回收垃圾清理),这种操作显然很不可靠,一方面用户可能会随时关闭设备上的应用,另一方面在后台一直运行某个任务显然也会耗费用户设备电量等资源,得不偿失。

想象一下,当你需要调用第三方平台API时需要对方回调时比如完成某个支付操作,服务提供商在支付成功后执行回调,你需要根据回调结果完成后续操作比如同步记录到数据库中,这种操作在移动应用在没有自己的后端服务器时也很难完成。

想象一下,你的某个App应用有iOS,Android,JavaScript等多个设备平台版本,当你新增一项功能,同一套业务逻辑需要在所有平台做同步开发,当你修改一项功能,同样需要在所有设备平台做新版本发布更新操作,如果产品迭代很迅速那这种频繁的操作显然会大大增加移动开发的成本和效率,但效果却可能不见得很好。

想象一下,当某个用户注册了你的应用,你需要对该用户增加一些信息来用于统计,或者用户购买了应用里的某个商品,你需要收集除订单外额外的信息,这类在用户触发某些特定操作时会自动额外产生的逻辑,这些Hook操作并不适用在移动端编写。

伴随移动开发,类似上面的情况多有发生,此时MBaaS系统提供的云代码功能就是为移动应用量身定做的解决类似上面问题的方案,云代码的愿景就是方便移动开发者彻底摆脱服务器,随心所欲的开发各种移动应用程序。

MaxLeap作为一款优秀的MBaaS平台系统,其云代码的功能如何,是如何实现的,又有哪些加分项,接下来将为大家一一揭晓。

兼容测试

  • Testin / 兼容测试(免费版): 快速在大量真机上验证App兼容性,自动完成安装/启动/运行/卸载操作,收集过程中的出错信息、截图、日志等,提供专业的测试报告,帮助定位和解决问题。 http://www.testin.cn/product/compatible
/*!* @brief The block to execute with the users' information for the userIds. Always execute this block at some point when fetching profiles completes on main thread. Specify users' information how you want ChatKit to show.* @attention If you fetch users fails, you should reture nil, meanwhile, give the error reason.*/typedef void(^LCCKFetchProfilesCompletionHandler)(NSArray<id<LCCKUserDelegate>> *users, NSError *error);/*!* @brief When LeanCloudChatKit wants to fetch profiles, this block will be invoked.* @param userIds User ids* @param completionHandler The block to execute with the users' information for the userIds. Always execute this block at some point during your implementation of this method on main thread. Specify users' information how you want ChatKit to show.*/typedef void(^LCCKFetchProfilesBlock)(NSArray<NSString *> *userIds, LCCKFetchProfilesCompletionHandler completionHandler);@property (nonatomic, copy) LCCKFetchProfilesBlock fetchProfilesBlock;/*!* @brief Add the ablitity to fetch profiles.* @attention You must get peer information by peer id with a synchronous implementation.* If implemeted, this block will be invoked automatically by LeanCloudChatKit for fetching peer profile.*/- setFetchProfilesBlock:(LCCKFetchProfilesBlock)fetchProfilesBlock;

MaxLeap云代码的衍生-云容器

有客户看到这里说:你说了那么多,我就是不想用你的云代码SDK来写,熟悉你的SDK都要花费好长时间,用看官方文档头都大了,我就想用关系型数据库,我就是想用我自己写的后端服务或者之前公司已经写好的程序,咋办?嘿,MBaaS系统的愿景是让用户完全摆脱服务器,但遇到这种已经有自己服务器和数据库并大量线上使用的客户让他们选择MBaaS系统便得仔细考量是否值得了。考量到这类需求,MaxLeap在云代码的基础上衍生出了云容器的概念,它是可以帮助用户部署及运维其后端应用程序的代码托管服务,用户只需要提供服务端的业务逻辑,包括静态网站或者动态应用程序,而服务端的高可用、多实例、负载均衡、不中断服务的平滑升级等都由云容器提供支持。没错,云代码有的功能它都可以有,云代码没有的功能它也有,一个是数据源功能,很多企业客户内部使用的数据库都是mysql这种关系型数据库,让他们一下切换到MBaaS上的NoSql数据库会很不放心,特别对事务要求很严格的业务逻辑,人家可能一看到你的数据库是使用Nosql就放弃了,能很方便的迁移也不行,就是这么直接,云容器的数据源功能则会帮让他们放下很大一部分顾虑,它可以让用户使用并管理自己的关系型数据库,而另一个二级域名功能可以让用户在部署云容器后可以直接访问他的云服务。作为云代码的升级版,云容器的底层架构都是基于云代码的实现,这完全降低了用户Dev&Ops上的难度。由于篇幅原因,更多云容器相关的信息本篇文章不再赘述了。

渠道分析

  • DataEye / 广告效果监测: 针对各应用渠道进行效果追踪,定位投放渠道,实时反馈效果数据。最大程度发挥广告投放价值。 https://www.dataeye.com/

具体实现如下:

MaxLeap云代码的功能

有了云代码的背景愿景,那云代码需要提供的基础功能就很显然了

  • 首先得提供基础服务和框架,方便用户开发云代码
  • 其次得提供代码托管,能很方便的让用户快速部署代码到云端运行
  • 最后提供日志和相关监控工具,能对线上代码的错误及性能特征有更多了解,以便优化自己的程序

消息推送

  • MaxLeap / 推送营销: Maxleap 为应用提供营销活动和信息推送功能,支持推送消息和应用内消息两种模式。 https://maxleap.cn/s/web/zh_cn/devcenter.html
  • 科大讯飞 / 讯推: 讯推(XPush)是讯飞开放平台向开发者提供的移动App消息推送服务。基本原理是客户端通过与云端建立的长连接,监听从云端下发的消息,让紧急、重要的消息可以及时通知到您的APP用户。 http://www.xfyun.cn/
  • 极光 / 推送(免费版): 通过极光推送服务,主动及时地向您的用户发起交互,向其发送聊天消息、日程提醒、活动预告、进度提示、动态更新等。 https://www.jiguang.cn/push
  • 个推 / 个推(免费版): 通过个推的技术,APP可主动向其用户推送各类消息,结合精准的用户画像分析,给合适的用户在合适的场景下推送合适的内容,大幅度提升消息点击率、用户活跃度和留存率。 http://www.igetui.com/cn/getui.html

文档 对 completionHandler 的注释是这样的:

验证码

NSURLSession 中,下面的函数将 “callback” 命名为了 “completionHandler”:

短信验证码

  • Mob / 短信验证码: 开发者可享受Mob提供的免费技术服务,短信或语音消息费用全免,不限条数,不限全球运营商。 http://sms.mob.com/

郑重声明:本文版权归新匍京a奥门-最全网站手机版app官方下载所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。