多设备登录的问题处理,远没有看起来那么简单。除了设计理念,安全方面的考量外,在技术上处理
也是个麻烦事。
列几种情况:
情况A:
同用户在多个同类型设备上登录。 如,同一个帐号在多个Android手机上登录.
情况B:
同用户在多个不同类型设备上登录。如,同一个帐号在手机,PC或Pad上登录.
情况C:
在一台手机上,用同一个帐号登录同一个产品旗下的两个不同APP.
......
看到当前你和别人的消息记录。另外,要是某一台设备丢失了,只要不退出。就一直可以看到消息记录等。
2.如果控制不好,服务端会对用户连接管理失去控制。
3.性能也是个麻烦事
4.多设备消息怎么同步
......
要有一个好的组合来区分各种情况.
我想到的大致参数如下:
userID + appID + Platform + DeviceType | 所连serviceID //IOS_DeviceToken
2. 如何群发至同一帐户的多个登录设备
只要订阅了同一个userID,则 PUB/SUB 模式即可
3. 多设备离线消息的拉取与同步
仅以IM消息为例,可以用下图的方式:
也是个麻烦事。
列几种情况:
情况A:
同用户在多个同类型设备上登录。 如,同一个帐号在多个Android手机上登录.
情况B:
同用户在多个不同类型设备上登录。如,同一个帐号在手机,PC或Pad上登录.
情况C:
在一台手机上,用同一个帐号登录同一个产品旗下的两个不同APP.
......
所以情况远比想的麻烦.而且还会带来其它问题.
1.安全问题,支持多设备的话,有可能出现,别人能在另一个你已登录过的设备上,看到当前你和别人的消息记录。另外,要是某一台设备丢失了,只要不退出。就一直可以看到消息记录等。
2.如果控制不好,服务端会对用户连接管理失去控制。
3.性能也是个麻烦事
4.多设备消息怎么同步
......
不过有些业务情况就是需要支持,没办法。
我把怎么处理一个帐号多设备登录简化成三个主要解决的问题.
1. 能同时维持同一帐户的多设备长连接。要有一个好的组合来区分各种情况.
我想到的大致参数如下:
userID + appID + Platform + DeviceType | 所连serviceID //IOS_DeviceToken
2. 如何群发至同一帐户的多个登录设备
只要订阅了同一个userID,则 PUB/SUB 模式即可
3. 多设备离线消息的拉取与同步
仅以IM消息为例,可以用下图的方式:
每个用户在服务端保存一个消息总数,一个最大已读数(不管是哪个设备读的)。 然后客户端本地缓存一个已读消息的最大消息ID.
通过两相对比,由客户端确定要拉取的消息范围。
放客户端,让用户在得到用户的消息状况后,去决定拉取多少条消息,而不是放服务端的原因之一是,这样更灵活点。
万一登录的是个新设备呢?或者每页显示行数发生变化了之类。
先记录到这,真要实现出来远不是个容易事。 牵扯很多东西,不然也不会到现在为止,还有些第三方服务商仍不支持这个功能。
BLOG: http://blog.csdn.net/xcl168