解析iOS SDK:如何设置用户"在线"状态?

Tom*_*ool 4 ios parse-platform

场景=我有一个应用程序,允许用户登录并查看也是"在线"的其他用户.为了设置每个用户的在线状态,我相信我应该设置代码......

[PFUser currentUser] setObject:[NSNumber numberWithBool:YES] forKey:@"isOnline"];
[[PFUser currentUser] saveInBackground];
Run Code Online (Sandbox Code Playgroud)

在用户使用应用程序时在应用程序中的某些时间.可能是appDelegate,但我不确定.

(如果这不正确那么请纠正我)

问题=应该在应用程序中设置此代码的位置,以便始终跟踪用户何时"在线"以及何时"脱机"?

(请包括方法名称)

Tim*_*ers 10

处理此问题的最可靠方法是创建一个名为lastActiveDate 的列,然后创建一个Cloud Code函数来更新服务器时间(因此时钟差异不是问题).

然后,为了让"在线"用户只有另一个云功能,它执行的查询lastActive比现在更大 - 某个时间窗口就像2分钟.

var moment = require("moment");

Parse.Cloud.define("registerActivity", function(request, response) {
    var user = request.user;
    user.set("lastActive", new Date());
    user.save().then(function (user) {
        response.success();
    }, function (error) {
        console.log(error);
        response.error(error);
    });
});

Parse.Cloud.define("getOnlineUsers", function(request, response) {
    var userQuery = new Parse.Query(Parse.User);
    var activeSince = moment().subtract("minutes", 2).toDate();
    userQuery.greaterThan("lastActive", activeSince);
    userQuery.find().then(function (users) {
        response.success(users);
    }, function (error) {
        response.error(error);
    });
});
Run Code Online (Sandbox Code Playgroud)

您的客户希望registerActivity每1.5分钟调用一次云功能以允许一些重叠,这样如果用户的互联网速度有点慢,用户就不会离线.

当然,您可以根据需要调整时间窗口.您还可以添加过滤返回哪些用户的功能(例如,仅限在线朋友).

  • 我最近发现30 /秒实际上是按分钟计算的,所以你得到3600 /分钟.根据您希望"在线"状态的准确程度,您说每个活动用户每1-5分钟就有1次点击.找出一个适合你的间隔.只需确保服务器间隔允许额外30秒左右的"宽限期". (3认同)