修复refreshToken过期重试问题
This commit is contained in:
@ -3,6 +3,7 @@ package com.gh.common.util;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Looper;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
@ -35,6 +36,7 @@ import okhttp3.RequestBody;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.HttpException;
|
||||
import rx.Observable;
|
||||
import rx.Scheduler;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
@ -200,7 +202,7 @@ public class LoginUtils {
|
||||
syncUserData(context, syncDeviceID, listener, loginTag);
|
||||
sp.edit().putString("syncDeviceID", null).apply(); // 清空
|
||||
} else {
|
||||
getUserData(context, listener, loginTag);
|
||||
getUserData(context, false, listener, loginTag);
|
||||
}
|
||||
}
|
||||
|
||||
@ -297,15 +299,15 @@ public class LoginUtils {
|
||||
if (loginToken != null && loginToken.getAccessToken() != null) {
|
||||
LoginResponseEntity.AccessToken accessToken = loginToken.getAccessToken();
|
||||
Long accessExpire = accessToken.getExpire();
|
||||
if (accessExpire != null && accessExpire > Utils.getTime(context)) {
|
||||
getUserData(context, listener, null);
|
||||
if (false && accessExpire != null && accessExpire > Utils.getTime(context)) {
|
||||
getUserData(context, false, listener, null);
|
||||
} else {
|
||||
LoginResponseEntity.RefreshToken refreshToken = loginToken.getRefreshToken();
|
||||
Long refreshExpire = refreshToken.getExpire();
|
||||
if (refreshExpire != null && refreshExpire > Utils.getTime(context)) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("refresh_token", refreshToken.getValue());
|
||||
RefreshTokenManager.getInstance().refreshToken(context, new JSONObject(params), listener);
|
||||
RefreshTokenManager.getInstance().refreshToken(context, false, new JSONObject(params), listener);
|
||||
} else {
|
||||
// 重新登录
|
||||
cleanUserData(context);
|
||||
@ -332,6 +334,12 @@ public class LoginUtils {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
super.onError(e);
|
||||
Utils.log("=====eeee::" + e.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(HttpException e) {
|
||||
super.onFailure(e);
|
||||
@ -349,14 +357,21 @@ public class LoginUtils {
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
public static void getUserData(final Context context, final onLoginCallBackListener listener, final LoginTag loginTag) {
|
||||
public static void getUserData(final Context context, boolean isRunMainThread, final onLoginCallBackListener listener, final LoginTag loginTag) {
|
||||
|
||||
RetrofitManager.getInstance(context)
|
||||
.getApi()
|
||||
.getUserInfo()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(userInfoResponse(context, loginTag, listener));
|
||||
Observable<UserInfoEntity> observable;
|
||||
if (isRunMainThread) {
|
||||
observable = RetrofitManager.getInstance(context)
|
||||
.getApi()
|
||||
.getUserInfo();
|
||||
} else {
|
||||
observable = RetrofitManager.getInstance(context)
|
||||
.getApi()
|
||||
.getUserInfo()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
observable.subscribe(userInfoResponse(context, loginTag, listener));
|
||||
}
|
||||
|
||||
// 获取本地缓存用户信息
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.gh.gamecenter.manager;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Looper;
|
||||
|
||||
import com.gh.common.constant.Constants;
|
||||
import com.gh.common.util.DeviceUtils;
|
||||
@ -19,6 +20,8 @@ import org.json.JSONObject;
|
||||
import okhttp3.MediaType;
|
||||
import okhttp3.RequestBody;
|
||||
import retrofit2.HttpException;
|
||||
import rx.Observable;
|
||||
import rx.Scheduler;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
@ -46,7 +49,14 @@ public class RefreshTokenManager {
|
||||
return mInstance;
|
||||
}
|
||||
|
||||
public void refreshToken(final Context context, JSONObject content, final LoginUtils.onLoginCallBackListener listener) {
|
||||
/**
|
||||
*
|
||||
* @param context
|
||||
* @param isRunMainThread 是否同步执行
|
||||
* @param content
|
||||
* @param listener
|
||||
*/
|
||||
public void refreshToken(final Context context, final boolean isRunMainThread, JSONObject content, final LoginUtils.onLoginCallBackListener listener) {
|
||||
if (isRefreshing) {
|
||||
listener.onLoginFailure();
|
||||
return;
|
||||
@ -62,9 +72,15 @@ public class RefreshTokenManager {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
RetrofitManager.getInstance(context).getUsersea().refreshToken(body)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
Observable<LoginResponseEntity> observable;
|
||||
if (isRunMainThread) {
|
||||
observable = RetrofitManager.getInstance(context).getUsersea().refreshToken(body);
|
||||
} else {
|
||||
observable = RetrofitManager.getInstance(context).getUsersea().refreshToken(body)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
observable
|
||||
.subscribe(new Response<LoginResponseEntity>() {
|
||||
@Override
|
||||
public void onResponse(LoginResponseEntity response) {
|
||||
@ -76,7 +92,7 @@ public class RefreshTokenManager {
|
||||
}
|
||||
saveLoginToken(context, response);
|
||||
|
||||
LoginUtils.getUserData(context, listener, LoginUtils.LoginTag.refresh);
|
||||
LoginUtils.getUserData(context, isRunMainThread, listener, LoginUtils.LoginTag.refresh);
|
||||
|
||||
isRefreshing = false;
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ class OkHttpRetryInterceptor internal constructor(context: Context) : Intercepto
|
||||
if (value == null) break
|
||||
params.put("refresh_token", value)
|
||||
|
||||
RefreshTokenManager.getInstance().refreshToken(mContext, JSONObject(params), object : LoginUtils.onLoginCallBackListener {
|
||||
RefreshTokenManager.getInstance().refreshToken(mContext, true, JSONObject(params), object : LoginUtils.onLoginCallBackListener {
|
||||
override fun onLogin(entity: UserInfoEntity, loginTag: LoginUtils.LoginTag) {
|
||||
val userLoginToken = LoginUtils.getLoginToken(mContext)
|
||||
val newBuilder = request.newBuilder()
|
||||
|
||||
Reference in New Issue
Block a user