分类目录归档:教程

LeanCloud 与阿里云到底有什么区别?

LeanCloud-与阿里云到底有什么区别

不是很了解 LeanCloud(https://leancloud.cn)的开发者经常会问「LeanCloud 与已有的很多云服务有什么区别呢?」下面我们就以国内比较有代表性的阿里云为例,跟我们做下对比。

产品的区别

进入阿里云网站可以看到阿里云的产品介绍。产品列表有弹性计算、数据库、存储与 CDN、网络、大规模计算、云盾、管理与监控、应用服务、互联网中间件、移动服务、域名与网站等,每个选项下面又有非常多的子产品列表,提供的服务种类繁多。个人感觉几乎开发中需要使用的服务器产品,阿里云应该都提供了。这些产品更偏向于较底层的服务,用户要想使用起来需要具备一定的能力。

继续阅读

LeanCloud 安全性提醒

thumb-security-640x360

最近向我们反馈受到数据安全性方面恶意攻击的用户有增多的趋势。虽然 LeanCloud 提供了全面可靠的安全机制,但不少用户因为只关注了开发上的方便,没有足够重视安全性,以至于没有合理使用(有时甚至是没有使用)我们提供的安全机制,以至于给了攻击者可乘之机。我们在此特别提醒所有用户对自己应用的安全性进行检查,特别是:

  • 仔细阅读 LeanCloud 的 数据和安全 文档。
  • 全面检查 Class 和 Object 级别的 ACL 设置,确保只开放了实现应用功能所需的最低权限。
  • 如果对 _User 表没有特殊查询需求,请关闭查询权限,这不会影响注册和登录等操作。虽然 LeanCloud 对密码加密存储以确保不会泄漏,但仍然应该关闭查询权限以避免用户 email、电话号码等高价值信息被非法访问。
  • 对于特别敏感的数据,可以考虑关闭所有权限,使用 LeanEngine 提供有更多自定义限制的访问接口。

我们在近期也将推出安全检查工具,帮助用户自动发现应用设定中可能存在的风险,并在开发者后台做出改进让我们的安全机制更加易用。

如果您在这方面有任何疑问,欢迎在我们的 论坛 或工单系统提出。如果您受到数据安全性方面的威胁或者攻击而需要我们协助,可以发送邮件到 support@leancloud.rocks。

使用 LeanCloud 与 React Native 构建原生应用

reactnative_toptal_coverimage

图片来源:toptal

React Native 是 Facebook 在今年的 F8 大会上发布的移动应用开发方案。它基于 JavaScript 和 React,可以让 Web 应用开发者在保持原有的开发体验和效率的同时,为 Web 应用带来原生应用的体验。

React Native 使用 JavaScript 作为开发语言,其内建的打包系统支持包括 CommonJS 在内的多种模块化标准,因此很多支持浏览器运行环境的 Node Package 也可以运行在 React Native 中。LeanCloud JavaScript SDK 便是其一。

本文将介绍:

  • 如何在 React Native 中使用 Flux 架构来组织应用的数据流,以配合我们的 JavaScript SDK 向 LeanCloud 云端保存数据,重用代码和实现平台差异化。
  • 异步获取当前用户对象
  • 文件上传
  • 向移动端推送消息

继续阅读

「大概可能也许是」目前最好的 JavaScript 异步方案 async/await

构建一个应用程序总是会面对异步调用,不论是在 Web 前端界面,还是 Node.js 服务端都是如此,JavaScript 里面处理异步调用一直是非常恶心的一件事情。以前只能通过回调函数,后来渐渐又演化出来很多方案,最后 Promise 以简单、易用、兼容性好取胜,但是仍然有非常多的问题。其实 JavaScript 一直想在语言层面彻底解决这个问题,在 ES6 中就已经支持原生的 Promise,还引入了 Generator 函数,终于在 ES7 中决定支持 async 和 await。

async_image03

基本语法

async/await 究竟是怎么解决异步调用的写法呢?简单来说,就是将异步操作用同步的写法来写。先来看下最基本的语法(ES7 代码片段):

继续阅读

「轻松支付,只需几步」使用 LeanCloud 云代码接入支付宝示例

如果你的应用想接入支付宝,让用户可以在应用内部直接支付,你可以看下这篇文档和开源项目,也许会给你带来一些帮助。

项目:https://github.com/leancloud/cloud-code-alipay

了解支付宝「即时到账收款」

在尝试该项目之前,你需要了解支付宝「即时到账收款」这个功能:

  • 相关的介绍在这里:即时到帐收款
  • 确认自己有「企业支付宝账号(不含个体工商户)」
  • 了解整个流程是什么样子的

然后就可以继续了。

安装

下载代码:

git clone git@github.com:leancloud/cloud-code-alipay.git

修改支付宝相关的配置 cloud/config/alipay.js

module.exports = {
  sign_type: 'MD5',
  alipay_gateway: 'https://mapi.alipay.com/gateway.do?',
  https_verify_url: 'https://mapi.alipay.com/gateway.do?service=notify_verify&',
  partner: '2088000000000000',
  key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  notify_url: 'http://xxx.avosapps.com/pay/notify',
  return_url: 'http://xxx.avosapps.com/pay/return'
}
  • alipay_gateway: 支付宝网关,一般情况默认即可。
  • https_verify_url: 支付宝回调验证 url,一般情况默认即可。
  • partner: 合作者身份(PID),2088 开头的 16 位数字,可以在支付宝网站查找: https://b.alipay.com/order/pidAndKey.htm
  • key: 安全校验码,数字加字幕的字符串,可以在支付宝网站查找: https://b.alipay.com/order/pidAndKey.htm
  • notify_url: 支付宝异步通知 url,二级域名根据 LeanCloud 云代码配置而定。
  • return_url: 支付宝同步通知 url,二级域名根据 LeanCloud 云代码配置而定。

部署

配置 LeanCloud appId 和 appKey

avoscloud app add <projectName> <appId>

切换目标应用

avoscloud checkou <projectName>

部署应用到测试环境和生产环境

avoscloud deploy && avoslcoud publish

提示: 过程中可能会提示输入 masterKey。

如果没有错误,请打开浏览器,根据自己的二级域名键入网址:

http://<yourPath>.avosapps.com

如果看到「支付宝即时到账交易接口」的页面,恭喜你,部署成功!

感受一下

  1. 在「支付宝即时到账交易接口」的测试页面,输入相关信息。注意:「卖家支付宝账户」需要和「partner」对应;金额可以输入 0.01 (表示支付 1 分钱) 来进行尝试。输入完成后点击确认。
  2. 你将看到跳转到支付宝页面,输入自己的支付宝账号和支付密码等完成支付。
  3. 支付完成后会跳转回我们自己的应用页面,并显示 验证结果:true。支付流程结束。当然,你的 1 分钱也转到了对应的卖家账户 ;)

