月度归档:2019年06月

为结构化数据存储、文件和云引擎服务设置自定义域名的通知

近期 leancloud.cn 和 lncld.net 域名被注册商阿里云禁用的问题,给您的业务造成重大影响,我们非常抱歉!现在域名访问已经恢复,对事情的始末以及统一的处理方案我们会稍晚呈送一份报告,目前我们还在同步落实相关的防范措施,确保能长期稳定提供服务。

按照主管部门的指示,对于有 UGC 内容(如结构化数据存储、文件存储和云引擎)的在线服务,出于监管之目的,都需要业务方绑定自有域名。从长远来看,这也是从域名层面做好应用隔离,确保您业务稳定的有效措施。LeanCloud 之前已经提供了绑定文件和云引擎自定义域名的接口,上周末我们快速上线了绑定 API 自定义域名的功能,所以现在请尽快为您账户下的应用绑定自定义域名。在一段时间之后,如果应用没有绑定自定义域名,我们将无法提供存储和云引擎服务。另一方面,对于已经绑了域名的应用,我们仍将尽力保持原有域名和目前的替代域名(avoscloud.com)长期有效,以保证您现有应用中既存的老版本客户端可继续运行。对于备案域名有困难的个人用户,可以使用 LeanCloud 国际版

我们现在已经支持在控制台自助绑定自定义域名,具体路径如下:

由此给您造成的不便,我们深感抱歉,希望您能从业务长期稳定发展的角度出发,协助我们尽快完成这一变更。

再次感谢您的理解和配合!

请所有用户尽快完成实名认证的通知

尊敬的用户,您好

根据国家《网络安全法》的要求,使用 LeanCloud 服务的用户必须进行实名认证(个人或者企业认证):

第二十四条 网络运营者为用户办理网络接入、域名注册服务,办理固定电话、移动电话等入网手续,或者为用户提供信息发布、即时通讯等服务,在与用户签订协议或者确认提供服务时,应当要求用户提供真实身份信息。用户不提供真实身份信息的,网络运营者不得为其提供相关服务。

为了协助大家尽快完成信息认证,我们预留了一个月的过渡期(6/25-7/25)。从即日起,对于未进行实名认证的账户,我们将禁止其创建或者激活应用,并禁止应用转移以及数据导入导出等操作,应用内具体的 API 请求不受影响;过渡期后我们会完全停止为尚未提交认证信息的账户提供服务。

登录 LeanCloud 控制台 后,在 账号设置 – 实名认证 的页面即可完成操作,请未进行实名认证的开发者尽快完成认证,感谢大家的理解和配合。

谢谢!

LeanCloud 国内域名已开始恢复

各位用户大家好,

在昨天向有关部门提交了一份更详细的报告后,今天阿里云通知我们已经接到有关部门通知,将对我们的域名解封。约 12 点 30 分时,经过我们的验证,域名在阿里云的注册系统中恢复正常状态。但是状态更新预计还需要一段时间才能传递到全球的 DNS 服务器。

在原域名恢复后,请各位用户仍按照我们之前的通知绑定自己的 API 域名、云引擎网站域名(如果使用了该功能)。

我们知道很多用户和 LeanCloud 一样因为这次事件蒙受了重大损失,需要对事情的始末有更详细了解。目前我们仍需要执行一些后续的防范措施,有一些信息还不宜披露。在这些措施完成后,在不违背相关法律法规、不传播违法或需保密信息的前提下,我们会向用户发布一份报告,说明我们所能了解到的所有事实。

关于 LeanCloud 国内域名问题的更新(6 月 24 日)

各位用户,大家好。我想继续向大家更新一下我们在解决域名问题方面的进展。

为了尽快恢复老域名,我们今天再次拜访了有关部门并提交了更多的证明材料,不过因为涉及多层政府部门,我们对于进展的影响有限,目前仍然无法给用户承诺老域名恢复的时间。我们建议用户尽快完成域名的切换,并尽快绑定自己的已备案域名。

