首先我们要在服务端创建一个token的值,这个值是和userid以及手机码绑定到一起的,也就是请求token的时候我们要给服务端传递当前设备的设备号及用户id。token这个值就是客户端调用服务端的凭证。
android 中获取机器唯一标示 deviceid
//deviceId
public static String getDeviceId(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSys
temService(Context.TELEPHONY_SERVICE);
if (tm == null) {
return “”;
}
return “” + tm.getDeviceId();
}
但是这个很多机器是无法获取到的这个值,所以后来改为mac地址, mac地址很好理解,就是用户上网的上网许可证,这个买手机的时候,你翻开电池就知道里面有一个标签!
/**
-
获取MAC地址,注意:手机重启,mac地址为null;
-
@param context
-
@return mac地址;
*/
public static String getMac(Context context) {
if (context != null) {
WifiManager wifi = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
} else {
return “”;
}
}
2.获取token
app进入app时要先获取token,获取token的时候我们要给服务端传递当前设备的设备号,当我们换了设备后设备号变了,返回的token值也就变了,那么原设备的token相对来说就失效了,当在原设备和服务端有交互的时候就会返回token失效,用户登陆注销等要及时更新token值。
3.请求交互携带token
每次客户端和服务端有任何交互的时候都要传递这个token参数,当我们在另一台设备登录的时候原设备上存的token就失效了,因为数据库里面当前用户的token已经在新设备获取toekn的时候覆盖了,这样原设备请求时就会提示token失效了。
4.根据服务端返回码处理逻辑
事先客户端和服务端要约定好一个code码,例如:我们约定返回码为99的时候代表token失效,那么当我们请求服务端返回值为99的时候就要提示 您的登陆状态失效,请您重新登陆。
switch (code) {
case 1:
break;
case 99://被踢下线
//Do Something
break;
}