作者归档:Junwen Feng

Java Unified SDK 版本升级,老版本 Android SDK 和云引擎 SDK 将于 9 月底停止维护

我们在 2018 年 9 月推出了 Java Unified SDK,该 SDK 可以在 Java、Android 和 LeanCloud 云引擎三种环境下运行,支持数据存储、LiveQuery、即时通讯、云函数、推送和混合推送等全部核心功能,并且开放所有源代码(代码见这里)。本周我们对 Java Unified SDK 进行了小版升级,当前最新版本为 5.0.13,老版本 Android SDK 和云引擎 SDK 则将于 2019 年 9 月底完全停止维护。

由于不同平台的 SDK 版本众多,这里我们给大家梳理一下 Android/Java SDK 的版本分布以及将来的持续开发计划,帮助开发者快速升级或者选择到合适的 SDK 版本。

老 Android SDK

LeanCloud 服务上线之初,就推出了原生的 Android SDK,演变至今,因为功能的不同,老的 Android SDK 已经分为了多个 library:

  • 核心 SDK (cn.leancloud.android:avoscloud-sdk)
  • 推送和 RTM SDK (cn.leancloud.android:avoscloud-push)
  • 混合推送 SDK (cn.leancloud.android:avoscloud-mixpush)
  • FCM 推送 SDK (cn.leancloud.android:avoscloud-fcm)
  • 应用内搜索插件 (cn.leancloud.android:avoscloud-search)
  • 用户反馈插件 (cn.leancloud.android:avoscloud-feedback)

各个 library 依赖关系如下:

cn.leancloud.android:avoscloud-feedback/avoscloud-search
 +- cn.leancloud.android:avoscloud-sdk

cn.leancloud.android:avoscloud-fcm/avoscloud-mixpush
 +- cn.leancloud.android:avoscloud-push

cn.leancloud.android:avoscloud-push
 +- org.java-websocket:Java-WebSocket:1.3.9
 +- com.google.protobuf:protobuf-java:3.4.0
 +- cn.leancloud.android:avoscloud-sdk
    +- com.squareup.okhttp3:okhttp:3.8.1
    +- com.alibaba:fastjson:1.2.37

上面这些库都已经发布到了 Maven Central Repo,当前最新版本为 4.7.12,他们最终都会被新的 Java Unified SDK 所取代。

老版本云引擎 SDK

为了支持云引擎的功能,也因为 Android SDK 与 OS 绑定过于紧密,所以我们推出第一版云引擎 SDK 的时候,重新实现了 LeanCloud 核心 SDK 的功能,形成了云引擎运行环境使用的一套专用 SDK:leanengine-java-sdk(group: cn.leancloud, artifactId: leanengine),最新版本为:0.3.3。leanengine-java-sdk 的主要依赖如下:

cn.leancloud:leanengine
 +- cn.leancloud:java-sdk (LeanCloud Java Runtime SDK)
 |  +- cn.leancloud:fastjson-leancloud(*)
 |  +- org.json:json
 |  +- cn.leancloud:okhttp-leancloud(*)
 |  |  \- cn.leancloud:okio-leancloud(*)
 |  +- cn.leancloud:leancloud-common (LeanCloud 底层核心 SDK)
 |  +- cn.leancloud:android-stub (LeanCloud 模拟的 Android OS 接口层)
 |  +- org.apache.httpcomponents:httpcore
 |  \- org.apache.httpcomponents:httpclient
 +- javax.servlet:javax.servlet-api

基于 Java 运行时的云引擎项目,都需要依赖 leanengine-java-sdk(详见模版项目:java-war-getting-started)。

云引擎 SDK 是完全独立的 codebase,并且还依赖于几个 LeanCloud 自己 fork 的、版本较老且已不再维护的基础 library:

  • cn.leancloud:fastjson-leancloud
  • cn.leancloud:okhttp-leancloud
  • cn.leancloud:okio-leancloud

与 Android SDK 一样,云引擎 SDK 也会被新的 Java Unified SDK 所取代。

Java Unified SDK

为了降低维护复杂度,统一 Android / Java SE 运行环境同样接口的行为,我们在 2018 年 9 月推出了 Java Unified SDK,希望用一套代码,来支持多个平台,降低内部维护难度的同时,也可以较好地保证不同平台上接口和功能的一致性。