在我们可控的范围内,我们在周末和今天完成了以下一些措施:

  • 修复了因为域名变更导致的论坛不可用的问题。(论坛域名为 https://forum.avoscloud.com,如果您访问时跳转到老域名,有可能需要清空浏览器缓存)。
  • 为了保证现有用户的利益,我们暂停了华北和华东节点的注册。需要新建账户的用户可以用 email 联系我们(support@leancloud.rocks) 并提供基本的企业信息。对于后端不是必须在国内的用户或非企业用户,可以使用国际版。
  • 修复了用户反馈的因切换域名出现的 bug。
  • 完善了关于切换替代域名绑定自定义 API 域名的文档。
  • 按照有关部门的规定,即使在原有域名恢复后,各应用仍需绑定自己的 API 域名。在一段时间之后,我们将无法向不绑定自有域名的应用服务。我们仍将保持原有域名和目前的替代域名长期有效以保持旧版本应用的兼容性。目前我们可以协助商用版用户完成新域名的备案,但由于人力所限开发版用户暂时只能绑定已经备案的域名。已经绑定过云引擎网站域名的用户需要注意,这和 API 域名是两个域名,所以您仍将需要绑定 API 域名。

我们在过去的几天里针对此次域名事件快速确定了对服务模式需要作出的改变以在未来消除类似的风险,我们在国内将更加专注于服务好商业用户,并确保各应用有很高的隔离性和抗风险性,不同用户之间不共用任何顶级域名,各应用也将不再依赖 LeanCloud 自有的域名。我们将在未来较短的时间里公布和实现这些措施。

再次感谢各位用户的耐心和支持。

LeanCloud 江宏

关于 LeanCloud 国内域名解析问题的情况更新(6 月 21 日)

各位 LeanCloud 的用户大家好,我是 LeanCloud 的联合创始人江宏。

大部分用户都已经知道我们的两个域名目前无法解析,具体的情况我们昨天给大家发了邮件和博客说明,今天又再次发了短信通知。虽然这件事还没有解决,但本着对事件处理过程透明的原则,我想向大家更新一下最新进展,以及我们已经采取的措施。

由于在域名被禁用前没有事先通知我们,所以昨天我们在事情发生一段时间之后也不知道具体的原因。后来经过和阿里云各相关消息渠道一段时间的沟通后得知是因为某违规应用被查封,所以该应用访问的域名受到牵连。我们到目前为止没有看到有关函件的内容。根据应用名判断,我们已经于一个月前就清查和处理过这个应用,禁用了相关账号,这次不知因什么原因仍然被该应用影响导致两个域名被设为 ClientHold。我在今天下午拜访了有关部门,递交了我们的处理情况说明、申诉和保证,仍需要等待确认才可以解禁。很抱歉目前原有域名的恢复时间取决于政府部门之间的沟通进展,我们也无法给用户准确的估计。

在我们可控制的范围内,我们针对这件事已经完成的应对措施有:

  • 为可以替换域名的用户提供可用的替代域名,说明见博客
  • 我们 iOS、Android、JS、Unity 等 SDK 都做了紧急更新,以避免国际版的应用受国内域名的影响。
  • 为避免在解决问题过程中出现其它问题,华北和华东节点暂停新开发版应用的创建。如果您有需要可以用邮件联系我们创建,或者使用国际版。
  • 华北节点提供了自助绑定 API 自定义域名的功能,自定义域名可用于访问数据存储、云函数、短信、推送以及即时通讯服务。你可以在控制台的「存储 -> 设置 -> 自定义 API 服务域名」中提供一个已备案的域名(如需开启 HTTPS 还需提供对应的证书)来自助绑定。详细的自定义域名的配置和使用文档参见另一篇博客

我们还有一些正在实施的措施,既为了应对目前情况,也为了在更长期能把特殊国情带来的特殊风险限制在尽量小的范围。我们也会把后续的和有关部门的沟通结果同步给用户。有一些用户因为域名解析问题无法联系我们,请注意我们的各个线上联系渠道有的使用了临时域名:

很多用户在此次事件的沟通中给予了我们宝贵的宽容、支持和信任。我想特别向我们的用户表达感谢,并将继续尽我们所能克服未来可能遇到的困难,服务好用户。

华北节点支持绑定 API 自定义域名

现在华北节点支持绑定 API 自定义域名。你可以在控制台的「存储 -> 设置 -> 自定义 API 服务域名」中提供一个 已备案 的域名(如需开启 HTTPS 还需提供对应的证书)来自助绑定。

自定义域名目前可用于访问以下 API 服务:

  • 数据存储
  • 短信
  • 推送
  • 云函数

自定义域名不适用以下 API 服务:

  • 即时通讯的 web socket(绑定自定义域名后仍旧使用 avoscloud.com

另外,以下服务使用独立的自定义域名:

  • 云引擎网站托管
  • 文件存储服务

换句话说,如果之前在这两个服务上绑定过自定义域名,现在想绑定 API 自定义域名,那么需要在 API 上绑定另一个域名(包括不同的子域名)。

具体绑定及配置方法见 API 自定义域名绑定指南

关于 LeanCloud 国内域名解析问题的情况更新

我们监测到从今天(06/20)下午开始各个地区陆续出现部分网络无法解析华北节点的 api.leancloud.cn 以及 *.lncld.net 域名的问题。通过和我们的域名注册商阿里云沟通,得知他们接到有关部门行政命令将一批域名设置为 ClientHold 状态,其中包括 leancloud.cn 和 lncld.net,但是没有可执行的其它信息可以提供给我们。目前我们仍在和阿里云沟通中。
这个问题目前影响到从公网使用 leancloud.cn、lncld.net 及其子域名的服务,包括:

  • 华北节点:从公网对存储及即时通讯服务的调用
  • 华东节点:即时通讯服务和部分使用老版本 SDK 访问存储服务的应用
  • 美国节点部分仍在使用 us-api.leancloud.cn 从公网调用存储服务的老应用
  • 美国节点的即时通讯服务(我们在做一些改动降低影响范围)

不受影响的服务有

  • 各节点:云引擎的公网访问及云引擎对存储、即时通讯服务 API 的访问
  • 对华东节点存储服务的访问
  • 美国节点的大部分应用(使用新域名的应用)对存储服务的访问

在争取尽快彻底解决问题的同时,我们也提供了让用户可以暂时切换的域名。如果您是从服务端,或者 JavaScript 代码调用 LeanCloud 的服务,可以按照这里的说明来切换到新域名。

感谢您的耐心和理解。我们会及时与用户沟通新的进展。

域名无法访问的临时解决方案

我们监测到从今天(06/20)下午开始各个地区陆续出现部分网络无法解析 leancloud.cn 以及 ***.***.lncld.net 域名的问题。我们正在全力和域名提供商沟通该问题的解决方案。在问题彻底解决之前,我们建议开发者更换域名作为临时解决方案。

开发者如何访问 LeanCloud 控制台等服务

将原域名 leancloud.cn 切换成 avoscloud.com 即可:

官网:https://avoscloud.com/
博客:https://blog.avoscloud.com/
健康状态:https://status.avoscloud.com
论坛:https://forum.avoscloud.com

华北节点控制台:https://avoscloud.com/dashboard/
华东节点控制台:https://tab.avoscloud.com
美国节点控制台:https://us.avoscloud.com

华北节点

云引擎

云引擎本身不受影响(因为云引擎内部运行的代码访问 API 走的是内网),但是命令行工具部署代码可能有问题,需要进行如下配置后才能正常使用:

0) 升级命令行工具到最新版 0.20.1

1) 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://avoscloud.com
export LEANCLOUD_API_SERVER=https://avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://avoscloud.com
set LEANCLOUD_API_SERVER=https://avoscloud.com

