该应用
所以我正在使用GCM开发一个聊天应用程序。该应用程序的工作原理如下:在用户列表中,我可以选择要与哪个用户交谈。然后向该用户发送请求,并且他必须接受该请求才能开始聊天。这就像第一个用户打开聊天室并等待另一个人加入。我通过GCM消息使用特殊标志进行所有这些通信。请注意,用户仅在“聊天室”内交换消息。如果他在聊天室外,就没有通知他。
问题
当用户离开聊天室时,我让他(通过onDestroy())通过GCM发送消息,告诉其他用户他正在解散,因此其他用户将无法再向他发送消息。但是如果第一个用户离开聊天室而没有调用onDestroy()会怎样? (比如关闭应用程序,应用程序崩溃,互联网停机等等......)
到目前为止解决方案
当用户发送或接收消息时,我在我的数据库上更新了他的last_seen
属性,这样我或多或少知道他是否还在线。所以我的服务器上有一个cron作业,如果活动对话的用户在线,则从x到x秒进行检查,如果其中一个用户没有,则关闭它。请注意,更新用户last_seen属性的过程非常繁重,因为每次收到GCM消息时我都必须进行HttpRequest(发送时我必须进行HTTPRequest,所以这不是一个大问题)这就是为什么我不喜欢喜欢这个解决方案...
问题
关于如何知道用户是否不在那里的任何想法?
提前致谢,欢迎任何想法
答案 0 :(得分:0)
您可以完美地使用聊天室活动的onStop()方法:
当活动不再对用户可见时调用,因为另一个活动已恢复并且正在覆盖此活动。这可能是因为正在开始新活动,现有活动被带到这个活动之前,或者这个活动正在被销毁。 如果此活动返回与用户交互,则执行onRestart(),如果此活动消失,则执行onDestroy()。
只要该事件未触发,就将状态设置为在线,如果是,则发送last_seen参数并假设他不再在聊天室中。