新版 Unified SDK 发布之后,经过了多轮迭代,目前已经稳定并且被发布到了 Maven Central Repository

新的 RxJava 风格 API

老版本 SDK 所有的网络请求都是通过 Callback 方式实现的,在实现多轮前后衔接的业务逻辑时会导致代码嵌套层级过多,影响阅读,同时在 Java 开发环境下这种异步的方式也不太友好。为此,Java Unified SDK 的存储接口完全基于 RxJava 来构建(同时也兼容老的 Callback 方式),通过函数式编程风格的改变,给业务开发带来更多便利。

新 SDK 层次与依赖

Java Unified SDK 主要包含以下几个 library,其层次结构以及平台对应关系如下(完整列表见这里):

  • 基础包(可以在纯 Java 环境下调用)
    • storage-core:包含所有数据存储的功能
    • realtime-core:部分依赖 storage-core library,实现了 LiveQuery 以及即时通讯功能
  • 云引擎使用的包
    • engine-core:是 LeanCloud 云引擎项目需要依赖的包。
  • Android 特有的包
    • storage-android:是 storage-core 在 Android 平台的定制化实现,接口与 storage-core 完全相同。
    • realtime-android:是 realtime-core 在 Android 平台的定制化实现,并且增加 Android 推送相关接口。
    • mixpush-android:是 LeanCloud 混合推送的 library,支持华为、小米、魅族的官方推送。
    • leancloud-fcm:是 Firebase Cloud Messaging 的封装 library,供美国节点的 app 使用推送服务。

如何使用新 SDK

获取 SDK

获取 SDK 有多种方式,较为推荐的方式是通过包依赖管理工具下载最新版本。具体可参考文档:获取 SDK

Android 开发环境 Sample

云引擎 Sample

在公开的云引擎模版项目上,我们新建了一个分支,用来完成 Java Unified SDK 的集成,具体可以参考代码 java-war-getting-started(v5.x 分支)

LeanCloud 将逐步下线移动统计服务的通知

移动统计服务和数据存储服务一样是 LeanCloud 最早上线的产品。在大多数人还没有听说过「Backend as a Service」,「Serverless」这个名词还没被发明的时候,很多用户因为移动统计这样熟悉的功能开始了解和使用 LeanCloud,并成为多年的深度用户。

在最近一段时间,我们除了推出 Play 游戏后端服务这样的全新产品,并进一步加强在海外市场的扩展外,也在对现有的后端架构和产品线进行梳理。LeanCloud 的几乎所有服务都专注于帮助用户更快、更好、更可靠地实现产品功能,面向的目标人群都是开发者。而移动统计服务是产品运营的辅助工具,主要目标用户是运营人员,我们曾多次收到用户建议,希望把移动统计的访问权限和其他服务隔离开,这都说明它和其他服务之间的协同性是比较少的。同时无论是在国内还是国外,有不少公司专注于开发统计工具,也有不错的开源方案,可以说用户有很多选择,我们在这方面提供的价值是相对较低的。

每个子产品都需要在开发、运维、技术支持、硬件等各方面投入资源,为了能集中资源以更快的节奏改进我们的核心产品,我们权衡再三,决定在未来的一段时间里将移动统计功能逐步下线。

移动统计服务我们一直免费提供,目前还有很多活跃应用在使用。我们知道对很多用户而言这一改变会带来不便,所以会尽可能减少其影响。我们计划以未来三个月为过渡期,让使用它的产品可以相对平滑地切换到其他方案。

具体的过渡方案如下:

  1. 在 2019 年 1 月 17 号之前,统计服务会正常运行;
  2. 2019 年 1 月 17 号之后,我们会停止接收客户端上报的数据,但是老的统计数据还可以在控制台看到,并且会继续开放 REST API 供开发者获取这些数据;
  3. 在 2019 年 2 月 27 号之后,我们会停止老的数据展示以及 REST API 下载。不过考虑到春节的影响,我们也会为有需要的用户延长保存一段时间,请提前与我们联系;

感谢您一直以来对 LeanCloud 的信任和支持。如果您有我们没考虑到的需求,请随时通过 Email(support@leancloud.rocks)或工单和我们联系。