开发相关

文件说明

  • cloud/app.js: 支付宝相关请求路由。
  • cloud/alipay.js: 支付宝相关签名验证,生成跳转等逻辑。

路由信息

  • GET /: 静态首页 public/index.html
  • POST /pay: 接受表单信息、签名,并准备跳转到支付宝。
  • GET /pay/return: 等待支付宝同步回调,并验证调用方是否真正来自支付宝。
  • POST /pay/notify: 等待支付宝异步回调,并验证调用方是否真正来自支付宝。

更 lean 更便捷,云代码「精益模式」上线

很多用户使用 Cloud Code 云代码 是为了在服务端提供一些个性化的方法供各终端调用,而不希望关心诸如代码托管、npm 依赖管理等问题。为此我们提供了在线维护 Cloud Code 的功能。

提醒

使用此功能,你需要注意:

  • 会替代您之前 git 或者命令行部署的项目。
  • 暂不提供 Web hosting 功能。
  • 维护的所有函数可以生成并导出一个完整的项目,供 git 或命令行部署(即将推出)。
  • 之前由项目维护的云代码方法并不会显示在此处,可以认为「定义函数」和使用项目维护的云代码是两套代码。具体使用什么代码,是由最后一次部署使用什么功能决定(「定义函数」的每一个添加、修改、发布、删除动作都是一个部署动作)。

cloud_code_snippet

左上角的「创建函数」可以新创建一个函数。中间部分是已经创建好的函数,并可以进行一些维护操作。

函数类型

有几种函数类型:

  • Function:对应 AV.Cloud.define 定义的方法。
  • Hook:对应 AV.Cloud.beforeSave 等回调定义的方法。
  • Global:对应全局变量,一些全局变量和公共函数可以定义在这里。

这些函数的使用场景和具体细节,参见:Cloud 函数

创建函数

如果需要创建一个新的函数,可以点击「创建函数」按钮,您将看到如下窗口:

cloud_code_snippet_create

您需要设置的部分包括:

  • 函数类型
  • 函数名称
  • 数据具体的代码片段(注意,你不需要输入函数定义部分,即 AV.Cloud.define(...) 部分)
  • 注释
  • 全部 OK 后点击「保存」,或者放弃编辑点击「关闭」

