作者归档:wwang

安卓混合推送升级|二月刊

产品动态

游戏解决方案(Play)

二月份我们的游戏服务迎来了更多的开发者,同时也经历了他出生之后的第一次春节流量考验,虽然出现了临时扩容的紧张与慌乱,但所幸结果一切顺利,没有在全国人民面前掉链子,也让我们倍感欣慰。

实时对战 JavaScript SDK 支持 Promise 方式

前两天我们发布了 JavaScript SDK v0.18.0 正式版本,将异步调用的处理方式进行了一次升级,在原来的事件回调基础上,增加了 Promise 方式。例如在老版本 SDK 里用户连接至实时对战服务器的过程为:

// 发起请求
client.connect();

// 响应连接成功事件
client.on(Event.CONNECTED, () => {
  console.log('on joined lobby');
});

现在可以直接这样实现:

client.connect().then(()=> {
  // 连接成功
  console.log('on joined lobby');
}).catch((error) => {
  // 连接失败
    console.error(error.code, error.detail);
});

新版本完全遵循 ES6 Promises 标准,相信可以让大家开发起来更加方便。

游戏开发教程

应广大开发者的要求,我们工程师小姐姐还专门录制了四期直播课程,介绍游戏开发中的一些小窍门,有兴趣的朋友可以访问官网的学习页面或通过以下地址直接观看:

安卓混合推送升级

华为 HMS 推送增加 IntentUri 支持

对于华为的 HMS 推送,之前我们支持的版本缺少通知栏点击的自定义动作支持(推送请求的 IntentUri 参数),本月我们服务端上线了这一功能,现在开发者使用 v4.7.0 以上版本的混合推送 SDK,就可以使用这一功能,具体用法可以参考文档:HMS 推送接入指南

新功能预告

我们计划在 3 月份增加对 VIVO 推送支持,但是因为我们自己客户端数量有限,怕测试不完全,所以我们会推出一个 early-bird 版本,邀请大家参与前期测试。欢迎感兴趣的开发者通过发送邮件或者在项目 repo 下直接报名参与,谢谢。

Share

使用 Leancloud 实现 React Native App 的消息推送 – Android 篇

在 React Native 开发过程中征服的一个小小领域:消息推送。

【游戏开发】如何实现手游中的账户系统

这篇文章以 Unity 游戏引擎中的 C# 语言为示例,主要讲解如何实现几种主流的登录方式,包括游客登录、游客账号升级、手机号验证码登录、用户名密码注册及登录。

常见问题

【存储】怎么存储和获取音频/视频文件的时长 ?

AV.File 的 metaData 属性,可以用来保存和获取该文件对象的元数据信息。可以在上传音频文件时获取音频长度然后通过 metaData 方法手动添加文件时长。

【即时通信】对话查询如何区分单聊还是群聊?

SDK 层面不区分单聊和群聊。可以使用会话的成员数量做区分。「会话成员数量为 2」即是单聊,大于 2 即可看作群聊。

【即时通信】语音消息如何标记消息是否已经播放,类似微信语音消息标记是否已读的小红点,可以提供一些思路吗?

因为一个群里可能有很多人,每个人对一条消息都有一个「是否已播放」的状态,所以建议在客户端维护这个「未播放」状态。

做法之一是可以在客户端维护一个「收到了但是没有播放的音频文件」列表,然后拿到消息文件对比一下客户端是否已经播放过。

【即时通信】使用 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"]] 增加一个查询条件即可。

LeanCloud 月刊|国际节点正式独立运行

产品动态

国际节点正式独立运行

我们为了适应用户的需求变化以及产品下一步的发展,让 LeanCloud 正式成为国际化的产品,从 2019 年 1 月 1 日开始国际节点与国内节点完全分离,这将带来以下几方面的变化。

  • 国际节点使用独立的账户体系,并由 LeanCloud 的境外公司作为主体运营。

  • 我们将会逐步完成网站、开发者控制台、文档的国际化,提供英语技术支持,让英文环境的开发者也可以使用 LeanCloud。

  • 充值方式将支持国际信用卡、PayPal、境外银行转账。余额使用美元结算,无需像原来一样进行与人民币的转换。

  • 我们会和其他国外的服务一样按月提供电子发票,您无需再在控制台进行手动申请。

游戏解决方案(Play)在国际节点全部部署上线