Android SDK 发布 4.7.7 版本,完全兼容 Android P

相信很多朋友都非常关注谷歌新推出来的 Android Pie 系统,在这一版本中谷歌加入了很多新的功能和 API,但是对我们开发者影响最大的可能是其完全取消了 Apache HTTP 的支持。

虽然这是一个早在 Android 6.0 即引入的变更(详见这里:取消支持 Apache HTTP 客户端),但彼时我们还是可以通过在 build.gradle 中增加如下声明而得以继续使用它:

android {
    useLibrary 'org.apache.http.legacy'
}

而从 Android P 开始,Apache HTTP 客户端变得完全不可用,依赖于它的应用在 Android 9 或更高版本上将启动失败并显示 NoClassDefFoundError 错误。

为了应对这一变化,我们在 10 月底升级了 Android SDK 至 4.7.7 版本,彻底去掉了 Apache HTTP 的使用,完全兼容 Android P 系统,请大家及时升级。

同时,再次提醒一下,我们的 Java Unified SDK 自项目初始就不依赖 Apache HTTP,所以也是天然支持 Android P 的,并且以后老的 Android SDK 会进入只修问题不加功能的维护状态(至 2019 年 9 月停止维护),LeanCloud Android 团队会把精力投入到 Java Unified SDK 的开发之中,请大家尽早切换使用。

2018 年 11 月 02 日华北节点内网核心设备升级通知

接到华北节点的底层服务商通知,2018 年 11 月 02 日(周五)凌晨服务商将对机房内网的核心设备进行升级维护。为了保证对外服务稳定,我们会提前将流量切换至其他线路,但是切换过程可能出现网络抖动,造成各项服务的网络请求出现短暂失败。

【升级时间】
2018-11-02 00:00 – 07:00(北京时间)

【影响范围】
华北节点的应用

【影响描述】
网络切换时有可能出现短暂的请求失败,但会很快自动恢复。

我们运维团队会密切关注升级过程,期间若服务出现不可用状况,我们会通过邮件或短信及时与开发者沟通进展。如果有任何疑问,请发邮件至 support@leancloud.rocks 进行咨询。

系统维护通知:LeanCloud 美国节点计划于 10 月 29 日对机房进行升级改造

随着客户量的增长,LeanCloud 美国节点的数据存储规模和并发请求压力越来越大,原本使用 IaaS 服务商提供的虚拟机越来越成为系统瓶颈,所以我们计划对底层物理架构进行一次升级,尽量采用高性能物理机来承载核心服务,以便提供更好的处理性能与稳定性。

本次升级是机房整体迁移,无可避免会导致一段时间内服务不可用,但我们会尽量降低对您业务的实际影响。经过详细评估和预演,我们估计本次迁移操作大概需要 5 小时,其中有 2 小时左右系统完全不可访问,3 小时左右系统会被锁定在只读状态(读取操作不受影响,写入和修改请求会返回失败)。

我们将迁移的时间初步定在 北京时间 10 月 29 日 13:00 – 18:00,也就是 美国东部时间 10 月 29 日 0:00 – 5:00,如果这一时间段对您业务影响非常大,请提前致信 support@leancloud.rocks 与我们联系。迁移当天我们的紧急联系电话 (+86 186-2503-8918)也会一直保持畅通,有任何问题您都可以及时联系我们。

衷心感谢您一直以来对我们的理解和支持,LeanCloud 会努力为大家提供最好的技术服务。

系统维护通知:华东节点计划于 10 月 25 日凌晨对存储集群进行升级维护

为了提升系统性能和修复已知问题, 我们计划于 10 月 25 日凌晨 01:00 – 06:00(北京时间 GMT+08)对中国区华东节点的存储集群进行升级维护 。此次操作预计耗时 5 小时,期间不会引起任何服务中断,对已有应用的数据 API 访问,以及终端用户使用都不会造成影响。

但是在系统维护期间,应用控制台与存储相关的部分管理功能会被暂时禁用,因此开发者将无法创建和删除应用,无法创建、编辑、删除和绑定 Class,但对已有应用和数据进行增删改查不受影响。在维护开始和结束的时候,我们会在华东节点的应用控制台发布操作提醒,如果您在控制台没有看到系统维护提醒,则可能您的应用不在华东节点,或者我们对目标应用已经完成上述操作。