2) 使用 lean login 重新登录

当然,如果在云引擎托管网站,其中的客户端 JavaScript 访问 LeanCloud API,
仍然需要按照下面 JavaScript SDK 一节中的方法切换域名。

服务端应用

如果是在自己的服务器上跑的应用(包括通过 REST API 和 SDK),
最简单快捷的方法是修改服务器的 /etc/hosts,加入以下行:

117.50.12.165        leancloud.cn
123.59.50.132        app-router.leancloud.cn
123.59.58.149        router-g0-push.leancloud.cn

此外,还需要加上 {{appid 前八位}}.api.lncld.netapi.leancloud.cn 这两项记录。

这两项记录的 IP 值通过在命令行 dig avoscloud.com 获取(在 ANSWER SECTION 部分查看结果),
dig 命令可能返回多个 IP,任选其一即可。

如果需要访问云函数,还需加上 {{appid 前八位}}.engine.lncld.net 这条记录,IP 值同样通过 dig avoscloud.com 获取。

注意,如果需要在本地调试服务端应用,那么本地机器的 hosts 文件同样需要修改(不同操作系统的 hosts 文件路径不同,请自行搜索相关方法)。

REST API

注意:

  1. 在云引擎内访问 REST API,同样走的是内网,不受影响,无需修改代码。
  2. 服务端访问 REST API 的话,请优先尝试上面提到的修改 /etc/hosts 的方法,不用修改代码。

