月度归档:2013年11月

2013 年 11 月第四周 AVOS Cloud 更新

大家好,这周我们更新了 SDK 到 2.0.2 版本,更新了开发指南和 API 文档。对部分服务做了迁移,从虚拟机迁移到物理机器,提高性能和稳定性。

详细更新日志如下:

网站和服务端

  • iOS 设备的消息推送支持自动消息拆分,超过 255 个字符的消息会自动拆分成多条消息发送。
  • 云代码支持七牛官方 Node.js SDK
  • 修复创建 Role 无法同时添加 User 的 Bug。
  • 更新了 Android 开发指南和 API 文档,更新了 iOS 的 API 文档。

iOS SDK 发布 2.0.2(略过 2.0.1 版本)

  • 为 AVQuery 增加 whereSizeEqual
  • 纠正 AVRelation 的函数名拼写错误
  • 为 AVQuery 增加 sizeEqualTo
  • 增加 AVFile 的扩展名支持,在 key 后会附加扩展名,以便下载时可以使用正确的程序打开
  • 解决 subclass 返回的类型警告
  • 解决 defaultACL 中隐式创建 user 的问题

Android SDK 发布 2.0.2 版本

  • 废弃 AVFile 以 parseFile 开头的方法,并添加对应的替代新方法。
  • 为 AVObject 的 refresh 和 fetch 方法添加 includeKeys 支持。
  • 其他一些内部改进。
  • 更新了 API 文档

下周我们会对网站做一次大更新,因为 UI 工作比较繁琐,为了稳妥起见,本周没有对网站做大的更新。

SDK 下载请点击 SDK 下载

招聘 Android 工程师和后端工程师

随着 AVOS Cloud 的发展,我们急需新生力量加入我们,和我们一起将 AVOS Cloud 做的更好用,更强大。

具体岗位如下:

资深软件工程师(服务器端)

  • 有丰富的使用多门程序设计语言的开发经验;
  • 技术基础扎实,熟悉常用数据结构与算法;
  • 有复杂大型后端系统的开发经验;
  • 知识体系全面,熟悉主流前后端技术;
  • 熟悉 JVM 性能特点和系统优化技术;
  • 熟悉 MySQL、MongoDB 等开源数据库系统的性能优化和高可靠性部署;
  • 强烈的责任心、主动性和团队合作精神;
  • 自学能力强,愿意分享,具备独立解决问题的能力和经验;
  • 至少熟悉一本脚本语言,如 Ruby,Python 等。
  • 有 Clojure/Node.js/Erlang 等语言开发经验者优先。

工作职责

  • 负责 AVOS Cloud 平台的服务器端开发工作。

资深软件工程师(Android)

  • 技术基础扎实,熟悉常用数据结构与算法;
  • 精通 Java 语言和 Android API;
  • 熟悉 TCP/IP、HTTP 等网络协议;
  • 两年以上 Android 平台开发经验;
  • 强烈的责任心、主动性和团队合作精神;
  • 自学能力强,愿意分享,具备独立解决问题的能力和经验;
  • 对移动互联网产品有浓厚兴趣。

工作职责

  • 负责 AVOS Cloud Android SDK 及 Android 移动应用的开发工作。

关于我们

AVOS 是 YouTube 创始人 Chad Hurley 和 Steve Chen(陈士骏)创立的互联网公司。我们是 AVOS 在中国的全资子公司。我们会提供有竞争力的待遇和福利。如果您对以上职位感兴趣,欢迎投递简历给我们,邮箱地址是 cn-jobs@avos.com,非常感谢。

在云代码中处理上传文件

我们的云代码提供了 Web Hosting 的功能,您可以在我们的云代码上完整托管一个网站。对于一个网站应用来说,处理上传文件是很常见的需求。比如用户上传头像,上传附件等等。

同样,我们使用 express.js 框架也是支持上传文件的。现在让我们看下怎么上传一张图标,比如应用的 icon 图片。

首先,您需要对云代码有基本的了解,推荐阅读下我们的 《云代码开发指南》 中的初始配置和 web hosting 章节。

其次,您需要配置 express 框架使用 bodyParser 这个中间件,它会解析表单里的文件,并将上传文件都放到请求对象的 files 对象里:

app.use(express.bodyParser());

接下来,编写一个 html 表单放到 public 目录:

这个表单很简单,只有一个字段 iconImage,用来上传一个文件到 /upload 路径下,使用 multipart 表单 POST 提交。

接下来,我们要编写下 /upload 的处理函数,require 受限制的 fs 模块读取上传文件:

var fs = require('fs');
app.post('/upload', function(req, res){
    var iconFile = req.files.iconImage;
    if(iconFile){
        fs.readFile(iconFile.path, function(err, data){
            if(err)
                return res.send("读取文件失败");
            var base64Data = data.toString('base64');
            var theFile = new AV.File(iconFile.name, {base64: base64Data});
            theFile.save().then(function(theFile){
                res.send("上传成功!");
            });
        });
    } else {
        res.send("请选择一个文件。");
    }
});