您可以在代码框中填入下列代码:

var name = request.params.name;
if (name) {
    response.success('Hello ' + name);
} else {
    response.error('name?')
}

点击保存后,Cloud Code 会在后台编译、保存,并将代码部署到「测试环境」,这个过程可能需要十几秒钟的时间,请耐心等待。全部完成后,页面上方会提示「已更新到测试环境」;如果有错误(比如编译错误)则会出现类似提示:加载代码出错: SyntaxError: Unexpected token )

发布

如果函数部署「测试环境」成功,就可以点击「发布」按钮将函数发布到「生产环境」。同样该过程可能需要十几秒钟的时间,请耐心等待。全部完成后,页面上方会提示「已发布到生产环境」。

同步

对于某个函数,可能生产环境运行一个版本,而测试环境正在开发一个新的版本,两个环境的代码是不一致的,这时函数列表页面相关函数的「测试环境」按钮会变成蓝色:

cloud_code_snippet_diff_version

当您在测试环境开发完成,点击「发布」后,两个环境的代码将会统一,这时「测试环境」按钮变为灰色。

测试

如果需要测试,可以点击相应函数的「调用」按钮,你将看到如下窗口:

cloud_code_snippet_invoke

选择调用环境,并输入调用参数,点击「运行」按钮即可看到调用结果。如果调用返回的 Http Status Code 不是 200,则页面上方会提示相关错误信息。

历史版本

如果您想看某个函数之前曾经部署过的代码,可以在函数列表页面点击「历史」按钮,将会弹出类似下面的窗口:

cloud_code_snippet_history

您可以点击时间来查看不同时间部署的代码。

删除

如果您确定某个函数已经不再需要,可以在函数列表页面点击「删除」按钮将其删除。注意:删除后该函数和其所有历史记录都将被删除,而且不能恢复。删除动作会重新部署测试和生产环境,这个过程可能需要十几秒钟的时间,请耐心等待。

LeanMessage for Windows Phone 8 已上架 Nuget

LeanMessage for Windows Phone 8 已上架 Nuget

LeanMessage 是 LeanCloud 开发的 Realtime Message 实时通信组件,目的就是服务于手机应用开发者,在应用中实现实时聊天功能的组件,目前在 iOS 以及 Android 上已经有很多开发者采用了 LeanMessage 作为 Realtime Message 实时通信功能作为解决方案。如此受欢迎也说明实时通信在微信,Line 等大型产品的推进下,实时通信已经成为很多手机应用必不可少的功能,当开发者还在犹豫是采用 Jetty 还是 SignalR 作为 WebSocket 服务端的解决方案时,LeanMessage 给了您一个更稳定的选择:放着我来!

今年年中的时候,我们陆续发布了 iOS 以及 Android 版本中都支持了 LeanMessage 组件,详细文档可以查阅:LeanMessage 服务开发指南

回到本文的主题,随着微软的持续加大移动市场的研发力量,Windows Phone 也占有市场的一席之地,我们也紧跟着推出了 Windows Phone 8.0 的实时通信的 SDK,现在已经在 Nuget 上架公测,欢迎开发者使用并且提出各种意见以及 Bug 回馈,我们会持续更新和完善。
文档也集成在 LeanMessage 服务开发指南

中国移动运营商网络问题的诊断和投诉

更新 1
由于切换到了 BGP 网络,服务器的 IP 地址已变更,请以新的 IP 地址为准,文章中的 IP 地址已经无法连通。
更新 2
切换到了 api.leancloud.cn 域名,我们用户的 DNS 问题已经大大的减少了。


偶尔会有开发者和用户反应在移动网络(4G/3G/EDGE)下,存在无法使用我们服务的情况,表现为应用加载数据失败,无法访问 https://cn.avoscloud.com 网站等。依我们的经验,这里的问题基本是由网络问题引起的,并且都是在中国移动的网络下,中国电和中国联通都没有遇到。这里写一下,如果出现这种情况,应该如何确定问题出在哪儿。请注意,以下的网络除无线网络是指 WiFi 网络外,均为中国移动的数据网络(iOS 里称蜂窝移动数据)和有线宽带网络(就是那个最近很便宜的,一天一块钱的宽带)。

对于开发者:请访问 https://status.avoscloud.com,确认我们各项服务的状态。
如果想确认数据是否正常,请登录 https://cn.avoscloud.com 的控制台查看。
如果都正常,请接着往下走,确认一下网络是否有异常。