客户端访问 REST API,需要在代码中将 api.leancloud.cn{{appid 前八位}}.api.lncld.net 域名替换为 avoscloud.com

客户端通过 REST API 访问云函数,需要将 {{appid 前八位}}.engine.lncld.net 替换为 avoscloud.com

SDK

注意:

  1. 云引擎 SDK 不受影响,无需修改代码。
  2. 服务端 SDK,请优先尝试上面提到的修改 /etc/hosts 的方法,不用修改代码。

客户端 SDK 需要进行如下修改:(注意,只有较新版本的 SDK 才支持设定 API 服务器地址)

JavaScript SDK

存储 SDK(3.0.0 以上支持,建议升级到 3.11.1 以上,详情见下)

AV.init({
  // appId, appKey,
  serverURLs: 'https://avoscloud.com',
});

>= 3.5.5, < 3.11.1 的应用可能会碰到仍然使用缓存默认配置的 bug,
更新后应用打开的第一次请求可能失败。

>= 3.0.0, < 3.5.5 的应用 不能按上述方法设置,需要使用如下的写法:

AV.init({
  // appId, appKey,
  serverURLs: {
    push: 'https://avoscloud.com',
    stats: 'https://avoscloud.com',
    engine: 'https://avoscloud.com',
    api: 'https://avoscloud.com',
  },
});

如果你使用了 LiveQuery 功能,还需要在初始化的时候额外指定 LiveQuery 模块的域名配置(需要版本 >= 3.5.0):

AV.init({
  // appId, appKey,
  // serverURLs,
  realtime: new AV._sharedConfig.liveQueryRealtime({
    appId,
    appKey,
    server: 'example.com',
  }),
});

即时通讯 SDK(4.0.0 以上支持)