首先,告诉大家一个好消息,游戏解决方案在国际节点全部部署上线,使用国际节点开拓海外市场的游戏开发者,可以抢先体验一下。

接下来我们分别说说实时对战和排行榜方面的变化。

实时对战

  • Client Engine:作为服务端控制游戏逻辑的一种扩展机制,我们已经完善了底层架构,完成了使用框架和文档,并发布了一个基于该方式实现的猜拳小游戏,作为 demo 希望给广大游戏开发者带来参考价值。

相关文章:如何在服务端实现游戏逻辑

  • SDK:完成了白鹭引擎(Egret)的匹配。现在我们的游戏解决方案已经支持如下平台:

    • 微信开发者工具,包括微信小游戏和小程序

    • Cocos Creator:包括 Web、微信小游戏、Facebook Instant Game、OSX/iOS、Android

    • LayaAir:微信小游戏

    • Egret:Web 小游戏

排行榜

  • 增强了防作弊的策略,只放行可信环境的数据更新请求,避免被恶意刷榜。

我们在 LeanCloud 成立五周年之际,发布了一款名为《LeanCloud 周年游戏》的微信小游戏。《LeanCloud 周年游戏》玩起来很简单,参与者要在 15 秒内从迅速掉落的蛋糕和炸弹中点中尽可能多的蛋糕来得分,蛋糕有好几种,分值也不一样,而误点到炸弹就要扣分。游戏一结束参与者能在排行榜中看到自己的名次,我们给前 50 名都设置了奖品。上个月,我们工程师从「客户端」、「服务端」和「作弊检测」几个方面,总结了一下开发这个小游戏的经验,感兴趣的朋友可以看看下面这篇文章。

相关文章:使用 LeanCloud Play 开发抢蛋糕小游戏的经验谈(附防作弊机制)

Android SDK 仓库的变化

我们已经将 Android SDK 最新版本(4.7.9)已经发布到了 The Central Repository,同时 Android SDK 的替代品—— Java Unified SDK 也都直接发布到了中央仓库,以后我们也会将两个 SDK 的后续版本都发布到这里,开发者可以不用再增加 LeanCloud 自己的私有仓库作为 maven 源,直接使用 jCenter() 包含的源即可引用 LeanCloud 最新的 Java/Android SDK。

统计服务下线

按照之前公告的计划,从 1 月 17 日开始,统计服务的后端系统正式停止接收各种客户端上报的数据,在 2 月 27 号之后控制台会停止统计指标的展示,今后我们会集中资源将核心服务做的更好更全面。
考虑到个别用户的使用情况,我们也提供了将统计服务私有部署的选项(有一次性的部署费用),如果您需要继续使用我们的统计分析功能,可以通过邮件(support@leancloud.rocks)或工单联系我们。

Share

优秀的命令行工具整理(一)

如果你用命令行,那么这些工具中大概至少有一个能让你的生活更舒心。

优秀的命令行工具整理(二)

本文是「命令行威力提升」系列的第二篇,这一系列展示一些出色的非标准工具,这些工具能让命令行用起来更容易、更享受。

优秀的命令行工具整理(三)

本文是「优秀的命令行工具」系列的第三篇。本文将展示五个命令行工具,这些工具能助你更方便地解决常见问题。

常见问题

【存储】数据存储表的字段是否有数量上限?字段多对性能是否有影响?

我们的存储功能基于 MongoDB,属于文档型数据库,这里的文档类似于 JSON 这样的非结构化数据,与传统的关系型数据库不一样, 所以讨论字段(关系型数据库中称为列)多少是没有意义的。
一个文档大小有 16 M 的限制,但是开发者真正使用时应远小于这个值,保证在几百 KB 之内能有较好的插入、查询、更新速度。
因为字段名是存在每个文档中的,所以字段名越短越节约空间。

【即时通信】安卓客户端怎么获取对话免打扰状态?

对于 Android 来说,不存在免打扰状态的。消息静音是针对 iOS 设备而言的(指不发送离线消息)。

Android 没有离线通知,因为聊天和推送使用的是同一个 WebSocket 长链接,聊天那里不在线,推送也是过不去的。

【控制台】控制台的应用为什么会被归档,被归档的应用怎么重新激活?

近三个月内没有 API 请求的开发版应用会被归档,归档后无法请求应用数据。

被归档的应用如需重新开启,可提供应用信息发邮件至 support@leancloud.rocks 申请激活。

【计费】通过 API 发送实时通信消息收费吗?

使用 API 发送即时通信消息也是收费的。计费标准就是 API 调用费用标准(每万次 1.0 元)。

此项计费在控制台 > 财务 > 消费明细中对应扣费服务项目是:「数据存储(API 请求)」。

【小程序】小程序真机上传数据时,控制台存储中显示的 Class 表名被压缩为单个字母,这个是为什么?

例如新建一个名为「Todo」的表,上传数据成功后进入控制台查看,其表名称显示为像 i、u 这样的单个字母。

这是因为真机上代码会被压缩,解决办法是在创建 Class 后向 SDK 注册该 Class 的名字:AV.Object.register(Todo, ‘Todo’);。

【云引擎】在云引擎部署时,会显示 [ERROR] exit status 128,请问会有什么影响吗?

是命令行工具在上传统计数据的时候的一个错误,不影响后续的部署,升级到最新版本的 lean-cli 就不会有这个提示了。

【CQL】LeanCloud 平台的 CQL 语句,与标准的 SQL 有什么区别。离线数据分析使用的 SQL 语句又有什么不同?

CQL 只是 API 的一点封装,是 SQL 的一个很小的子集,离线分析的 SQL 是 Hive SQL。标准 SQL 里面有很多内置的函数,CQL 里面都不支持。

也就是说标准 SQL 和离线分析的 Hive SQL 支持的内置函数有差异,而 CQL 基本不支持内置函数。

LeanCloud 推出 10x 程序员专用笔记本

在过去十多年里,苹果笔记本逐步从非主流的产品成为了程序员的标配,但是苹果从 2016 年开始使用的新键盘实在让大家失望,而其他厂商的笔记本中又难以找到在各方面能与 MacBook Pro* 抗衡的产品。在强大的需求驱动下,我们决定自己来解决这个问题。

我们最初把目标定为打造一款最适合程序员用的笔记本,但是经过一些早期的调研,发现这个群体太大,需求过于多样,还是把目标限定为资深程序员(也就是在硅谷喜欢说的 10x 程序员)这个更加垂直的群体比较好。这个产品需要满足以下条件:

  • 手感要好
  • 长时间使用不伤眼
  • 轻薄便于携带
  • 突破电池技术瓶颈实现超长持续使用时间
  • 价格低廉

在一个产品上同时达到这些条件的追求使得我们必须从 first principles 出发从全新的角度审视这个问题。

Jeff Atwood 说「最好的代码是没有的代码」,因为不存在的代码就不需要维护。在和多位成功的资深程序员的访谈中我们发现,其实他们大部分时候只要画画流程图,具体细节让初级程序员和实习生去实现就好了,所以键盘对他们来说其实是个伪需求。最好的键盘就是没有键盘。

为了满足高效地画流程图的需求,我们决定支持用笔的操作,并兼容几乎所有采用有机溶剂的第三方配件,在我们的测试中大部分笔在操作 10x 程序员笔记本时灵敏度比 Apple Pencil* 高一个数量级**。在显示技术方面,我们使用了比 Retina Display 分辨率高两倍、使用自然光反射技术的界面,有效视角接近 180 度(超过所有 LCD、LED 显示器),并且长时间使用眼睛也不会疲劳。

使用传统技术的笔记本厂商不得不在电池容量/使用时长和便携性之间做痛苦的权衡,然而最好的电池是没有电池,使用时长最长的笔记本是不耗电的笔记本。得益于可以反射自然光的显示材料,我们的笔记本真正实现了零功耗,所以做到了无需充电永久使用。

在小批量内测的过程中我们还发现了一个重要的隐藏需求。资深程序员即使实际很少使用 vim、sed、awk 等工具,也要对相关知识非常熟悉,这样与用 Visual Studio Code*** 的初级程序员相比才能树立优越感和区分度。所以我们的笔记本里包含了 10 种 10x 程序员常用工具的快速参考。

10x 程序员笔记本重新定义了 10x 程序员。

点击购买你的第一个 10x 程序员笔记本

* Apple、MacBook Pro 和 Apple Pencil 是 Apple Inc. 在美国和其他国家或地区注册的商标
** 在实验室条件下得到的结,实际使用中可能有偏差
*** Visual Studio 是 Microsoft 在美国和其他国家或地区注册的商标