我们会尽快完成升级维护工作并恢复应用控制台的受限操作。如果遇到计划之外的情况,维护时间可能会延长,我们会通过邮件或短信及时与您沟通进展。

如果有任何疑问,请发邮件至 support@leancloud.rocks 进行咨询。

Java Unified SDK 开放测试通知

9 月伊始,我们新推出了一个 Java 平台的统一 SDK(Java Unified SDK)。该 SDK 可以在 Java、Android 和 LeanCloud 云引擎三种环境下运行,支持数据存储、LiveQuery、即时通讯、云函数、推送和混合推送等全部核心功能,并且和老版本一样开放所有源代码(代码见这里)。今后 LeanCloud 安卓开发团队会以开发维护 Java Unified SDK 为主,老版本 Android SDK 则会进入维护状态,并将于 2019 年 9 月底停止维护。在此期间我们主要做 bugfix,不再增加新功能,因此建议大家尽快迁移到 Java Unified SDK 上来。

为什么我们要新推一个 SDK

一份代码,支持多个平台
老版本 SDK 因为历史原因,Android 平台和纯 Java 平台(在云引擎中使用)是两套完全分开的代码,功能有差异,接口不统一,维护比较困难。新的 SDK 则对此进行了修改,使用一套代码来适配多个平台,给开发者带来完全一致的使用体验。

Reactive API
老版本 SDK 所有的网络请求都是通过 Callback 方式实现的,在实现多轮前后衔接的业务逻辑时会导致代码嵌套层级过多,影响阅读,同时在 Java 开发环境下这种异步的方式也不太友好。故而新版本 SDK 的存储接口完全基于 RxJava 来构建。函数式编程风格的 API,给业务开发带来更多便利。
例如,我们在发表一篇博文(Post)的时候,需要同步增加一些 Comment,在新的 SDK 中则可以这样来实现:

AVObject post = new AVObject("Post");
post.put("title", "LeanCloud 发布了新版 Java 统一 SDK");
post.put("content", "9 月初,LeanCloud 发布了新版 Java 统一 SDK,欢迎大家试用!");
post.saveInBackground().map(new Function<AVObject, AVObject>() {
  public AVObject apply(AVObject p) throws Exception {
    // 在 Post 保存成功之后,再新建一个 Comment 对象.
    AVObject comment = new AVObject("Comment");
    comment.put("content", "好想试一下");
    comment.put("post", p);
    return comment.saveInBackground().blockingFirst();
  };
}).subscribe(new Observer<AVObject>() {
  @Override
  public void onSubscribe(Disposable disposable) {
  }

  @Override
  public void onNext(AVObject comment) {
    System.out.print("post and comment objects have been saved successfully.");
  }

  @Override
  public void onError(Throwable throwable) {
    System.out.print("Saving post or comment objects failed. cause: " + throwable.getMessage());
  }

  @Override
  public void onComplete() {
  }
});

如何使用新版 SDK

新版 SDK 现在处于开放测试阶段,其最新版本为 5.0.0-SNAPSHOT,我们已经编译发布到了 LeanCloud 的 maven 仓库中。大家可以通过 Maven 和 Gradle 等包依赖管理工具来下载使用,具体可以参考这里的 wiki 说明

大家发现 Bug 或者有任何疑问或建议,请使用 GitHub Issue 来告知我们,我们会及时跟进解决,非常感谢大家的反馈。

LeanCloud 官网改版,产品介绍与使用方案全面更新

8 月 21 日,新版 LeanCloud 官网正式上线。在此次改版中我们翻新了所有产品与服务的介绍,调整了开发版、商用版和企业版的结构与描述,希望以此能够帮助现有及潜在用户更清楚地了解 LeanCloud 各类产品的实用性及以上三种使用方案之间的差异性。另外,各项服务的价格并没有变化,所以不会导致使用成本增加。

区分核心服务与扩展服务

文件存储、短信、云引擎、云缓存这些服务都统一按照实际使用量收费,并不会因使用方案不同而产生价格或功能上的差异,因此我们将它们从核心服务中抽取出来放入扩展服务。这样的区分也让整个使用方案体系看起来更加简化易懂。