new Realtime({
  // appId, appKey,
  server: {
    api: 'avoscloud.com',
    RTMRouter: 'router-g0-push.avoscloud.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://game-router-cn-n1.avoscloud.com/v1',
});
微信小程序

微信小程序白名单增加:

存储:
request:https://avoscloud.com

即时通讯:
request:https://router-g0-push.avoscloud.com/
Socket:
wss://cn-n1-cell1.avoscloud.com,
wss://cn-n1-cell2.avoscloud.com,
wss://cn-n1-cell5.avoscloud.com,
wss://cn-n1-cell7.avoscloud.com

多人在线对战:
Request:https://game-router-cn-n1.avoscloud.com/
Socket:
wss://cn-n1-wechat-mesos-cell-1.avoscloud.com
wss://cn-n1-wechat-mesos-cell-2.avoscloud.com
wss://cn-n1-wechat-mesos-cell-3.avoscloud.com
wss://cn-n1-wechat-mesos-cell-4.avoscloud.com

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://router-g0-push.avoscloud.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://avoscloud.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK(16.1.0 以上)

let configuration = LCApplication.Configuration(
    customizedServers: [
        .api("https://avoscloud.com"),
        .engine("https://avoscloud.com"),
        .push("https://avoscloud.com"),
        .rtm("https://router-g0-push.avoscloud.com")
    ]
)
try LCApplication.default.set(
    id: "APP_ID",
    key: "APP_KEY",
    configuration: configuration
)

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://avoscloud.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://avoscloud.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://avoscloud.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://router-g0-push.avoscloud.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://avoscloud.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://avoscloud.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://avoscloud.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://router-g0-push.avoscloud.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.NET SDK

AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://avoscloud.com"),
                EngineServer = new Uri("https://avoscloud.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://router-g0-push.avoscloud.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://game-router-cn-n1.avoscloud.com/v1");
await client.Connect();

PHP SDK 和 Python SDK

这两个属于服务端 SDK,请使用上面「服务端应用」一节提到的修改 /etc/hosts 的方法,不用修改代码。

华东节点

华东节点的大部分服务不受此次事件的影响。

云引擎命令行工具

0) 升级命令行工具到最新版 0.20.1

1) 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://tab.avoscloud.com
export LEANCLOUD_API_SERVER=https://avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://tab.avoscloud.com
set LEANCLOUD_API_SERVER=https://avoscloud.com

2) 使用 lean login 重新登录

JavaScript

即时通讯 SDK

const appId = 'YOUR_APP_ID';
new Realtime({
  // appId, appKey,
  server: {
    api: 'APPID 前八位.api.lncldapi.com',
    RTMRouter: 'APPID 前八位.rtm.lncldapi.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://{{APPID 前八位}}.play.lncldapi.com/1/multiplayer/router',
});

如果在小程序中使用,还需要将 APPID 前八位.api.lncldapi.comAPPID 前八位.rtm.lncldapi.comAPPID 前八位.play.lncldapi.com 添加到域名白名单列表中。

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.api.lncldapi.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.push.lncldapi.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.engine.lncldapi.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.rtm.lncldapi.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.stats.lncldapi.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK 升级到最新版即可。

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://{{APPID 前八位}}.api.lncldapi.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://{{APPID 前八位}}.engine.lncldapi.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://{{APPID 前八位}}.push.lncldapi.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://{{APPID 前八位}}.rtm.lncldapi.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://{{APPID 前八位}}.api.lncldapi.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://{{APPID 前八位}}.engine.lncldapi.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://{{APPID 前八位}}.push.lncldapi.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://{{APPID 前八位}}.rtm.lncldapi.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.NET SDK

// 配置存储和云引擎
AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://{{APPID 前八位}}.api.lncldapi.com"),
                EngineServer = new Uri("https://{{APPID 前八位}}.engine.lncldapi.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://{{APPID 前八位}}.rtm.lncldapi.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://{{APPID 前八位}}.play.lncldapi.com/1/multiplayer/router");
await client.Connect();

美国节点

美国节点的大部分服务不受此次事件的影响。

云引擎命令行工具

0) 升级命令行工具到最新版 0.20.1

1) 根据具体的环境,执行下列命令:

Shell 环境

export LEANCLOUD_DASHBOARD=https://us.avoscloud.com
export LEANCLOUD_API_SERVER=https://us.avoscloud.com

Windows 环境

set LEANCLOUD_DASHBOARD=https://us.avoscloud.com
set LEANCLOUD_API_SERVER=https://us.avoscloud.com

2) 使用 lean login 重新登录

在 Shell 中执行 export LEANCLOUD_DASHBOARD=; export LEANCLOUD_API_SERVER= 后再运行命令行工具(需要用 lean login 重新登录)

JavaScript

