解析云代码 GeoPoint

Posted

技术标签:

【中文标题】解析云代码 GeoPoint【英文标题】:Parse Cloud Code GeoPoint 【发布时间】:2016-06-01 07:34:44 【问题描述】:

我有一个 Parse App,它有两个基本对象。第一个对象“User”有一个名为“location”的属性,它存储一个 GeoPoint。

第二个对象是“Sighting”,它有一个带有 GeoPoint 的“location”属性。

在我的云代码中,我成功地在“Sighting”对象上引入了 aftersave 功能,以便在保存目击后向所有人发送推送通知。

但是我想要实现的只是发送一定范围内的用户。

我找到了 query.withinKilometeres,但我不明白如何比较所有 User."Locations" 并将保存的对象 "Location" 作为基础。此后向所有返回的用户发送推送。

云代码对我来说完全陌生,因此感谢您的帮助。

谢谢

詹姆斯

【问题讨论】:

【参考方案1】:

推送的目标是_Installation。 在您的问题中,您应该为设备的相关 currentUser 维护一个指针“用户”。

//afterSave of Sighting
var sighting = request.object;
//means created, not update
if(!sight.existed())
    var location = sighting.get('location');
    var userQuery = new Parse.Query(Parse.User);
    //1 for example
    userQuery.withinKilometeres('location', 1);

    var query = new Parse.Query(Parse.Installation);
    query.matchesQuery('user', userQuery);

    Parse.Push.send(
        where:query,
        data:
            alert: "this is msg",
            title: "this is title" 
        
    ,useMasterKey:true)
    .then(function()
        console.log('push done');
    , function(error)
        console.error(error);
    );


matchesQuery 有一个限制。在这种情况下,您不能发送超过 1000 个用户(以获取相关安装)。

所以我建议你把位置信息放在_Installation中,这样更有意义(你的用户可能有多个设备,但用户不能分成2个地方)

【讨论】:

哇,谢谢。解析云比我预期的要困难,所以这是否会有效地推送到目击位置 1 公里内的每个安装? 性能取决于您的设计和结果大小。查询性能是推送的重点之一。(但有时parse.com延迟可能1~30分钟才能推送)

以上是关于解析云代码 GeoPoint的主要内容,如果未能解决你的问题,请参考以下文章

解析云代码如何与解析服务器一起工作?

解析 iOS SDK + 云代码:如何更新用户

解析云代码给我代码:141 错误

解析云代码并触发性能 - 使用

解析云代码错误 - “需要主密钥”?

解析从云代码向特定用户发送推送通知