From ec2d14bffe6ed13b770063cdae6221ab4b64cb99 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Thu, 9 Nov 2017 11:47:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DrefreshToken=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=E9=87=8D=E8=AF=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/LoginUtils.java | 37 +++++++++++++------ .../manager/RefreshTokenManager.java | 26 ++++++++++--- .../retrofit/OkHttpRetryInterceptor.kt | 2 +- gradle.properties | 4 +- 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/gh/common/util/LoginUtils.java b/app/src/main/java/com/gh/common/util/LoginUtils.java index 30184e10c9..b0cceece81 100644 --- a/app/src/main/java/com/gh/common/util/LoginUtils.java +++ b/app/src/main/java/com/gh/common/util/LoginUtils.java @@ -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 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 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)); } // 获取本地缓存用户信息 diff --git a/app/src/main/java/com/gh/gamecenter/manager/RefreshTokenManager.java b/app/src/main/java/com/gh/gamecenter/manager/RefreshTokenManager.java index 84d11401f9..a1b5a262d5 100644 --- a/app/src/main/java/com/gh/gamecenter/manager/RefreshTokenManager.java +++ b/app/src/main/java/com/gh/gamecenter/manager/RefreshTokenManager.java @@ -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 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() { @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; } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpRetryInterceptor.kt b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpRetryInterceptor.kt index 67459f302f..7a2d7780b4 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpRetryInterceptor.kt +++ b/app/src/main/java/com/gh/gamecenter/retrofit/OkHttpRetryInterceptor.kt @@ -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() diff --git a/gradle.properties b/gradle.properties index 026e1038aa..bb99869e69 100644 --- a/gradle.properties +++ b/gradle.properties @@ -67,5 +67,5 @@ USERSEA_HOST=https\://usersea.ghzs.com/v1d0/ # 请不要手动改动下面的值,除非你明确需要以某个apk作为基准包,需要打包请以scripts/tinker*.sh为准 TINKER_ENABLE= -TINKER_ID=b57ef6c3 -TINKER_BASE_APK_DIR=app-1108-10-55-48_b57ef6c3 \ No newline at end of file +TINKER_ID=1d544ff5 +TINKER_BASE_APK_DIR=app-1108-20-13-16_1d544ff5 \ No newline at end of file