即时通讯 SDK

const appId = 'YOUR_APP_ID';
new Realtime({
  // appId, appKey,
  server: {
    api: 'APPID 前八位.api.lncldglobal.com',
    RTMRouter: 'APPID 前八位.rtm.lncldglobal.com',
  },
};

多人在线对战 SDK

new Client({
      appId: '',
      appKey: '',
      userId: 'tar1',
      playServer: 'https://{{APPID 前八位}}.play.lncldglobal.com/1/multiplayer/router',
});

如果在小程序中使用,还需要将 APPID 前八位.api.lncldglobal.comAPPID 前八位.rtm.lncldglobal.comAPPID 前八位.play.lncldglobal.com 添加到域名白名单列表中。

iOS SDK

Objective-C SDK

// 配置 SDK 储存
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.api.lncldglobal.com" forServiceModule:AVServiceModuleAPI];
// 配置 SDK 推送
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.push.lncldglobal.com" forServiceModule:AVServiceModulePush];
// 配置 SDK 云引擎
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.engine.lncldglobal.com" forServiceModule:AVServiceModuleEngine];
// 配置 SDK 即时通讯
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.rtm.lncldglobal.com" forServiceModule:AVServiceModuleRTM];
// 配置 SDK 统计
[AVOSCloud setServerURLString:@"https://{{APPID 前八位}}.stats.lncldglobal.com" forServiceModule:AVServiceModuleStatistics];
// 初始化
[AVOSCloud setApplicationId:APP_ID clientKey:APP_KEY];

Swift SDK 升级到最新版即可。

Android SDK

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://{{APPID 前八位}}.api.lncldglobal.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://{{APPID 前八位}}.engine.lncldglobal.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://{{APPID 前八位}}.push.lncldglobal.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://{{APPID 前八位}}.rtm.lncldglobal.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

Java Unified SDK

import cn.leancloud.core.AVOSService;

// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://{{APPID 前八位}}.api.lncldglobal.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSService.ENGINE, "https://{{APPID 前八位}}.engine.lncldglobal.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://{{APPID 前八位}}.push.lncldglobal.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://{{APPID 前八位}}.rtm.lncldglobal.com");
// 初始化
AVOSCloud.initialize(this,APP_ID,APP_KEY);

.Net 即时通讯 SDK

// 配置存储和云引擎
AVClient.Initialize(new AVClient.Configuration {
                ApplicationId = appId,
                ApplicationKey = appKey,
                ApiServer = new Uri("https://{{APPID 前八位}}.api.lncldglobal.com"),
                EngineServer = new Uri("https://{{APPID 前八位}}.engine.lncldglobal.com")
            });
// 通过 RTM Router 配置即时通讯
var realtime = new AVRealtime(new AVRealtime.Configuration
           {
                ApplicationId = "app-id",
                ApplicationKey = "app-key",
                RTMRouter = new Uri("https://{{APPID 前八位}}.rtm.lncldglobal.com")
           });

多人在线对战,v0.5.0-alpha.0 及之后的版本

var client = new Client(appId, appKey, userId, playServer: "https://{{APPID 前八位}}.play.lncldglobal.com/1/multiplayer/router");
await client.Connect();

Android 推送 SDK(精简版)发布|五月汇报

产品动态

7 月 1 日起即时通讯和推送 REST API 将开启请求频率限制

2019 年 7 月 1 日起,我们将对推送和即时通讯服务中调用 REST API 进行消息操作开启频率限制(请注意,客户端通过 LeanCloud SDK 产生的行为不受此限制的约束),以此来提升服务质量和鼓励用户更合理的使用服务。在限制正式生效之后,单位时间内超限的 REST API 请求会被云端拒绝,并返回 429 错误码。因此,请您注意检查应用逻辑,并就最大限制做好相关的适配工作。接口详情请参考博客

为什么要增加这一限制呢?推送服务我们之前基本是免费使用的,后来虽然把它加入到了商用版套餐中,但是对于用量还是没有任何限制,这样导致的问题就是平台实际成本非常高,而开发者使用上毫无节制还会让平台峰值压力比均值高出百倍以上,直接影响服务的整体稳定性。因此我们现在才需要对使用方式进行一些限制,通过经济手段来引导大家合理的使用公有云的服务。商用版应用如有合理的需求希望突破此限制,请联系 support@leancloud.rocks 了解相关的付费方案。

关于限制门槛以及付费的阶梯方案,根据我们的统计数据来看,对 97% 的商用版用户来说都没有实质影响,而剩下的 3% 用户,也可能通过技术的平滑处理让请求频率降到限制之下,从而不需要额外付费。不管怎样,开发者都可以享受到更稳定的服务,这也能让系统峰值压力有所减缓,让服务提供方的成本有所降低,这实际上是一种「双赢」,是为了业务稳定和可持续发展而不得不进行的转变,希望开发者可以理解并支持我们,谢谢!

云引擎定时任务功能升级

我们重新设计了云引擎的定时任务功能,新的定时任务是接下来会发布的「云队列(Cloud Queue)」的一部分,它兼容之前的绝大部分用法,还添加了一些新特性:

  • 新的定时任务将不再有个数限制。
  • 新的定时任务可以向云函数传递自定义的参数(JSON 形式),可以配置在超时情况下的行为(重试或放弃)。
  • 新的定时任务在控制台界面上会显示上次运行结果和下次运行时间。
  • 新的定时任务被触发时会在云引擎日志中打印日志(包括执行结果)。
「云队列」功能预告

云引擎发布以来,经常会有用户跟我们提出「任务队列」一类的需求,在此之前我们都是推荐大家使用云缓存 Redis 的「Pub/Sub」功能来自己实现,现在考虑到需求的一般性和队列服务的高可靠性要求,我们决定在平台层面提供「云队列」的服务。「云队列」基于云引擎已有的云函数概念实现了重试、去重、结果查询、延时任务、定时任务等功能,是对云函数功能的一个补充。尚未运行的任务会以一种可靠的方式暂存在云队列,即使你的云引擎实例因部署、过载、崩溃而重启,任务也不会丢失,云队列会等待你的云引擎实例恢复正常后继续运行它们。

具体进展和使用方法,可以关注我们的博客和论坛公告。

Swift SDK 即时通讯功能(正式版)发布

本月我们发布了 Swift SDK 即时通讯功能的正式版(16.0.0),在 3 月份 beta 版基础上增加了本地缓存的功能,提升了效率和稳定性。同时,我们也同步推出基于新 SDK 开发的全新 Chat 应用,Chat 应用支持最新的 iOS 系统以及最近的三个 OS 大版本,它以开源 Demo 的形式推出,其主要目的是展示如何使用 Swift SDK 来实现各种聊天功能。

Android 推送 SDK(精简版)发布

LeanCloud 已经发布了一个标准版本的推送 SDK: LeanCloud Push SDK ,该 SDK 除了推送服务之外,还支持即时通讯和 LiveQuery 服务(共享同一个 WebSocket 长链接),并且由于即时通讯中对文件、图片、音视频消息等功能的支持,它还必须依赖于 LeanCloud 核心 SDK,因此整体上体积会稍大一些。

对于那些只使用我们推送服务的客户来讲,其实只需要提供设备注册(AVInstallation 存储)和消息接收(PushService)的相关操作即可,标准版 SDK 中大部分功能可能反而显得冗余。现在,我们有一些 VIP 客户正在优化产品移动端体验,安装包大小和启动时间是评测中的重要指标,为了协助他们做好优化,我们专门推出了这一精简版 SDK。

与标准版 SDK 相比,精简版 SDK 在体积和启动时间上的优化效果如下:

内容分享

每天我有多少时间可以写代码?

11

大家好,我是老王,程序员一枚,也是 LeanCloud 团队家属。家属因为工作原因,经常以调研(diao cha)为由咨询(shen wen)我一些问题,这次问题是「每天实际有多长时间是用来写代码的」。

常见问题

【推送】同一个账号在两个设备登录过,两个设备都会收到推送信息吗?

推送的时候是根据推送查询条件,在 _installation 表中查找符合条件的目标设备来推送。只要查询条件能包含这两个设备,则两个设备都能收到推送。

如果是登录即时通讯系统,如果没有开启单点登录,用户在登录两个设备后,如果用户不在线会尝试给这两个设备都发离线消息推送。

【推送】Android 非混合推送,控制台推送记录中显示推送成功,但 Android 设备实际没有收到推送,是什么原因?

对于 Android 非混合推送设备,当返回的记录成功数为 1 时,表示一定收到了 SDK 确认收到该消息的回应。即此条推送消息一定是到达了设备。
建议检查推送是否使用了自定义 Receiver 功能(消息中是否有 action 字段),消息到达后 SDK 会直接将消息转交给自定义 Receiver,由自定义 Receiver 完成推送提醒。这种情况需要检查自定义 Receiver 实现逻辑排查消息到达后为什么没有弹出提醒。

【云引擎】新推出的 LeanDB 是什么产品,是用来做什么的?

这是一项新推出的功能,为了满足应用对关系型数据库的需求。目前 LeanDB 提供了 mysql 数据库,可以使用任何支持 mysql 的库来访问它。

接入文档请参考:LeanDB MySQL 使用文档

》》更多使用疑问请点击这里

每天我有多少时间可以写代码?

大家好,我是老王,程序员一枚,也是 LeanCloud 团队家属。家属因为工作原因,经常以调研(diao cha)为由咨询(shen wen)我一些问题,这次问题是「每天实际有多长时间是用来写代码的」。

于是,我对自己的日常工作内容进行了一些梳理。

早上七点半起床洗洗刷刷偶尔刮胡子,风驰电掣的穿好鞋,八点出门。挤地铁换乘,一般需要一个半小时到达公司,偶尔遇到特殊情况会在地铁楼梯台阶上改半个小时的代码。上班花费时间约 2 小时。

我每天会开很多会,开发需求跟产品开会、项目方案沟通会、新人转正评审会、出了故障要开总结会、小组周会、部门周会、团队分享会等若干会议。一天中会议一般会占用 3-6 小时。

每天我还需要一些时间在日常沟通上:

「Hi, 可以帮我看看,这个问题是什么情况吗?」

「王 x,现在有时间吗?新功能什么进度了」

「王 x , 约的面试的人到了」

中午,食堂,便利店,还是外卖,纠结吃什么也会花掉一些时间。排队,找座位,边吃边跟同事聊聊最近热门的游戏,1 个小时也就过去了。

为了避免出现加班加点做大量无用功,产品下需求必须要花一些时间了解,遇到疑问还会与产品反复沟通,这部分工作大约也需要 1 小时。

到晚上,花半小时解决下晚饭,没有意外情况的话,一般会在 21 点下班,十点半到家。回家后打开电脑再花半小时写日报跟工作总结。收拾洗个澡,十二点关灯睡觉,除去 7.5 小时的睡眠时间(在没有半夜突发故障的情况下),一天实际花在写代码上的时间大约为 4 个小时。

忘记提,作为一个十分讲究的程序员,以前我还要花半小时在每天穿什么的问题上,格子衫因为被黑太多不敢穿了,优衣库的卡通短袖又不符合我稳重的开发者气质,感觉衣柜里缺了一件不需要思考万能百搭的短袖。

于是家属给我推荐了她厂新款:LeanCloud 10x 程序员 T 恤。

10x 程序员
搭配

纯棉透气,百搭任意色系长短裤型,自此,我每天写代码时间又多出来了半小时。据说新款上架,购买就送 10x 程序员笔记本一本,活动截止至 6 月 10 日。

点击此处直接购买

以上人物时间均为虚构,如有雷同纯属巧合。