其中 user 字段指向了 _User 表的 Pointer,installation 指向了 _Installation 的 Pointer。
如果同一个用户存在两条记录,则可以理解为该用户在 iPad 和手机上都成功登录过:
objectId
user
installation
createdAt
updatedAt
58156499da2f60005dbf70ab
58156499c4c97100554acaaf
cSAeHD347fQRRCQlmf2PCgxqVH51Nsy5
2016-10-30T03:10:17.874Z
2016-10-30T03:10:17.874Z
581564992e958a0054999374
58156499c4c97100554acaaf
yOVXDS63SRytpcarrYk0kUWfBAK6yNtx
2016-09-21T07:58:34.015Z
2016-09-21T07:58:34.015Z
向这个用户做推送时,就要针对他的这两个设备,在云引擎中可以使用如下代码:
var userQuery = new AV.Query('UserInstallation');
var user = AV.Object.createWithoutData('_User', '58156499da2f60005dbf70ab');
userQuery.equalTo('user', user);
userQuery.find().then(function (user_installations) {
var installationQuery = new AV.Query('_Installation');
var insIdArray = user_installations.map(function (v, i, a) {
var ins = v.get('installation');
return ins.id;
});
console.log(insIdArray);
installationQuery.containedIn('objectId', insIdArray);
AV.Push.send({
where: installationQuery,
data: {
alert: '苏州明天(2016月11月3日)天气晴,气温最高 18°,最低6°。'
}
});
});
在云引擎中使用推送服务
在云引擎上,除了进行像鉴权、账单处理等这些需要在服务端完成的操作,还可以完成消息的推送。例如天气类应用在气温发生大幅变化时需要向用户推送提醒消息,便可以通过云引擎统一向 iOS、Android 和 Web 端进行推送。这样既能减少各移动端的编码量,又便于统一各端的业务逻辑。
准备工作
推送服务主要用于 iOS 和 Androd 等移动平台,开发者首次尝试开发时一定要满足以下条件:
AndroidManifest.xml
开始之前,建议先熟悉以下内容:
发送给所有设备
从云引擎向所有已经安装了应用的设备推送一条消息「今日大风降温,多添件衣服亲!」:
注意,请确保在 iOS 和 Android 正确调用了保存
_Installation
的 API。发送给指定设备
假设当前在
_Installation
表中存在如下一条数据:从云引擎向这台设备推送消息的代码如下:
批量推送
批量推送一般有两种场景:
用户主动关注,类似于我们订阅报纸,报社需要每天向主动订阅了晚报的用户派送报纸,而推送就是向订阅了某一个频道的用户们进行批量推送。
服务端根据业务逻辑需求向一些用户动态的发送推送,有可能每一次推送的用户群都是浮动的。经典的案例就是,当你在淘宝浏览过某些商品之后,你再回到微博的网页上,你会看见微博的网页会根据你在淘宝浏览的商品给你显示相关的商品推荐。推送也是如此,一些用户的动态行为可以为推送服务提供算法参考。因此这些用户是动态的。
静态设定-Channel
我们不推荐开发者在
_Installation
表中加入过多的自定义属性,我们更推荐用户使用频道(Channel)的概念。例如在客户端 SDK 中,一个注册用户以自己的用户名或者 objectId 订阅了一个频道,这样就在云引擎上向这些用户推送内容就会简单很多。例如在某个天气应用中,用户选择「苏州」作为关注的城市。为了向该用户推送苏州的天气变化,我们可以在代码中为该用户订阅「苏州」这个频道的推送渠道:
而在云引擎中向「苏州」这个频道推送天气情况:
动态查询-Query
推送的对象逻辑上针对的是设备,因此如果希望发送给指定的用户,开发者则需要自己维护设备与用户之间的对应关系。
用过微博和手机 QQ 的用户都会经历这一场景:当在 iPad 和手机上都登录了自己的 QQ 账号时,一旦有新消息,iPad 和手机在默认情况下会同时收到推送。使用 LeanCloud 实现这个需求也很简单。
首先需要建立一张新表
UserInstallation
,假设有如下数据:建立这个关系的代码如下:
其中 user 字段指向了
_User
表的 Pointer,installation 指向了_Installation
的 Pointer。如果同一个用户存在两条记录,则可以理解为该用户在 iPad 和手机上都成功登录过:
58156499c4c97100554acaaf
58156499c4c97100554acaaf
向这个用户做推送时,就要针对他的这两个设备,在云引擎中可以使用如下代码:
UserInstallation
表中存储一些自定义的属性。我们不建议开发者在
_Installation
表里添加过多的自定义字段,它本身的查询权限是关闭的,我们不允许客户端直接查询_Installation
表,因此利用中间表来提高实用性以及预防查询的过载。接收推送消息
接收推送消息请参照以下文档进行代码编写: