检查用户是否在移动应用程序中联机

时间:2014-01-31 00:13:56

标签: php ios mobile mobile-application

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

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

1 个答案:

答案 0 :(得分:1)

以下是我将如何解决问题:

  1. 让应用为IOS设备分配唯一的ID。 (我将它保存在NSUserDefaults中)
  2. 当应用开始时,检查网址以获得响应(即:检查用户是否在线)
  3. 连接到服务器,如果尚未连接,请将唯一键与其他条目进行比较
  4. 如果整个条目历史记录中没有其他条目设置另一个NSUserDefault(BOOL) 告诉应用程序它永远不需要再次检查。
  5. 此唯一键现在变为“登录”,可以传输到服务器
  6. (可选)让用户填写信息,以便服务器可以将密钥与人/统计信息/任何信息相关联,而不仅仅是一个孤独的密钥并上传此信息(如果这样做,AFAIK,苹果要求您警告用户他们的信息正在被采取。)
  7. 让设备每隔一段时间向服务器发送一条消息告诉它'嘿,我还活着'
  8. 让服务器经常循环(我会说~IOS设备发送'我'活着'消息的时间加倍。即:如果设备每隔5秒告诉服务器它仍在线,请拥有服务器每7.5到10秒检查一次列表和响应,并使用响应表中收集的信息删除在线密钥列表。如果IOS设备在服务器循环时未发送消息,则它必须不在线。
  9. 我可以看到你带有时间戳的地方,但是世界各地的多个用户有多个连接,你必须对你的日期和时间宽容。时间条目和检查(但你似乎已经考虑到了这一点)因为某些用户的互联网需要比其他人更长的响应时间。

    编辑:刚刚看到关于即时消息的lat位。根据我的经验,如果你在移动设备上,它并不总是即时的(在我看来,当我通过Facebook打开与我的手机上的某人聊天对话时,他们的在线状态直到我发送消息/每次都没有更新设定的时间)。有时我的手机到达计算机后30秒到30分钟后会收到消息。但这似乎是优先考虑的(即:如果我与有很多信息来回的人进行大谈话,沟通是非常即时的) - 我认为我会分享。