需要说明的是,文件存储和短信服务是我们与第三方服务商合作的产品,将其纳入 LeanCloud 产品体系的初衷是为了尽可能地满足开发者的实际需要。由于此类服务商无法实时提供服务消费清单,与我们结算费用存在一至三天不等的滞后期,所以会出现这样一种情况,即一个已被暂停、没有了网络流量的 LeanCloud 应用仍有可能在后续几日被补扣这些延迟的费用。这是开发者们常有的疑问。

移动统计纳入核心服务

移动统计是我们自主开发的产品。它会针对不同的使用方案提供不同的资源和能力配备。例如,对于开发版应用来说,统计服务的事件上报接口的调用次数会与存储服务的 API 调用次数累加在一起,受到每天调用上限三万次的限制;对于商用版应用来说,事件上报次数既没有限制,也不会与存储服务的 API 调用次数累加在一起,这样也就不会增加商用版存储服务的成本。

统计结果在云端的有效保存时间为六个月。如果不想使用移动统计,请登录应用控制台,进入 分析 > 统计设置,关闭 启用 SDK 统计功能

如果您对此有任何疑问或反馈,请通过 support@leancloud.rocks 联系我们。

LiveQuery 从 8 月 1 日起开始收费

LeanCloud 多端数据实时同步服务 LiveQuery 自 2017 年 6 月推出以来因其易用性而备受好评,它已被广泛应用在多端内容实时更新、单设备登录、在线交互等众多业务场景之中。我们非常感谢大家对这款产品的认可,这与广大开发者不断为我们提供反馈和改进建议密不可分。鉴于 LiveQuery 不断上涨的使用量以及商业用户对于云端服务稳定性的要求,我们决定从 2018 年 8 月 1 日起,开始对 LiveQuery 提供免费和付费两种方案来满足大家不同的使用需求。

免费方案留有充足的使用量,便于用户进行功能接入调研和试用。付费方案会利用云端专属及优化资源,让服务在大流量状态下仍然有稳定良好的查询性能。

LiveQuery 会从「查询订阅数」和「下发消息数」两方面来统计使用量及费用。

  • 查询订阅数:每天不同客户端不同查询的总次数,同一个客户端一天之内多次执行相同的查询也只计数一次。
  • 下发消息数:服务端在数据变化之后,每天通过查询匹配下发给客户端的所有消息的总数。执行了匹配运算但是没有消息下发的不计费。

计价方案如下:

华北/华东节点

开发版(免费) 商用版(按使用量收费)
查询订阅数 不超过 100 次 / 天 ¥4.0 元 / 千次订阅 / 天
下发消息数 不超过 5000 条 / 天 ¥2.0 元 / 万条消息 / 天

北美节点

开发版(免费) 商用版(按使用量收费)
查询订阅数 不超过 100 次 / 天 $1.0 USD / 千次订阅 / 天
下发消息数 不超过 5000 条 / 天 $0.4 USD / 万条消息 / 天

我们已在 LeanCloud 应用控制台开放出这两项指标的每日统计数据,查看路径为 应用 > 存储 > 统计 > LiveQuery。大家可以据此来评估应用是否已超出免费方案的限量,并预估将来可能增加的成本支出。

如果对此有任何疑问或反馈,请通过 support@leancloud.rocks 联系我们。

4 月 1 日起数据存储服务将增加对象存储空间的收费项目

2018 年 4 月 1 日零时起,LeanCloud 数据存储服务将在现在收费基础上加收对象存储(即以 AVObject 形式存储的数据)所使用的空间的费用。

之所以增加该收费项目,是因为我们发现以往仅按应用请求次数收费的模式,容易让开发者们忽略数据实际的存储空间大小,继而完全忽视了数据清理等维护性工作。这样日积月累,很多无用的数据会占用大量的云端资源,极大地影响了存储系统的性能。同时随着 LeanCloud 开发者和应用数量的不断增长,这样形成的资源浪费也愈发严重。于是我们借鉴对文件存储空间收费的经验,决定通过这一经济化手段,引导广大开发者来更合理地使用云端资源和 LeanCloud 服务。

继续阅读