代码非常简单,从 req.files 中得到 iconImage 文件,使用 fs.readFile 来读取这个文件的内容,并创建一个 AV.File 对象存储到 AVOS Cloud 平台,告诉客户端保存成功。

请注意,这里的 fs 模块跟 Node.js 标准库的文件模块不同,它只能用于读取上传文件,除了 readFile 方法之外都不可用。

紧急发布 Android SDK 2.0.1

HI,All。我们 昨天发布 了 Android SDK 2.0.0 版本,本以为彻底解决了回调没有在 UI 线程执行的 Bug。但是今天用户仍然给我们反馈说文件上传之后的回调没有运行在 UI 线程,导致程序崩溃。

我们分析了 SDK 代码,并找到了一个愚蠢的 Bug 导致这个问题。我们紧急修复了这个 Bug,并发布 Android SDK 2.0.1 版本。请已经升级到 2.0.0 的用户重新下载升级到 2.0.1 版本,非常抱歉。

有任何新问题都请及时通过邮件、Ticket 系统或者微博反馈我们,谢谢。

Android SDK 下载点击 这里

2013 年 11 月第三周 AVOS Cloud 更新

综述

Hi,本周我们对 SDK 做了一个大版本升级,正式从 1.4 版本跨入 2.0 版本时代。

Android SDK 对全部以 Parse 开头的类名都替换成以 AV 开头,打消大家对知识产权的疑虑,我们的 SDK 除了使用方式跟 parse 类似以外,完全是自主研发的。原来使用 parse 的类名只是为了大家迁移方便,现在我们决定正式切换这些类名,并提供了一个 Ruby 脚本 migrate.rb 来帮助 1.x 版本的用户升级到最新的 Android SDK。首先,您需要安装 Ruby,接下来,您只要将下载的 migrate.rb 放到您的项目根目录下,在您的项目根目录执行 ruby migrate.rb 命令就可以自动替换所有老的 SDK 类名,使用最新的 Android SDK。我们强烈建议您在升级前对源码做一个备份。 如果您在升级过程中遇到任何问题,都欢迎您及时联系我们。

iOS SDK 主要改动仍然是修复发现的 Bug,具体请看后面的更新日志。

数据导出和导入修复了不少问题,比如导出的数据再次导入丢失关联关系,导出的数据包含非法数据等问题,目前已可正常地导出和导入我们平台和 Parse.com 平台上的所有类型的数据。服务端的 API 也修复了部分 Bug,包括 count 调用不能使用 relatedTo 条件等。

网站上我们本周没有大的更新,只是单独列出了 用户条款页面

完整更新日志如下:

网站和服务端

  • 修复数据导入和导出服务的一些 Bug。
  • 添加了 用户条款页面
  • 修复 count API 无法使用复杂条件的 Bug。

Android SDK 2.0.0 发布

  • 将所有以 Parse 开头的类名修改为以 AV 开头,请使用我们的提供的 Ruby 脚本升级您的源码:migrate.rb,在项目根目录下运行即可。
  • 确保所有 callback 的 done 方法运行在 UI 线程。
  • 修复部分边界情况下 callback 没有调用的问题,例如网络超时导致文件保存失败的时候,AVUser 登陆失败没有回调等。
  • 统一网络调用超时时间,默认为 15 秒,API,文件上传下载等。

iOS SDK 2.0.0 发布

  • 增加缺失的常量定义,解决引用常量引起的链接问题
  • 在 AVOSCloud.h 中增加 AVRole 声明
  • 解决将文件存在数组中保存后,再次获取,返回对象不正确的问题
  • 增加 default ACL 支持
  • 解决 orderBySortDescriptors 传入参数为数组时存在的问题
  • 默认禁止 crash report
  • parseClassName 变为 optional
  • 解决 objectForKey 当传入参数为 nil 存在的问题
  • 修改统计发送策略,确保首次启动发送
  • 修复属性的内存泄露
  • 将 SVProgressHUD.bundle 打包进 AVOSCloud UI

2013 年 11 月第二周 AVOS Cloud 更新

本周在说明更新详情之前,要对我们的用户做一个道歉。我们在首页的 丑图秀秀 的 App 图标一直错用了另一个用户的 App—— 唯卡正能量 的图标。因为丑图秀秀背后公司的名字跟
唯卡正能量的 icon 有点联系,我们犯了一个主观错误,绝非故意,我们已经在发现的第一时间更正。在此向唯卡正能量的作者正式道歉,并保证不会再犯这样严重的错误。

本周我们发布了 SDK 1.4.4 版本,包括 iOS 和 android,Android 发布了简易 SNS SDK,具体请看开发指南。iOS 的 SNS SDK 开始支持 QQ 的 SSO 登录。其他主要仍然是修复 SDK 发现的 Bug。在此向所有为我们反馈问题的用户表示感谢。SDK 下载请点击 这里
网站也做了一点修改,加强了_User 表的密码修改提示,防止错误修改。并且 Class 的查询也增加了 Pointer 类型的支持。

