我的主要问题是,当应用程序处于后台(已挂起)时,如何检测最终用户终止应用程序,以便能够向服务器发送注销请求?
我们在服务器中已经有一个超时间隔来终止会话,但假设该间隔为5分钟,这意味着在用户终止应用程序后,会话将存活5分钟,任何人都可以嗅探数据并重用它。
注:
-
我们使用HTTPS连接和SSL证书锁定。
-
我们还实现了一个心跳web服务,客户端应用程序每隔一段固定的时间就会调用它,告诉服务器在这个时间间隔内保持会话的活动状态,如果这个web服务没有调用特定的会话,服务器就会终止这个会话。
一旦您的应用程序被暂停,您在被终止之前不会收到任何进一步的通知。没有办法做你想做的事。
此外,用户可以暂停你的应用程序做其他事情(比如玩游戏),然后在几天内不返回你的应用。
如果你想在用户离开你的应用程序时注销,请在willBeSuspended消息上注销。要求更多的后台时间,然后立即发送注销信息。
Mohamed Amer,
这里是Quickblox服务器使用的一种方法,我觉得它非常可靠,尽管它涉及到一些开销。
一旦客户端应用程序(iOS或android)与quickblox服务器建立了会话,quickblox-server希望客户端应用程序在定期间隔后连续向服务器发送存在信息。
发送存在信息非常简单。他们已经编写了一个api,我们在间隔5分钟后继续使用我们的会话id。他们验证会话id,一旦发现有效,他们将把与该id关联的用户的过期时间再延长5分钟。
我相信他们会做的是,
方法1:他们保留最后一次命中时间,对于所有子请求,他们检查请求时间是否在5分钟的时间范围内,如果是,则简单地处理它。如果请求在5分钟后出现,他们将删除用户的会话id,并回应说您已使会话超时。
方法2:因为他们也提供在线和离线信息,所以他们不能简单地依赖于从服务器删除会话id的传入请求,所以他们可能会创建一个后台线程,在数据库上滑动以找到上次命中时间大于5分钟的条目,并将其从数据库中删除。并声明用户会话已过期。
尽管这涉及到客户端应用程序不断地访问服务器,并增加了类似应用程序的聊天应用程序的服务器负担,在这种应用程序中,呈现信息至关重要,但我相信这种开销仍然可以。
希望我至少给你提供了一些想法:)