且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

解析iOS SDK:如何设置用户“在线"地位?

更新时间:2023-12-03 13:54:22

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

The most reliable way to handle this is to create a column named lastActive of type Date, then create a Cloud Code function to update this with the server time (so clock differences isn't an issue).

然后为了让在线"用户拥有另一个 Cloud Functions 函数来执行查询,其中 lastActive 大于现在 - 一些时间窗口,比如 2 分钟.

Then to get "online" users just have another Cloud Function that does a query where lastActive is greater than now - some time window like 2 minutes.

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);
    });
});

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

Your client will want to call the registerActivity Cloud Function every 1.5 minutes to allow some overlap so users don't appear to go offline if their internet is a bit slow.

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

Of course you can adjust the time windows to suit your needs. You could also add the ability to filter which users are returned (e.g. online friends only).