更多常见问题请点击这里。
2020 年 10 月常见问题
1.【数据存储】当数据量越来越大时,怎么加快查询速度?
与使用传统的数据库一样,查询优化主要靠索引实现。索引就像字典里的目录,能帮助你在海量的文字中更快速地查词。
原则:数据量少时,不建索引。多的时候请记住,建立索引后,写入时还需要更新索引,以此来换取更少的查询时间。所以,一般来说,写少读多就多建索引,写多读少就少建索引。
操作:进入 控制台 > 存储,选定一张表之后,点击右侧的 其他下拉菜单,然后选择 索引,然后根据你的查询需要建立好索引。
提示:
如果 Class 内数据很多,点击「创建」按钮后,控制台可能会显示「排队中」。这意味着索引创建操作已进入任务队列,会在集群闲时(通常是凌晨)自动进行。
数据表的默认四个字段 objectId
、ACL
、createdAt
、updatedAt
是自带索引的,但是在勾选时,可以作为联合索引来使用。
「唯一索引」选项指比如 uuid 等使用场景。勾选「唯一索引」但不勾选「允许缺失值」时,最多只能有一条不存在该字段的数据,否则数据就不唯一了。如果可能存在不止一条不存在该字段的数据,请同时勾选「允许缺失值」。
目前索引提供 3 种排序方案:正序、倒序和 2dsphere。其中 2dsphere 用于地理位置经纬度的数据(GeoPoint)。比如移动场景中一个常见的需求是查找附近的其他用户。由于存储服务支持双向遍历索引,因此单字段索引,正序和倒序是等价的,可随意选择。但联合索引的正序、倒序的组合需要根据业务需求选择。
下面以两个字段的联合索引为例详细说明正序、倒序的选择。我们假定创建 foo、bar 双字段联合索引时, foo 字段的索引选择正序,bar 字段的索引选择倒序。显而易见,foo 正序且 bar 倒序的查询能够利用索引。又因为支持双向遍历索引,所以上述查询的翻转形式 foo 倒序且 bar 正序也能利用索引。但是,foo、bar 同序(皆正序或皆倒序)的查询无法利用索引。同样是因为支持双向遍历索引的缘故,创建 foo 字段倒序、bar 字段正序的联合索引,效果是等价的。同理,foo、bar 字段同序的联合索引,能够被 foo、bar 同序的查询利用,不能被 foo、bar 异序的查询利用。三个或更多字段的联合索引以此类推。
2.【域名绑定】域名已经备案,在控制台绑定域名时却域名备案检查不通过
请先访问工信部网站试下能否查到域名备案信息,如果查询不到,需要等待工信部域名备案查询系统更新后再去控制台点「重试」。如果工信部网站可以查到而控制台域名备案检查却不通过,通常是因为 LeanCloud 使用的备案查询服务数据有延迟,请通过工单或邮件联系我们处理。
3.【数据存储】不通过短信验证能否强制修改 _User 表 mobilePhoneVerified 字段,使其设置为 true?
可以通过云引擎使用 master key 来修改 mobilePhoneVerified 的值。因为云引擎运行在可信的服务器端环境中,所以可以全局开启超级权限(Master Key),这样云端会跳过包括 ACL 和 Class 权限在内的检查,让你自由地操作所有云存储中的数据,当然这种方式也只允许调用一些仅供 Master Key 使用的 API。
2020 年 9 月常见问题
1.【数据存储】在 PC 端用手机号登录,在小程序上用微信登录,如何绑定到同一个账号上
从逻辑上,在 PC 端登录的账号,与在小程序中用微信登录的账号,他们没有任何可以联系在一起的地方。如果都是独立创建了两个账号,只能在业务层面进行绑定(也就是将一个账号的所有关联对象全都迁移到另一个账号,然后删除原账号)。
如果可以在业务上加一些限制,则可以避免上面这种「创建了两个独立的账号」的情况。比如,如果手机号是账号必须设置的信息,那么我们可以在以手机号作为关联项。具体的步骤如下,首先是 loginWithWeapp 并带上 failOnNotExist 参数,这样如果该微信关联的用户已经存在则照常登录,如果没有则会失败,此时跳转到使用手机号登录/注册的页面,让用户通过手机号登录或注册,成功之后再通过 associateWithWeapp 接口关联当前微信账号。
2.【短信】账号下有短信签名,新申请短信模板时,为什么仍提示需先创建对应签名?
短信的审核流程已经全面改版升级,提交短信签名时需要提供签名相关的资质文件,一些旧版的签名尚未提交过资质文件,这部分旧的签名虽然目前仍可以正常发送短信,但不能新建模板。
旧版签名需要补充资质文件重新提交一次审核。
3.【即时通信】如何检查好友的在线状态?
即时通讯支持 客户端上下线 Hook 通知。实现步骤是通过 hook 拿到 clientId
的在线状态,将这些状态存储到 LeanCache 中,客户端定期查询云函数来获得用户的在线状态。详细方案可参考文档:即时通讯中的在线状态查询。
2020 年 8 月常见问题
1.【即时通信】使用 REST API 发送实时通信消息收费吗?
使用 REST API 发送即时通信消息也是收费的。计费标准就是 API 调用费用标准(每万次 1.0 元)。
此项计费在控制台 > 财务 > 消费明细中对应扣费服务项目是:「数据存储(API 请求)」。
2.【数据存储】表数据变多后查询变慢,该怎么优化?
可以通过建索引加速查询。数据查询是很普通的操作,与传统关系型数据库一样,索引的优劣对于我们查询性能的影响非常大。 我们可以在控制台 > 存储 > 结构化数据的每个 Class 中,切换到「性能与索引」标签页,创建索引。
索引需要针对查询条件来做,过多的索引也会影响到写入效率。详情还可以参考:索引文档。
3.【云引擎】可以在云函数中未登录的情况下查询 _User 表吗?
在云函数里可以用 masterKey 跳过权限检查,未登录也可直接查询 _User 表。
因为云引擎运行在可信的服务器端环境中,所以你可以全局开启超级权限(Master Key),这样云端会跳过包括 ACL 和 Class 权限在内的检查,让你自由地操作所有云存储中的数据。具体细节可以参考文档: Master Key 和超级权限。
2020 年 7 月常见问题
1.【即时通信】为什么收不到离线消息的推送?
没有收到离线消息的推送,可以按照如下步骤检查:
参考 聊天消息没有收到 一节内容查看聊天消息是否有正常送达服务器;
检查接收者用户是否离线(控制台>即时通信>用户状态页面查询),接收者是否在 _Installation 表中有关联的设备记录;
参考 离线推送通知 一节内容,确认应用是否有配置默认的推送内容,这一步很重要,如果没有设置推送内容系统不会自动推送离线消息;
在控制台 > 推送 > 在线发送页面,使用在线推送实际发推送给目标设备查看推送是否出错,比如 iOS 证书不匹配,设备 Token 过期,设备 Token 和推送环境不匹配等
具体细节还可以参考文档:即时通信常见问题。
2.【云引擎】调用云函数报错:Application not Found
访问云引擎服务时,服务端返回错误「Application not found」或在云引擎日志中出现这个错误,可能有以下原因:
2020 年 6 月常见问题
1.【消息推送】如果同一个设备上有两个应用,如何推送到指定的应用?
_Installation 表记录了设备上生成的安装信息。可以在 _Installation 表新增一个字段来区分不同的应用。在推送消息的时候,如果选择推送全部用户,则两个应用都会收到推送。
如果想要针对某一个应用推送,可以参考 发送给特定的用户这个推送文档,只发送给指定的设备。
2.【云引擎】云引擎创建的新的分组,可以调试云函数吗?
云引擎默认会有一个用于处理云函数、Hook 和定时任务的分组,其他额外创建的分组将成为「拓展分组」,拓展分组不支持定义云函数(包括 Hook 函数和定时任务),只能通过绑定的域名提供网站托管服务。在创建了多个分组后,可以随时在云引擎的设置界面切换默认分组。
每个分组都有独立的预备环境用于测试代码、独立的域名供外部访问,每个分组的环境变量、代码仓库等设置也是独立的,可以单独对一个组部署代码。你可以按照 实例管理 一节中的介绍,在分组中创建和管理实例,如果组中没有实例就无法响应请求,如果组中有多个实例便可以提供负载均衡和高可用的能力。
2020 年 5 月常见问题
1.【消息推送】iOS 推送报错 「部分推送被 APNs 拒绝,拒绝原因是: BadDeviceToken」
这个报错是因为推送环境不正确,例如推送时通过 prod 参数设置推送给测试环境的设备(即"prod": "dev"
),则生产环境的设备无法收到推送。
同理,如果指定推送给生产环境的设备(即"prod": "prod"
),则测试环境的设备无法收到推送。
关于 iOS 的推送环境参考:推送环境。
2.【即时通信】如何实现聊天消息中的敏感词过滤?
对于开放聊天室来说,内容的审核和实时过滤是产品运营上的一个基本要求。我们即时通讯服务默认提供了敏感词过滤的功能,多人的 普通对话、聊天室和系统对话里面的消息都会进行实时过滤。 命中的敏感词将会被替换为 ***
。 消息内容实时过滤属于系统层面的修改消息,发送者会收到 MESSAGE_UPDATE
事件。
如果开发者有较为复杂的过滤需求,我们推荐使用 云引擎 Hook 函数 _messageReceived
来实现过滤,在 hook 中开发者对消息的内容有完全的控制力。
3.【云引擎】如何判断当前云引擎是预备环境还是生产环境?
默认情况,云引擎只有一个「生产环境」,对应的域名是 CCCCCCCCCCweb.example.com`(云引擎域名绑定指南参考:文档)。在生产环境中有一个「体验实例」来运行应用。
当生产环境的体验实例升级到「标准实例」后会有一个额外的「预备环境」,对应域名 stg-web.example.com
,两个环境所访问的都是同样的数据,你可以用预备环境测试你的云引擎代码,每次修改先部署到预备环境,测试通过后再发布到生产环境;如果你希望有一个独立数据源的测试环境,建议单独创建一个应用。
如果访问云引擎遇到「Application not Found」的错误,通常是因为对应的环境还没有部署代码。例如应用可能没有预备环境,或应用尚未发布代码到生产环境。
2020 年 4 月常见问题
1.【数据存储】如何提升标志位的查询效率?
当数据表中有很多布尔类型的数据时,可以考虑使用二进制存储提高查询效率。例如需要存储是否开启推送、是否静音、是否为会员等多个状态,可以这样表示:
111
:开启推送、静音、是会员
101
:开启推送、未静音、是会员
在 LeanCloud 存储为整型字段,操作这个字段的方法可以参考位运算的接口文档:REST API - 位运算。
2.【数据存储】应用内搜索的关键字查询, 查出来的结果是两月前的数据,最新数据查询不到怎么办?
这种情况可以在控制台尝试重建索引,索引创建完后会有邮件提醒。
一般来说当用户上传了新的词典,或者有批量删除过数据等情况都需要执行一次「重建索引」操作。当发现搜索与存储数据不一致时,也可以尝试重建索引来解决。
3.【即时通信】Android 和 iOS SDK是否需要本地化未读消息数的问题
对于未读通知的下发时机和数量,iOS 和 Java/Android 两个平台的 SDK 在内部处理上稍有差异:iOS SDK(Objective-C 和 Swift 都包括)在每次登录即时通讯云端的时候,都会获得云端下发的 大量 未读通知;而 Java/Android SDK 由于内部持久化缓存了通知的时间戳(能减轻服务端压力),所以登录即时通讯云端之后客户端只会收到上次通知时间戳之后发生了变化的 部分 未读数通知。
因此 Java SDK 的开发者需要在应用层缓存收到的未读数通知(同一个对话的未读数采用覆盖的方式来更新),而 iOS SDK 这里收到的 大量未读通知并不等于全量数据(云端追踪的有未读消息的对话数不超过 50 个) ,所以也是一样需要在应用层面缓存收到的未读计数结果,这样才能保证对话列表超过 50 个之后未读计数值的准确性。
2020 年 3月常见问题
1.【数据存储】如何解决数据一致性或事务需求?
LeanCloud 目前并不提供完整的事务功能,但提供了一些保证数据一致性的特性,可以解决大部分的一致性需求:
在单个对象的一次 save 操作中,对多个字段的更新操作是原子地完成的。
使用 increment(原子计数器)可以原子地更新数字字段。
唯一索引 可以保证在一个字段上有同样值的对象只有一个。
有条件更新对象 可以仅在满足某个查询条件时进行更新操作;在这个特性的基础上,你可以自己实现更加复杂的 两阶段提交。
在云引擎上还可以借助 LeanCache 来实现自定义的 排他锁。
关于这个话题我们还录制了一期公开课视频:在 LeanCloud 上解决数据一致性问题,其中有对上面这些特性的详细介绍,和解决常见场景的实例教程(包括实现两阶段提交)。
2. 【即时通信】即时通信如何获取在线用户列表以及用户的在线时长?
我们提供了 客户端上下线 Hook,开发者可以利用这两个 Hook 函数,结合云缓存来完成一组客户端实时状态查询的 endpoint。
具体实现步骤是通过 Hook 拿到 clientId 的在线状态,将这些状态存储到 LeanCache 中。客户端定期查询云函数来获得用户的在线状态。具体可以参考文档:即时通讯中的在线状态查询。
3. 【推送】离线推送通知服务里,_Installation 是如何与 _User 里的用户 id 关联的?
用户登录即时通信系统以后,服务器会将用户的 client id 保存在登录设备的 _Installation 表的 channels 字段里,从而完成关联。当用户离线,有离线消息需要推送时,服务端会去 _Installation 表内找到 channels 字段包含目标 client id 的设备来完成推送。
4. 【云引擎】如何访问云引擎预备环境中托管的网站?
需要在控制台手动绑定一个 stg-
开头的域名。stg-
开头的自定义域名(例如 stg-web.example.com
)会被自动地绑定到预备环境。
更多详情参考:域名绑定指南。
2020 年 2 月常见问题
1.【推送】iOS 推送如何正确保存 deviceToken?
iOS 系统重装、从备份恢复应用、在新设备上安装应用都会导致 device token 变化,因此 Apple 推荐 在应用每次启动时都去请求 APNs 的 device token,获取 token 后进行设置并保存 token。 除此以外,LeanCloud 后端会统计 installation 的更新时间(updatedAt
),据此清理长期未更新的 installation 数据。 所以我们建议开发者遵循 Apple 的推荐方式开发应用,以免有效 installation 数据被意外清理,以及因为 device token 过期无效而推送失败。
示例代码可以参考: 开发文档。
2.【云引擎】部署更新云引擎会导致服务中断吗?
服务不会中断。在代码部署时,系统会优先启动使用新版本代码的实例,待新实例通过了健康检查,系统修改路由将请求转发至新实例后,再关闭旧版本的实例,让服务保持零中断。
3.【云引擎】如何调整云引擎实例规格,什么样的配置是合理的?
为了防止实例因为资源使用超限而受到影响(特别是内存超限),我们建议:
2020 年 1 月常见问题
1.【域名证书】https 证书过期怎么更新?
如果是手动证书管理,可以在控制台 > 应用 > 设置 > 域名绑定页面找到对应域名下方的「更新证书」按钮,点击即可上传新的证书。
如果配置的自定义域名选择的是 ssl 自动管理,则无需更新证书,证书过期前系统会自动申请证书。
2.【推送】iOS 设备未收到推送,到控制台查看推送记录发现报错 invalidTokens, 是什么原因?
invalidTokens 的数量由以下两部分组成:
针对第一种情况,请检查 APNS 证书是否过期,并检查是否使用了正确的 证书类型。
3.【推送】iOS 推送如何区分使用的证书类型?
iOS 的推送环境有 测试 和 生产 两种。
我们支持上传两个环境的 iOS 推送证书,默认使用 生产证书 来发推送,可以通过设定 prod
属性来指定使用哪个环境证书。
更具体的细节可以参考这部分文档:iOS 测试和生产证书区分。
2019 年 11 -12 月常见问题
1.【云引擎】如何下载云引擎的应用日志和访问日志?
云引擎的应用日志(程序的标准输出和标准错误输出)可以在 应用控制台 > 云引擎 > 应用日志 查看;并且可以使用 命令行工具 导出最长 7 天的日志。
云引擎的访问日志(Access Log)可在 应用控制台 > 云引擎 > 访问日志 中导出,通过控制台下载经过打包的日志。
2.【推送】iOS 推送如何选择推送证书?
推送消息接口有一个参数:prod。
这个参数仅对 iOS 推送有效。当使用 Token Authentication 鉴权方式发 iOS 推送时,该参数用于设置将推送发至 APNs 的开发环境(dev)还是生产环境(prod)。当使用证书鉴权方式发 iOS 推送时,该参数用于设置使用开发证书(dev)还是生产证书(prod)。在使用证书鉴权方式下,当设备在 Installation 记录中设置了 deviceProfile 时我们优先按照 deviceProfile 指定的证书推送。
详情可以参考这部分开发文档:使用 REST API 推送消息。
3.【推送】为什么我收不到离线消息推送,该如何排查原因?
消息推送收不到的排查步骤如下:
排查问题更具体的细节可以参考这部分文档:为什么我收不到离线消息推送。
2019 年 10 月常见问题
1.【云引擎】部署时长时间卡在「正在下载和安装依赖」怎么办?
这个步骤对应在云端调用各个语言的包管理器(npm
、pip
、composer
、maven
)安装依赖的过程,我们有一个
依赖缓存 机制来加速这个安装过程,但缓存可能会因为很多原因失效(比如修改了依赖列表),在缓存失效时会比平时慢很多,请耐心等待。如果你在 leanengine.yaml
中指定了系统依赖也会在这个步骤中安装,因此请不要添加未用到的依赖。
对于 Node.js 建议检查是否在 package-lock.json
或 yarn.lock
中指定了较慢的源(见 网站托管开发指南 · Node.js)。
2.【即时通信】使用系统会话给用户发的消息支持撤回吗?
单独发送的消息只能一个一个的撤回。如果是使用订阅消息方式发送的消息可以一次 撤回所有人的消息。
订阅消息发送方式接口参考文档:给所有订阅者发消息。
3.【推送】Android 推送到达率低,部分推送无法成功是为什么?
Android 推送无法成功,很可能是因为对方设备不在线。在控制台的 消息 > 推送 > 帮助 页面可以查询用户在线状态。
另外从 Android 8.0 开始,第三方应用自己的 Service 存活时间会非常短,Android OS 会杀掉绝大部分第三方常驻后台的 Service,我们 Android SDK 的 PushService 也是因为这个原因生命周期受到较大限制,为了解决这个问题,我们推出了 混合推送 来对接各厂商自己的推送平台,混合推送可以有效的提高推送到达率。
2019 年 9 月常见问题
1.【域名绑定】绑定 API 域名成功以后如何更新代码?
例如绑定的自定义 API 域名是: xxx.example.com
,则需要在代码中这样设置:
.net SDK
AVClient.Initialize("appId", "appKey", "https://xxx.example.com");
swift SDK
LCApplication.default.set(
id: "appId",
key: "appKey ",
serverURL: "https://xxx.example.com"
)
Java SDK
AVOSCloud.initialize(this, "appId", "appKey", "https://xxx.example.com");
JavaScript SDK
AV.init({
appId: "appId",
appKey: "appKey",
serverURLs: "https://xxx.example.com",
});
2.【域名绑定】我自己备案的域名,已经绑定成功,需要在 leancloud 接入备案吗?
绑定云引擎域名、API 域名需要在 LeanCloud 接入备案,只绑定文件域名不需要再接入备案。
接入备案请登录控制台,进入 应用控制台 > 账号设置 > 域名备案,按照步骤填写资料即可。
3.【iOS 推送】Objective-C SDK 在 iOS 13 环境下,无法接收推送的解决办法。
Objective-C SDK v11.6.7 及以上版本,按如下方式上传 device token:
// 二进制数据(device token)转化为正确的十六进制字符串,
// 同时配置苹果开发者账号的 Team ID
[installation setDeviceTokenFromData:deviceToken teamId:@"Apple Developer Team ID"];
// 上传有效的十六进制字符串和 Team ID
[installation saveInBackground];
旧版本的 Objective-C SDK(<= 11.6.6),按如下方式上传 device token:
NSUInteger dataLength = deviceToken.length;
if (dataLength > 0) {
const unsigned char *dataBuffer = deviceToken.bytes;
NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];
for (int i = 0; i < dataLength; ++i) {
[hexString appendFormat:@"%02.2hhx", dataBuffer[i]];
}
[installation setDeviceToken:[hexString copy]];
[installation saveInBackground];
}
在 iOS 13 环境下无法收到推送问题的详细说明请参考:社区新闻公告。
2019 年 8 月常见问题
我们在八月初发布了 请各位用户在 10 月 1 日前绑定自己的域名 的通知。
域名绑定常见问题如下:
1. 如何判断我的应用是否需要绑定域名?开发版应用需要绑定域名吗?
如果使用了数据存储、即时通讯服务,包括调用云函数,都需要绑定 API 域名。
如果在 LeanCloud 存储文件,调用文件相关 API,需要绑定 文件域名。
如果使用云引擎服务,需要绑定 云引擎域名。
有商用版应用的账户下的开发版应用如果使用上述服务,也需要绑定相关域名。
没有商用版应用的用户无法绑定域名,需要至少升级一个应用至商用版。
2. 每个应用都需要单独绑定域名吗,多个应用是否可以绑定同一个域名,API 域名、文件域名与云引擎域名能否绑定同一个域名?
每个应用都需要绑定不同的域名。不支持多个应用共用一个域名。但是可以备案一个域名后给各个应用使用不同的子域名。
API 域名、文件域名与云引擎域名不支持共用同一个域名,也可以是一个顶级域名下的三个不同的子域名。
3.绑定域名成功以后是否需要更新代码升级应用?
文件域名与云引擎域名绑定后可以立即生效,不需要更新代码。
API 域名在控制台绑定成功后需要更新代码,更新代码文档参考:域名绑定指南 - 更新代码。
4.是否提供域名备案服务,域名备案与域名接入是否收费。
主域名已在 LeanCloud 备案的情况下,子域名不需要额外备案或接入备案;主域名在别处备案的,如需在云引擎、API 使用子域名,还需在 LeanCloud 接入备案子域名。
商用版应用的域名如果没有 ICP 备案,或者需要接入备案,请进入 应用控制台 > 账号设置 > 域名备案,按照步骤填写资料。
没有商用版应用的用户不支持域名绑定与域名接入,需要升级应用至商用版。
无法完成备案的个人项目或不特别针对国内用户的应用请使用 LeanCloud 国际版。
其他域名绑定问题可以参考相关文档 域名绑定指南。
2019 年 7 月常见问题
1.【云引擎】请问 Node.js 云函数有调试工具吗?
用命令行工具启动项目后,在浏览器中打开 http://localhost:3001 ,会有一个简易的 Web 界面可以调用云函数。详情参考文档:命令行工具 CLI 使用指南。
2.【Android】新版本 Android SDK 文档在哪里?
我们于 2018 年 9 月推出了新的 Java Unified SDK,兼容纯 Java、云引擎和 Android 等多个平台,老的 Android SDK(所有 groupId 为 cn.leancloud.android 的 libraries)进入维护状态,直到 2019 年 9 月底停止维护。欢迎大家切换到新的 Unified SDK,具体使用方法详见 数据存储开发指南 · Java。
3.【综合】请求报错 429 :Too many requests 的原因的什么?
报错 429 有以下两种情况:
超过每个应用同一时刻最多可使用的工作线程数。通过 控制台 > 存储 > API 统计 > API 性能 > 总览 可以查看应用产生的请求统计数据,如平均工作线程、平均响应时间等。使用 LeanCloud 「商用版或企业版 」的用户,如有需要,可以联系我们来调整工作线程数。
在单位时间内调用即时通信和推送 REST API 请求超限,会被云端拒绝,并返回 429 错误码。详情可以参考官方博客:7 月 15 日起即时通讯和推送 REST API 将开启请求频率限制。
2019 年 6 月常见问题
1.【即时通信】怎么删除或者退出一个会话聊天?
在即时通信服务中,SDK 没有提供删除会话的方法。理论上使用存储 SDK 或 REST API 能够做到删除 会话记录,也就是删除 _Conversation 表。但是如果用户删除了某条 conversation 记录,这个会话中的其他成员也会受到影响,所以不建议直接删除会话。
在即时通信中,可以使用 自身退出对话 或者 剔除其他成员 来实现类似删除会话的需求。
2.【应用节点】怎么选择使用哪个节点创建应用?创建应用后是否可以再更换节点?
LeanCloud 有三个节点可供选择,分别是华北节点,华东节点以及国际节点。
如果用户主体在国内,建议使用华北节点与华东节点,如果用户主体在国外建议使用 国际节点。根据国家《网络安全法》的要求,使用 LeanCloud 国内节点服务的用户必须进行 实名认证(个人或者企业认证)。在 LeanCloud 控制台新建应用以后不再支持更换节点。
3.【短信】为什么会报错短信使用超限,短信都有哪些限制?
短信的限制是根据「签名名称」与「手机号」共同限制的,短信的限制不区分应用。例如在两个应用中都创建了同一个签名,那么同一手机号在两个应用中是共同限制的。详情可见:短信的具体限制文档。
2019 年 5 月常见问题
1.【推送】同一个账号在两个设备登录过,两个设备都会收到推送信息吗?
推送的时候是根据推送查询条件,在 _installation 表中查找符合条件的目标设备来推送。只要查询条件能包含这两个设备,则两个设备都能收到推送。
如果是登录即时通讯系统,如果没有开启单点登录,用户在登录两个设备后,如果用户不在线会尝试给这两个设备都发离线消息推送。
2.【推送】 Android 非混合推送,控制台推送记录中显示推送成功,但 Android 设备实际没有收到推送,是什么原因?
对于 Android 非混合推送设备,当返回的记录成功数为 1 时,表示一定收到了 SDK 确认收到该消息的回应。即此条推送消息一定是到达了设备。
建议检查推送是否使用了自定义 Receiver 功能(消息中是否有 action 字段),消息到达后 SDK 会直接将消息转交给自定义 Receiver,由自定义 Receiver 完成推送提醒。这种情况需要检查自定义 Receiver 实现逻辑排查消息到达后为什么没有弹出提醒。
3.【云引擎】新推出的 LeanDB 是什么产品,是用来做什么的?
这是一项新推出的功能,为了满足应用对关系型数据库的需求。目前 LeanDB 提供了 mysql 数据库,可以使用任何支持 mysql 的库来访问它。
接入文档请参考:LeanDB MySQL 使用文档。
2019 年 4 月常见问题
1.【数据安全】如何能够保证自己应用数据的安全?
最灵活的保护应用数据安全的方式是通过访问控制列表(Access Control List),通常简称为「ACL 机制」。ACL 背后的机制是将每个操作授权给一部分用户(User)或者角色(Role),只允许这些用户或角色执行这些操作。对 ACL 机制和数据安全方面更详细的解释可以参考文档:数据和安全。
2.【控制台】控制台创建应用时,有两种应用计费方式:开发版与商用版。我该怎么选择创建何种应用?
开发版是针对开发测试阶段的项目或个人项目的解决方案。由于开发版是免费的,所以不提供数据备份恢复服务,在集群的设计上是不对可用性和数据的可靠性做保证的。
商用版应用底层使用的是高性能、高可用的基础设施,有更好的冗余和 SLA 保证。除了性能和稳定性方面的保证外,商用版用户还将免费得到工单技术支持、域名备案和绑定、自助数据恢复、自定义 SSL 证书、云引擎性能管理等增值服务。
综上,个人开发或者测试阶段可以选择「开发版」应用,商用项目建议选择「商用版」应用。
3.【绑定域名】文件不绑定自定义域名有什么影响?云引擎服务不绑定自定义域名有什么影响?
如果没绑定自定义域名,使用 LeanCloud 提供的公用域名,由于受到网络法规的管控与限制,我们无法 100% 保证该公用域名随时可用。为确保您的应用体验不会受到影响,请前往控制台 > 存储 >设置 >文件 设置好自定义文件域名。在控制台 > 个人中心 > 账号设置 > 域名绑定 中绑定云引擎域名。
2019 年 3 月常见问题
1.【推送】为什么我收不到离线消息推送,该如何排查原因?
消息推送收不到的排查步骤如下:
排查问题更具体的细节可以参考这部分文档:为什么我收不到离线消息推送。
2.【在线参数】统计服务下线以后,有办法给我单独开启在线参数功能吗?
作为统计服务的一个附属功能,在线参数已经和统计服务一同下线了。但为了不影响客户的线上业务,我们云端还支持在线参数的读取(4 月底才彻底下线)。
我们建议自行切换到存储服务里面来继续使用在线参数的功能,并且建议应用数特别多的时候将所有应用的在线参数合并到一个应用中,通过不同的名字或属性区分,这样可能最多也只需要开通一个商用版应用了。
如果不能短时间内完成迁移,可以走付费延长「在线参数」这一功能的方案,有此需求的用户可以发邮件至 support@leancloud.rocks 与我们联系,我们会对符合条件的应用重新开放在线参数的访问入口。
2019 年 2 月常见问题
1.【存储】怎么存储和获取音频/视频文件的时长 ?
AV.File 的 metaData 属性,可以用来保存和获取该文件对象的元数据信息。可以在上传音频文件时获取音频长度然后通过 metaData 方法手动添加文件时长。
2.【即时通信】对话查询如何区分单聊还是群聊?
SDK 层面不区分单聊和群聊。可以使用会话的成员数量做区分。「会话成员数量为 2」即是单聊,大于 2 即可看作群聊。
3.【即时通信】语音消息如何标记消息是否已经播放,类似微信语音消息标记是否已读的小红点,可以提供一些思路吗?
因为一个群里可能有很多人,每个人对一条消息都有一个「是否已播放」的状态,所以建议在客户端维护这个「未播放」状态。
做法之一是可以在客户端维护一个「收到了但是没有播放的音频文件」列表,然后拿到消息文件对比一下客户端是否已经播放过。
4.【即时通信】使用 where 查询条件查询某用户的会话列表,为什么查询结果是系统内所有用户的会话?
当没有添加任何 where 查询条件时,query 会使用默认查询条件 where={"m":{"$in":["client ID"]}},即查询成员含有此 client ID 的对话;当添加了任意 where 查询条件时,query 会严格按 where 条件来查询,即覆盖默认的 where 查询条件。
以 Objective - C 举例,添加了自定义的 where 查询条件时,如果想查询含有此 client ID 的对话,使用 [query whereKey:@"m" containedIn:@[@"client ID"]] 增加一个查询条件即可。
2019 年 1 月常见问题
1. 【存储】数据存储表的字段是否有数量上限?字段多对性能是否有影响?
我们的存储功能基于 MongoDB,属于文档型数据库,这里的文档类似于 JSON 这样的非结构化数据,与传统的关系型数据库不一样, 所以讨论字段(关系型数据库中称为列)多少是没有意义的。
一个文档大小有 16 M 的限制,但是开发者真正使用时应远小于这个值,保证在几百 KB 之内能有较好的插入、查询、更新速度。
因为字段名是存在每个文档中的,所以字段名越短越节约空间。
2.【即时通信】安卓客户端怎么获取对话免打扰状态?
对于 Android 来说,不存在免打扰状态的。消息静音是针对 iOS 设备而言的(指不发送离线消息)。
Android 没有离线通知,因为聊天和推送使用的是同一个 WebSocket 长链接,聊天那里不在线,推送也是过不去的。
3. 【控制台】控制台的应用为什么会被归档,被归档的应用怎么重新激活?
近三个月内没有 API 请求的开发版应用会被归档,归档后无法请求应用数据。
被归档的应用如需重新开启,可提供应用信息发邮件至 support@leancloud.rocks 申请激活。
4. 【计费】通过 API 发送实时通信消息收费吗?
使用 API 发送即时通信消息也是收费的。计费标准就是 API 调用费用标准(每万次 1.0 元)。
此项计费在控制台 > 财务 > 消费明细中对应扣费服务项目是:「数据存储(API 请求)」。
5.【小程序】小程序真机上传数据时,控制台存储中显示的 Class 表名被压缩为单个字母,这个是为什么?
例如新建一个名为「Todo」的表,上传数据成功后进入控制台查看,其表名称显示为像 i、u 这样的单个字母。
这是因为真机上代码会被压缩,解决办法是在创建 Class 后向 SDK 注册该 Class 的名字:AV.Object.register(Todo, 'Todo');。
6.【云引擎】在云引擎部署时,会显示[ERROR] exit status 128,请问会有什么影响吗?
是命令行工具在上传统计数据的时候的一个错误,不影响后续的部署,升级到最新版本的 lean-cli 就不会有这个提示了。
7.【CQL】LeanCloud 平台的 CQL 语句,与标准的 SQL 有什么区别。离线数据分析使用的 SQL 语句又有什么不同?
CQL 只是 API 的一点封装,是 SQL 的一个很小的子集,离线分析的 SQL 是 Hive SQL。标准 SQL 里面有很多内置的函数,CQL 里面都不支持。
也就是说标准 SQL 和离线分析的 Hive SQL 支持的内置函数有差异,而 CQL 基本不支持内置函数。
2018 年 12 月常见问题
1.使用即时通讯服务发送消息,消息大小有限制吗?
客户端发送的单条消息大小不得超过 5 KB。即时通信服务其他限制可以参考文档 即时通讯服务总览 - 限制 。
2.即时通讯服务支持类似微信的屏蔽聊天功能(静音)吗?
即时通讯有静音功能,假如某一用户不想再收到某对话的消息提醒,但又不想直接退出对话,可以使用静音操作,即开启「免打扰模式」。设置静音之后,iOS 用户和 Android 混合推送用户就不会收到推送消息了。
3.商用版计费最低消费 30 元,应用所有的费用都可以从这里面抵扣吗?
商用版应用每日最低消费中国节点 30 元人民币、国际节点 5 美元,最低消费不包含文件存储空间和文件流量的费用。除文件费用外其他消费都先从 30 元中扣除。
4.如何修改 IM 聊天推送消息图标?
对于 iOS 来说,推送无法动态修改图标。对于 Andorid 来说因为各家没有统一的标准说都支持修改还是都不支持修改,所以也无法统一的做到发个推送所有收消息设备都能自动改图标。
5.统计服务下线以后还能继续使用「自定义参数」功能吗?
「自定义参数」不会下线,但会并入存储模块,合并到存储 API 里面进行统一计费。
6.统计分析功能要下线了,我可以付费继续使用吗?
我们将逐步下线移动分析服务,时间计划如下:
2019 年 1 月 17 号之后,停止接收客户端上报的数据,但是老的统计结果依然在控制台展示,并且继续开放 REST API 供开发者获取这些数据;
2019 年 2 月 27 号之后,将停止老的数据展示以及 REST API 下载,统计分析功能会被彻底下线。
考虑到个别用户的使用情况,我们也提供将统计服务私有部署的选项(有一次性的部署费用),如果您有此需求可以通过邮件(support@leancloud.rocks)或工单联系我们。
7.使用网站托管功能一定要实名认证吗?
为了遵守相关法律法规,我们需要对所有使用了 LeanCloud 云引擎网站托管功能的用户进行实名认证。如果启用了云引擎的网站托管功能(设置了 .leanapp.cn 的二级域名),必须在控制台「帐号设置」中进行实名认证。如果在 2019 年 1 月 15 日前还未完成实名认证,我们会暂时撤销您的二级域名,互联网用户将无法直接访问。
8.美国节点不能使用支付宝充值吗?美国节点怎么开发票呢?
美国节点用户需要使用国外银行账户充值,或者通过 PayPal 充值。因为美国节点的运营主体已经切换为 LeanCloud 的境外公司(也就是 Paypal 付款的接收方),无法再以国内公司的名义开具发票,我们会和其他国外的服务商一样,每个月根据实际消费额为您生成电子发票。发票会在月账单出具后(通常是每个月 4 日)自动生成,可在控制台账单页面下载。
2018 年 11 月常见问题
1.使用命令行工具 CLI :lean login 无法部署到美国节点,总是提示未登录
美国节点用户需要使用参数 --region=US 进行登录,华东节点使用 --region=TAB,不加 region 参数则默认为华北节点。
//美国节点
lean login --region US
//华东节点
lean login --region=TAB
//华北节点
lean login
2.创建 Class 时报错 154,创建失败为什么呢?
目前每个应用最多允许创建 300 个 Class,超出这个数量不允许再新建 Class,会报错 154 来提示。
3.客户端调用云函数计入 API 请求数吗?
调用云函数本身目前是不计入的,但云函数中产生的其他云存储请求是计入的。
2018 年 9 月- 10 月常见问题
1.使用 LeanCloud 短信服务,每个应用有多少条免费短信额度?
免费额度不是按照条数计算,每个 LeanCloud 账户有 5 元的免费短信额度,超出额度需要进行付费充值。
这里 5 元的免费额度是每个账户的额度,而不是每个应用。
2.发送短信时,一条短信里最多能编辑多少个字?
一条短信可编辑 70 个字符(含中英文标点)。小于或等于 70 个字符,均按一条计费。
超过 70 个字符则每条按照 67 个字符来计算条数,一条短信(手机中显示)最长可以发 400 字符。
400 字符的短信收费计算公式为:400/67 = 5.9, 也就是会扣 6 条短信费用。
3.国外用户可以使用国内节点吗?中国华北节点/中国华东节点/美国节点 这三个节点如何选择?
国外用户多数时间是可以访问国内节点的,但因跨境网络所以不能提供保证。
如果用户主体大部分在国外,建议选择美国节点。
如果用户主体大部分分布在华北区域,建议选择华北节点。
同理,如果用户主体多数分布在华东区域,建议选择华东节点。
4.LeanCloud 扣费方式在本月有调整。
文件存储服务不再参与抵扣每日的商用版最低消费。商用版最低消费不再延迟三天扣费,产生消费的次日即扣除商用版最低消费。
5.推送记录会保留多久,可不可以查询去年的推送记录?
推送记录只保留 7 天,7 天之前的推送记录无法查询。
6. Android 非混合推送设备,控制台推送记录中显示推送成功,但 Android 设备实际没有收到推送,该怎么排查原因?
对于 Android 非混合推送设备,当返回的记录成功数为 1 时,表示 SDK 确认收到该消息的回应。此条推送消息一定是到达了设备。
检查推送消息中有 action 字段,表示在使用自定义 Receiver 功能,消息到达后 SDK 会直接将消息转交给自定义 Receiver,由自定义 Receiver 完成推送提醒。
这种情况需要检查自定义 Receiver 实现逻辑排查消息到达后为什么没有弹出提醒。
7.即时通信服务中,一个房间内的消息有没有优先级?有些消息类型及时性要求特别高,有些消息及时性要求不高。
LeanCloud 有消息优先级的概念,为了保证消息的时效性,当聊天室消息过多导致客户端连接堵塞时,服务器端会选择性地丢弃部分低等级的消息。
当某个用户连接因为消息过多出现阻塞写入缓慢的情况下,用户可以考虑指定消息优先级,低优先级消息在堵塞时我们会丢弃,高优先级消息则永久排队等待下发。默认情况下消息都是高优先级。
此功能仅针对聊天室消息有效。普通对话的消息不需要设置等级,即使设置了也会被系统忽略,因为普通对话的消息不会被丢弃。
8.合同与财务发票类问题提交工单后的反馈
工单仅回复技术类问题。由于财务同事并不在工单系统,合同与财务发票类问题请发邮件至:support@leancloud.rocks。
2018 年 8 月常见问题
1.默认值的查询结果为什么不对?
这是默认值的限制。MongoDB 本身是不支持默认值,我们提供的默认值只是应用层面的增强,对于老数据只是在查询后做了展现层的优化。有两种解决方案:
- 对老的数据做一次更新,查询出 key 不存在 ( whereDoesNotExist ) 的记录,再更新回去。
- 查询条件加上 or 查询,or key 不存在 ( whereDoesNotExist ) 。
2. Egret 中调用 LeanCloud 出现 TypeError: Cannot read property ‘createdAt’ of null。
解决方案参考: https://github.com/leancloud/weapp-polyfill 这里的实现,直接修改 Egret 的 weapp-adapter.js 。
3. 请问域名备案的审核大概需要多久?
域名备案流程正常 20 个工作日,LeanCloud 会先提交初审,初审通过后会进行复审,最后递交管局审核。
2018 年 7 月常见问题
1.使用 Objective-C SDK 的文件下载注意事项
如下代码,从网络路径构建文件 file 对象后,直接调用 download 方法运行后会报错:
Error Domain=com.LeanCloud.ErrorDomain Code=1 "objectId invalid." UserInfo={NSLocalizedFailureReason=objectId invalid.
AVFile *file =[AVFile fileWithRemoteURL:[NSURL URLWithString:@"http://ww3.sinaimg.cn/bmiddle/596b0666gw1ed70eavm5tg20bq06m7wi.gif"]];
[file downloadWithProgress:^(NSInteger number) {
//下载的进度数据,number 介于 0 和 100。
} completionHandler:^(NSURL * _Nullable filePath, NSError * _Nullable error) {
// filePath 是文件下载到本地的地址
}];
这是因为文件下载方法 只能下载 File 表存在的 AVFile 对象 ,即下载的 file 对象需要存在 objectId。上面的代码构建文件对象后没有将图片上传到 File 表,所以下载时会找不到文件的 objectId 而报错。
2. React Native 环境中使用 JavaScript SDK 的应用内社交模块,报错找不到 AV.Status 这个类。
这是因为在 React Native 环境中,Status 功能需要用户登录才可以使用。请保证在调用相关的 API 之前,用户已经处于登录状态。
即在使用 AV.Status 之前调用过 AV.User.currentAsync()。
3. JavaScript SDK v3.0 以后的版本中为对象设置角色的访问权限的注意事项。
创建 Role 时 acl 参数不再是可选的。在 v2 中,如果不指定,SDK 会自动为其设置一个 public read-only 的默认 acl,在新版中必须显式的指定。
// v2.0 用法
new AV.Role('admin');
// v3.0 中等价于
var acl = new AV.ACL();
acl.setPublicReadAccess(true);
new AC.Role('admin', acl);
4. 云引擎 node.js 有结合 websocket 的使用教程吗?
node.js 结合 websocket 的使用 Demo: websocket 的使用 Demo
云引擎 Node.js 各类小 Demo 汇总项目: leanengine-nodejs-demos
2018 年 6 月常见问题
1.消息发送文本内容长度有限制吗?
客户端发送的单条消息大小不得超过 5 KB。当超过这个数值时,会报错:「4110-INVALID_ORIGIN」。
2.我的发票抬头写错了怎么办?
如果发票在后台的审核状态仍然在「审核中」,可以自行撤销后,更改为正确的发票抬头重新提交;如果是发票已经开出,收到快递后才发现抬头填错,请发邮件至 support@leancloud.rocks,说明情况,并将错误的发票寄回 LeanCloud 后,LeanCloud 重新开具。
5 月常见问题
1.云引擎命令行如何登录美国节点?
使用 lean login --region=US。
2.iOS 如何查看服务器返回的错误?
某个请求出错,SDK 会返回对应的错误信息。错误信息格式如下:
-
error.code:错误码,详见 文档。
-
error.domain:错误域名,只有当 error.domain = kLeanCloudErrorDomain 时,才是 LeanCloud 返回的错误。
-
error.localizedFailureReason:错误信息详情。
-
error.userInfo:其他信息,如历史版本的兼容信息等。
例如 User 表中已经存在一个叫 Tom 的用户,再次注册用户名为 Tom 会报错「用户已经存在」,示例代码如下:
AVUser *user = [AVUser user];
user.username = @"Tom";
user.password = @"cat!@#123";
[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
// 获取 RESTAPI 返回的错误信息详情(SDK 11.0.0 及以上的版本适用)
if ([error.domain isEqualToString:kLeanCloudErrorDomain] && error.code == 202) {
NSString *errorMessage = error.localizedFailureReason;
if (errorMessage) {
// handle error message
}
}
}];
3.GPDR 要求欧洲用户的数据都保存在欧洲境内的服务器,如何处理?
两种方式:
一、在欧洲境内租用一个服务器,把 LeanCloud 的数据每天 导出 后转存过去。
二、更新 App 的用户协议,让用户 允许将其数据保留在欧盟境外。
4 月常见问题
1. 最近收到微信的通知,5 月 29 号将要更换服务器证书,需要进行根证书验证。LeanCloud 是否已经升级,并匹配微信官方的标准?
是的,LeanCloud 已经完成相关配置。开发者不用做任何改动。
2. 对象只允许创建一个 GeoPoint 属性吗?
是的,每个 AV.Object 数据对象中只能有一个 AV.GeoPoint 对象的属性。并且,地理位置的点不能超过规定的范围。纬度的范围应该是在 -90.0 到 90.0 之间,经度的范围应该是在 -180.0 到 180.0 之间。如果添加的经纬度超出了以上范围,将导致程序错误。
3. 第三方服务突然提示访问 IP 地址有变动,云引擎出口 IP 地址会变化吗?
是的,会有变化。但我们会尽可能减少出入口 IP 的变化频率,但 IP 突然变换的可能性仍然存在。因此在遇到与出入口 IP 相关的问题,我们建议先进入控制台来核实一下 IP 列表是否有变化。
如果开发者希望在第三方服务平台(如微信开放平台)上配置 IP 白名单而需要获取云引擎的入口或出口 IP 地址,请进入 控制台 > 云引擎 > 设置 > 出入口 IP 来自助查询。
2 月- 3 月常见问题
1. 文件存储的域名是不是发生了变化?
是的。由于不可抗力原因,华北节点上 LeanCloud 文件存储服务商默认提供的公用二级域名 qbox.me 和 clouddn.com 等域名已经失效,不再可用,切换到了公有域名 lcfile.com。
2. 开发上需要因此做什么变更吗?
您如果没有在任何地方写死文件 URL,不需要做任何变更操作。如果有的话,请替换文件域名里的:
- dn-i4obrreg 变更为 lc-i4obrreg。i4obrreg 是您应用 App ID 的前八位,保持不变即可。
- 域名 qbox.me 或者.clouddn.com 变更为 .cn-n1.lcfile.com。
比如,https://dn-i4obrreg.qbox.me/ixlrIWsVSIzOp57mJ7CVjFAVYCjkulWbYEVMaK65.jpg 会变更为https://lc-i4obrreg.cn-n1.lcfile.com/ixlrIWsVSIzOp57mJ7CVjFAVYCjkulWbYEVMaK65.jpg 。
3. 文件域名以后是否还会继续变化,或者不可用?如何将影响降低到最小?
仍然存在这种可能。为了规避 url 变更或者不可用的风险,建议您为华北节点上的应用绑定自定义文件域名,请前往应用控制台的「存储」->「设置」里自助绑定文件域名。
1 月常见问题
1.如何强制一个登录的 AVUser 用户下线?
应用场景:用户手机被偷了,然后因为手机上的应用一直有用户缓存,所以不需要用户密码就能登录成功。有没有办法强制该用户下线?
解决方案:在安全的云引擎后端环境里,使用 Master Key,调用 重置登录 sessionToken 的接口来强制刷新用户的 sessionToken。
2.云引擎升级到 3.x 后云函数返回的数据变了,如何操作?
从 leanengine 2 升级到 3 是一个大版本的升级,在这次升级中,我们把配套的 leancloud-storage 升级到了 3。在 leancloud-storage 3.0.0 中,我们重新设计了 AV.Object 的两个序列化方法: #toJSON 与 #toFullJSON。在新版中,AV.Object#toJSON 的定位是输出对象的有效信息,可以传给视图层直接消费。新增 AV.Object#toFullJSON,定位为序列化方法,输出包括类型信息在内的所有信息,可以用来实现对象的持久化。
在云引擎的两个远程调用的 API,AVCloud.run 对应的返回值是「数据」,因此在云引擎返回时我们会应用 #toJSON 方法,SDK 看到的是 Hashmap。而 AVCloud.rpc 对应的返回值是 AVObject,因此在云引擎返回时会应用 #toFullJSON 方法,SDK 解码后看到的是 AVObject|AVFile。
综上,这是 leanengine@3 中为了更好区别这两个 API 的使用场景,有计划的不兼容改动。
12 月常见问题
1.如何设置文件的独立域名?
请发邮件至 support@leancloud.rocks 向我们提供「要绑定应用的 App ID 」和一个没有用过的二级域名,比如 avfile.xxx.com,其中 xxx.com 必须是一个已备案有 ICP 号的域名。如果需要为文件设置 https 访问,请同时提供 SSL 证书(.crt)和无密码的私钥(.key);
我们会回复给您一个域名地址,格式为 xxxxxx.qiniudns.com;
您将 avfile.xxx.com 的 CNAME 设置为 xxxxxx.qiniudns.com,然后通过邮件通知我们;
我们确认无误后便将您账户下的应用切换为指定的自定义域名 avfile.xxx.com,您可以在控制台中查看 _File 表来确认 URL 的合法性。
2.免费的离线数据分析比较慢,有更快的付费方案吗?
我们的离线分析独立部署,是根据业务需求来分步实施的。不同的环节独立出来费用是不一样的,主要有:
计算节点独立。这样的话可以保证应用有独立的 job 排队队列和执行节点,不会跟别的应用竞争(应用内排队还可能存在)。这种情况下,我们计费的基本单元是一个标准的计算节点(1 CPU / 2 G 内存)一个月费用 600元,应用可以根据自己的需求来购买不同数量的计算节点。
数据源独立。这是指,来源数据从数据库导入到单独的、专为计算分析优化的分布式存储系统,这样的计算过程会更加快速。这个方案成本较低,我们会每天做一次数据转储,费用按照每天转储数据量的峰值来收费(大概计费标准是 300 元/G/月——每天转储的数据规模不超过 1G,那么一个月费用 300 元)。但是该方案的数据是每天转储一次的,所以使用时会有一天的延迟。
如果希望对实时数据进行分析计算,并且还希望每次都能非常快速地得到结果,就需要对底层数据库进行独立部署,这一操作费用会比较高。
11 月常见问题
1. AVFile 被删除之后,文件的 URL 为什么还可以被访问?
文件在存储成功之后,为了保证访问速度,会在各个 cdn 节点上全部复制一份。而删除该文件后,同样需要去各个 cdn 节点上依次进行删除。目前这个过程,一般需要 1 个工作日的时间。
2. Android 8.0 系统下,PushService 会引起崩溃?
这个问题是 8.0 系统的权限收紧引起的。大家可以在 AVOSCloud.initialize 之前调用代码 PushService.setAutoWakeUp(false),禁止掉 PushService 的自启动。这样能暂时规避这个问题。
与此同时,我们预计在 11 月底发布对 Android 8.0 的全面适配。
3. 云引擎中如何直接访问一个静态文本文件?
如果要让 webServer 访问静态文件,需要使用 static 中间件,或者类似于 示例项目 配置的方式配置一个目录,然后把静态文件保存在该目录中再访问。
10 月常见问题
1. 我新建了一个应用,想做一些测试数据。如何把旧应用的数据复制过来?
答:先在旧应用导出数据,操作步骤参见:https://leancloud.cn/docs/dashboard_guide.html# 云端数据导出到本地。然后下载账户邮箱收到的导出数据,导入新应用,操作步骤参见:https://leancloud.cn/docs/dashboard_guide.html# 本地数据导入_LeanCloud.
2. 为什么云引擎 Node.js 环境不能通过 AV.User.current() 获取 currentUser?
答:云引擎 Node.js SDK 是供云引擎访问 LeanCloud API 的 Node 模块,它内部依赖了 JavaScript SDK. 但和在浏览器中不同,云引擎是一个「多用户」的环境,作为服务器端程序需要同时处理来自不同用户的请求。而 Node.js 本身是异步模型,这些来自不同用户的请求会交织在一起,在同一个全局作用域中运行。
JavaScript SDK 提供了 AV.User.current() 和其他一些函数全局地设置或获取用户状态,当(通过 AV.User.logIn 或 AV.User.become)设置了用户状态,后续的所有请求都会附带上这个用户的 sessionToken, 以便服务器知道以哪个用户的权限去执行这次操作。
更详细的参见:https://leancloud.cn/docs/leanengine-node-sdk-upgrade-1.html# 废弃_currentUser