详细的更新日志如下:

网站和 API 服务

  • 允许应用内用户登陆的 username 使用注册的邮箱(前提是注册提供了邮箱)登录 App。
  • 修复 relatedTo 查询无法与其他查询条件共同起作用的 Bug。
  • 修复子查询无法跟 objectId 一起工作的 Bug。
  • 修复网站注册欢迎邮件的链接失效问题
  • 技术支持系统发送的邮件添加直接回复链接。

JavaScript SDK 0.2.7

  • 改进 AV.Object.createWithoutData 方法。
  • 修复 AV.Object.destroyAll 在传入空数组的时候没有执行 options.success 的 bug。

Android SDK 1.4.4 版本发布

本次升级请一定要替换 fastjson,使用我们提供的版本,否则 SDK 无法正常工作

  • 升级 fastjson,请一定要使用我们提供的 fastjson 版本,否则 SDK 无法正常运行。
  • 发布简易 SNS SDK
  • 解决 cloud code 没有传入 user session token 的问题
  • 允许自定义推送声音
  • 允许自定义推送 icon
  • 修复同步 save 方法没有保存 user 和 installation 到本地的 bug。
  • 为上传文件添加后缀。
  • 为ParseUser添加getQuery(Class<? extend AVUser>) 方法用于子类化查询。
  • 其他一些内部改进等。

iOS SDK 1.4.4 版本发布

  • 解决子类化 relation 存在的问题
  • 完善增量更新的初始化保存,避免 beforeSave 收到空对象
  • 当 setObject:forKey: 传入的对象为 nil 时,会调用 removeObejctForKey
  • 解决子类化 setter 中存在的无限递归问题
  • 解决子类化中 refresh 和 fetch 返回错误对象的问题
  • 增加统计模块的首次汇报功能
  • 不再需要-ObjC 编译选项
  • SNS SDK 支持 QQ SSO

2013 年 11 月第一周 AVOS Cloud 更新

新的一月又开始了,11 月份的第一周我们没有发布比较大的更新,SDK 也没有新版本发布。在介绍本周更新之前,我们要对我们最近的一次
工作失误表示诚挚的道歉。在上周 6 我们紧急发布了 android 1.4.3.1 的版本,解决一个用户的紧急问题;但是,很遗憾的是我们的发布过程出现了问题,竟然没有将 SDK 的 jar 文件打包到最终的下载文件里。
这是个很低级的失误,更遗憾的是我们没有去检查最终的下载链接是否正确,还是一个用户给了我们反馈,我们才紧急删除了 1.4.3.1 版本。非常抱歉,我们再次改进改进了 SDK 打包的流程,期望能完全避免这种低级错误的发生。

这一周 SDK 没有发布新版本,一些小改进都将放到 1.4.4 版本里,在下周争取一起发布。这周主要改进在网站上。

首先是发布了 AVOS Cloud 服务健康状态检查 页面,您可以从这个页面查看所有 AVOS Cloud 提供的服务的健康状态,我们平均每隔 10 分钟自动检查所有服务的健康状态并显示在这个网页上,您还可以通过 RSS 订阅这些服务的健康状态信息,以便及时了解 AVOS Cloud 的服务状态。

其次,我们发布了文档的搜索工具,您可以在在线搜索 AVOS Cloud 的开发文档、SDK API 文档和博客新闻等信息。请点击 这里 访问文档搜索服务。如果您在 Mac 下使用 Alfred App 并购买了它的 PowerPack,您还可以使用我们提供的 workflow,就可以直接在 alfred 里搜索我们的文档信息,具体看 这篇博客

第三,我们为用户提供了更改注册邮箱的功能,可能您在注册的时候填错了邮箱,导致无法收到我们的欢迎邮件等重要通知(未来,我们还将定期发送您 App 的每周访问报告,因此邮箱地址非常重要)。那么现在您就可以通过个人设置里的修改邮箱功能来重新设置您在 AVOS Cloud 的登录邮箱,截图:

change_email.png

从安全角度考虑,在修改注册邮箱的时候需要您填写登录密码。暂时不支持从第三方网站登录 AVOS Cloud 的用户修改注册邮箱(当然如果您当时注册填写的邮箱有效,可使用忘记密码功能为 AVOS Cloud 设置一个密码,然后就可以修改注册邮箱)。

最后,我们在应用设置菜单里添加了应用墙 (AppWall) 发布设置的功能,您可以设置您的 App 信息,我们将在未来几周内上线一个使用 AVOS Cloud 的应用列表的展示页面,我们称之为应用墙。

appwall_settings.png

这周我们还修复了推送通知服务无法使用查询条件 {"channels" : ["public"]} 来推送消息的 bug,如果您原来是从 web 平台推送,或者是使用 {"channels" : "public"} 的查询条件,就不会遇到这个 Bug。感谢用户的积极反馈。