我正在尝试构建一个Parse查询,该查询将在最后3分钟内检索最新的活动用户。无论是使用PFCloud还是仅使用简单的Parse查询,我该如何实现?
首选iOS示例。
答案 0 :(得分:0)
最简单的方法是拥有一个虚拟字段,每次用户处于活动状态时都会更新。遗憾的是,您不能将此字段放在与用户关联的Installation
或User
对象上,因为这些字段受到保护 - 除非您使用PFCloud调用来处理它。但是,云代码调用很昂贵,如果你要经常运行这个调用,我建议使用第二个不受保护的Object类,你可以正常查询。
像这样存储ping:
- (void)updateLastOnline
{
PFQuery *query = [PFQuery queryWithClassName:@"OnlineInfo"];
//Store the objectID for the associated OnlineInfo object as a pointer field "onlineInfo" on the User object
[query getObjectInBackgroundWithId:[[PFUser currentUser] objectForKey"onlineInfo"] block:^(PFObject *onlineInfo, NSError *error) {
// Do something with the returned PFObject in the gameScore variable.
[onlineInfo setObject:[NSDate date] forKey:@"lastOnline"];
[onlineInfo saveInBackground];
}];
}
然后你可以使用带有两个日期的标准PFQuery来查询这个'安全'对象,你可以在我的帖子中找到它: PFQuery by date
注意:您可能还需要确保每隔x分钟调用一次,以防止针对您的Parse安装发送此垃圾邮件。您可以免费获得30个请求/秒,因此您可能不希望每分钟或每5分钟发送一次以上。
答案 1 :(得分:0)
这是一种方法:
// Set a date variable equal to 3 minutes ago
var date = NSDate()
var threeMinutesAgo = date.dateByAddingTimeInterval(-180)
// I'm using the updatedAt column in a User class
let query = PFQuery(className: "_User")
query.whereKey("updatedAt", greaterThanOrEqualTo: threeMinutesAgo)
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil && objects.count > 0 {
// Do something with queried objects ...
} else {
// Some error handling ...
}
}
请注意,只有当您的定义中的“活跃用户”是与Parse数据库或数据库中的关系进行交互的用户时,此方法才有效。