对于用户:首先,如果是在无线网络条件下,请排除本地网络的问题,直接在设备(iOS/Android/Windows 或别的平台)上访问一下不太可能出问题的网站,如打开浏览器访问 www.baidu.com,看看能否成功。

排除本地网络问题后,请按以下方法诊断,需要先在设备上安装相应的检查应用
* iOS 用户推荐 iNetTools
* Android 用户推荐 LanDroid
* Windows Phone 用户请使用 Console WP8 Lite
* Windows 和 OS X 用户不需要额外的软件
* Linux 用户的话,应该也不需要看这个文章了,相信你直接可以搞定了

检查方法是 ping cn.avoscloud.com,如何操作呢?

iOS 用户请打开打开 iNetTools,进入 Ping,输入 cn.avoscloud.com,然后点右上角的 「启动」,然后会显示如下的信息,过十来秒后再点停止。
ios_nettools_merged_1

ios_nettools_merged_2

Android 用户请打开 LanDroid,选择 Ping,输入 cn.avoscloud.com,点击 「 Go」,并等待几秒钟。
android_landroid_ping_merged

Windows Phone 用户请打开 Console WP8 Lite,输入 ping cn.avoscloud.com,这里可能会弹出一个 Application Error 的对话框,选择 「 No」,等待几秒钟。
wp_console_merged

Windows 用户请直接打开命令行(Windows 键 + R,弹出窗口后输入 cmd 后按 「回车」,然后出来一个黑框就是了),输入 ping cn.avoscloud.com,然后 「回车」,看返回结果。
winxp_ping_merged

OS X 用户请打开终端(Command + 空格键,然后输入 Terminal 后 「回车」,弹出一个白色窗口就是了,我这里有点例外,是配置成黑色),输入 ping -c 5 cn.avoscloud.com,然后 「回车」,看返回结果
macos_ping_merged

运行完毕,来对比一下结果。参考上面各类中最后的一张图片,其中画有红框的是需要关注的。
* IP 地址,如果 IP 地址是在 117.78.13.64~67117.78.21.64~67,则是正常的,否则就是 DNS 解析出错
* 丢包率,即用百分比表示的,如果大于 3%,则表示网络质量会影响应用的使用(有个例外, 就是第一次 ping 测试,丢包率会高一些,即使是 10% 也是正常的,这种情况让 ping 测试测久一点即可恢复正常)
* ping 响应时间,100(单位默认为 ms)以下都是可以接受的,高于 100 ms 会感到缓慢

丢包率和 ping 响应时间,与网络质量相关,如果有运行迅雷或者 BT 下载程序,请限速或退出。如果以上都是正常的值,但是应用加载缓慢或仍打不开我们的官网,请与你的应用开发者联系,并将检查应用的结果截图提交给开发者。

如果 ping 中发现 IP 地址不对,则是 DNS 解析有问题,如何知道是哪个 DNS 服务器有问题呢?

iOS 用户请安装 Dyn Dig,并在 domain name 输入 cn.avoscloud.com,并按 「Search」 进行查询
ios_dyndig_merged_2

以上是中国移动网络下, DNS 异常的截图。这种情况下只能向中国移动打 10086 电话投诉,告之受影响的域名及 DNS 服务器的 IP,才能解决问题。

如果是在无线网络情况下, DNS 异常,则请通过路由器的 DHCP 设置,将默认的 DNS 修改为正常的 DNS(推荐 114.114.114.114),并重启路由器即可。

Android/Windows Phone 用户没有能查到 DNS 服务器 IP 地址的应用,跳过,如果哪位知道,请告诉我。

Windows/OS X/Linux 用户请使用 dig 工具,参考上面的方法,执行如下的命令
dig cn.avoscloud.com 普通基于 UDP 的 DNS 查询
dig +tcp cn.avoscloud.com 使用基于 TCP 的 DNS 查询
dig cn.avoscloud.com @114.114.114.114 向 114.114.114.114 普通基于 UDP 的 DNS 查询
dig +tcp cn.avoscloud.com @114.114.114.114 向 114.114.114.114 使用基于 TCP 的 DNS 查询

dns_udp_failed_china_mobile_beijing

dns_tcp_success_china_mobile_beijing
以上是在中国移动光宽带的网络下 DNS 异常的截图。这种问题,也请投诉给中国移动。

通过以上诊断,如果是本地无线网络配置问题,请修复本地网络。如果问题出在运营商网络(3G/4G 或宽带),请打运营商客服电话。如果是运营商的 DNS 服务有异常,请直接投诉,参考文章末尾。

据我们了解,中国移动的网络质量本来就比较差,TD-SCDMA 的速度大家有目共睹的。除了数据网络外,宽带网络也是比较差的,它的宽带网络是以前的铁通网络。除去网络质量因素,中国移动网络还有一个比较大的问题,就是 DNS 服务器异常,这个不只是我们 cn.avoscloud.com 域名有受到影响。DNS 异常不只是 DNS 响应错误的 IP 地址,某些地区的中国移动还有个简单粗爆的域名检查系统,包含 av 字样的域名一率返回错误的 IP,嗯,我们很受伤。

这里顺便说一下,我们向中国移动投诉的经历,历时两周,向中国移动投诉多次,向工信部投诉两次,才解决了北京地区的 DNS 异常情况。据我们了解,江苏和香港地区也还有不同程度的异常。也请当地的用户,和我们一起投诉当地的运营商,人多力量大。

关于如何投诉

首先请先拨打 10086 向中国移动客服投诉,告之域名解析出错,请记客服同学记录下受影响的域名 cn.avoscloud.com 和异常的 DNS 服务器 IP 地址(见 Dyn dig 中的截图),48 小时后会有处理结果。提醒一下,这里处理的速度并不乐观,一般都没有结果。

投诉到中国移动后 48 小时问题仍未解决的话,依据中国相关法律法规规定,可以向工信部申诉,网址是 http://www.chinatcc.gov.cn:8080/cms/shensus/,这里最好是以邮件的方式申诉,将具体细节和截图写在邮件里发送给 accept@chinatcc.gov.cn,工信部的相关同学最早会在第 2 天回电话并催促中国移动。

申诉邮件的内容需要包括两个部分:
一是申诉者的姓名、身份证号码、通信地址、邮编、联系电话、申诉涉及到的电话号码、电子邮件、申诉日期
二是被申诉企业名称、申诉内容(详情)、是否向企业申诉过(一定要先向企业投诉,无效后工信部才能受理,直接找工信部的不受理),最后要承诺 「我承诺申诉信息真实有的」

工单系统开源了

很高兴跟大家说,工单系统开源了。代码托管在了 Github 上。
如果还未见识过工单系统,请移步于 https://ticket.avosapps.com/
这个系统是用 AVOS Cloud 的 Javascript SDK 、云代码功能做的。

云代码可以干什么?

  • 实现客户端难以实现的业务逻辑。比如将两个人配对,将等待用户的信息收集在云代码中,根据他们的地理位置等信息配对。类似短暂的信息就不用存入数据库了。类似的组织调配任务也比较适合在云代码中实现。
  • 定时任务。比如定时请求教务处出成绩的页面,页面有变化、新出成绩的时候推送给相关的用户。
  • 给你的 App 搭建官方网站。比如看电影学英语的应用,将一些精选视频片段放在网站上能更好地吸引用户。这时候,在云代码中访问数据就像在移动端一样便捷。
  • 当在移动端无从下手的时候,不妨站在服务端、云代码的角度思考问题。

可以从这个项目学到什么?

  • 涵盖了 JavaScript SDK 的大部分章节,涵盖了对象查询Promise文件用户云代码函数这些章节。
  • 更多的 best practice
  • 熟悉 Node.js、Express、HTML、CSS、JavaScript

也可以从工单系统中借鉴其中的好想法,

继续阅读

10 分钟为你的 App 加入实时通讯功能

很多开发者想在自己的 App 中添加实时通讯的功能,但通常因为没有合适的后端支持,最终没能实现。而 AVOSCloud 与时俱进,给大家带来了希望。下面就来介绍使用 AVOSCloud 给自己的 App 添加实时通讯功能。

AVOSCloud SDK 从 2.5.9 开始提供了实时通讯模块。本文主要基于 iOS SDK 2.6.2.1 实现,假设你已经具有一定的 iOS 开发基础,省略掉非实时通讯相关的代码,github 完整代码点此

概念

  • peerId
    唯一表示一个用户的标识,可以是用户名、用户 ID 或设备 ID 等等跟用户关联的东西
  • Session
    表示一个会话,处理底层网络连接,收发消息
  • Message
    消息,可以自己定义格式,如文本或 JSON 等,从而达到实现不同类型消息的目的
  • Signature
    签名,用于验证消息合法性
  • Group
    群组,一个用户集合的抽象,给一个群组发送消息,群组里面所有的人都将收到此消息

实现

此部分只列出了通讯相关的代码,省略了一些本地对话和消息保存的代码。完整代码可以查看 github 完整代码

继续阅读