【问题标题】:Check if a user is online in mobile application检查用户是否在移动应用程序中在线
【发布时间】:2014-01-31 00:13:55
【问题描述】:

我正在开发一个 iOS 应用程序,我想检查特定用户是否在线。 我的第一个想法是从应用程序以 5 秒的距离循环发送异步连接到 php 页面,该页面通过插入当前日期和时间来更新数据库中的字段。然后,为了查看特定用户是否在线,应用程序每 5 秒从数据库中获取此数据并与当前时间进行比较:如果当前时间大于收集的数据(大于 5 秒),则表示该用户离线,否则在线。这可行,但即时消息应用程序肯定不会使用这种方法,因为它太贵了。应该使用哪种方法?

希望我自己解释一下,谢谢!

【问题讨论】:

    标签: php ios mobile mobile-application


    【解决方案1】:

    我将如何解决这个问题:

    1. 让应用程序为 IOS 设备分配一个唯一 ID。 (我会将其保存在 NSUserDefaults 中)
    2. 当应用启动时检查一个 url 以获得响应(即:检查用户是否在线)
    3. 连接到服务器,如果尚未连接,请将唯一键与其他条目进行比较
    4. 如果整个条目历史记录中没有其他条目,则设置另一个 NSUserDefault (BOOL) 告诉应用它永远不需要再次检查。
    5. 这个唯一的密钥现在变成了某种“登录”,可以传输到服务器
    6. (可选)让用户填写信息,以便服务器可以将密钥与人员/统计信息/任何信息相关联,而不仅仅是一个单独的密钥并上传此信息(如果这样做,AFAIK,苹果要求您警告用户他们的信息正在被窃取。)
    7. 让设备每隔一段时间向服务器发送一条消息,告诉它“嘿,我还活着”
    8. 让服务器每隔一段时间循环一次(我会说~ IOS 设备发送“我还活着”消息的时间加倍。即:如果设备每 5 秒告诉服务器它仍然在线,则让服务器每 7.5 - 10 秒检查一次列表和响应)并使用响应表中收集的信息删除在线密钥列表。如果 IOS 设备在服务器循环时没有发送消息,则它一定不在线。

    我可以通过时间戳看到您要去的地方,但是对于世界各地的多个用户具有多个连接,您必须对您的日期和时间条目和检查宽容(但您似乎已经考虑到这一点)因为某些用户的 Internet 响应时间比其他用户长。

    编辑:刚刚看到您对即时消息的了解。根据我的经验,如果您在移动设备上,它并不总是即时的(在我看来,当我通过 Facebook 在手机上与某人打开聊天对话时,他们的在线状态不会更新,直到我发送消息/每次设定时间)。有时我会在手机到达我的电脑后 30 秒到一分钟后在我的手机上收到消息。但这似乎是优先考虑的(即:如果我与某人进行大量对话,并​​且来回传递大量信息,则交流非常及时)-只是想我会分享。

    【讨论】:

    • 好的,你的解决方案看起来很棒。我已经实现了一些关于这个的东西。我可以查看用户是否在线,将 BOOL 读入数据库。此 BOOL 每分钟从用户应用程序更新两次,并设置为 TRUE,如果用户关闭应用程序,则设置为 FALSE。现在,如果用户关闭应用程序时出现错误,我的 BOOL 不能永远为真,所以我必须在服务器中执行循环。正如你所说,我的服务器应该这样做:如果 BOOL 为 TRUE,并且在最后一分钟没有更新,我必须将其标记为 FALSE,这是一种超时。我如何在数据库服务器端做到这一点?
    • 抱歉,拖了这么久。好的,所以服务器端的事情我不能帮你抱歉:(我做了一些课程,但我不太有信心给你编译的代码(已经有一段时间了)。如果你愿意,我可以解释我会如何攻击这个,但我没有代码可以给你。提出一个更针对 sql 和服务器交互的新问题可能是一个想法。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多