Browse Source

[New]更新Token管理&登录状态管理

litchi98 1 week ago
parent
commit
e60d377c25

+ 23 - 66
app/src/main/java/com/datarecovery/master/data/repositories/AccountRepository.java

@@ -6,6 +6,7 @@ import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.Transformations;
 
+import com.atmob.auth.AtmobAuth;
 import com.atmob.common.data.KVUtils;
 import com.atmob.common.logging.AtmobLog;
 import com.datarecovery.master.R;
@@ -16,7 +17,6 @@ import com.datarecovery.master.data.api.request.QuickLoginRequest;
 import com.datarecovery.master.data.api.request.SendCodeRequest;
 import com.datarecovery.master.data.api.response.LoginResponse;
 import com.datarecovery.master.data.api.response.UserInfoResponse;
-import com.datarecovery.master.data.consts.ErrorCode;
 import com.datarecovery.master.sdk.qiyu.QiYuHelper;
 import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.RxHttpHandler;
@@ -36,7 +36,6 @@ import atmob.rxjava.utils.RxJavaUtil;
 @Singleton
 public class AccountRepository {
 
-
     private static final String TAG = "AccountRepository";
     private static final String KEY_LOGIN_PHONE_NUM = "key_account_repo_login_phone_num";
     private static final String KEY_LOGIN_USER_ID = "key_account_repo_login_user_id";
@@ -44,19 +43,10 @@ public class AccountRepository {
     private final MutableLiveData<String> loginPhoneNum = new MutableLiveData<>();
     private final LiveData<Boolean> isLogin = Transformations.map(loginPhoneNum, phoneNum -> !TextUtils.isEmpty(phoneNum));
     private final MutableLiveData<?> memberStatusInfo = new MutableLiveData<>();
-    public static String token;
     private final AtmobApi atmobApi;
     private final DeviceFuncRepository deviceFuncRepository;
     private final PayRepository payRepository;
 
-    private int errorCodeTimes;
-
-    private long lastRequestCodeTime;
-
-    static {
-        token = KVUtils.getDefault().getString(KEY_LOGIN_TOKEN, null);
-    }
-
     private boolean requestUserInfoDisabled = false;
 
     @Inject
@@ -69,22 +59,16 @@ public class AccountRepository {
         deviceFuncRepository.refreshFuncAuths();
     }
 
-    public LiveData<String> getLoginPhoneNum() {
-        return loginPhoneNum;
+    public static String getUserId() {
+        return KVUtils.getDefault().getString(KEY_LOGIN_USER_ID, "");
     }
 
-    public LiveData<Boolean> getIsLogin() {
-        return isLogin;
+    public static String getKeyLoginPhoneNum() {
+        return KVUtils.getDefault().getString(KEY_LOGIN_PHONE_NUM, "");
     }
 
-    private void onLoginSuccess(String phoneNum, String token) {
-        AccountRepository.token = token;
-        setLoginPhoneNum(phoneNum);
-        deviceFuncRepository.refreshFuncAuths();
-        payRepository.refreshOrderPageList();
-        KVUtils.getDefault().putString(KEY_LOGIN_TOKEN, token);
-        //查找并存储userId
-        refreshUserInfo();
+    public LiveData<String> getLoginPhoneNum() {
+        return loginPhoneNum;
     }
 
     private void setLoginPhoneNum(String phoneNum) {
@@ -96,22 +80,25 @@ public class AccountRepository {
 
     }
 
+    public LiveData<Boolean> getIsLogin() {
+        return isLogin;
+    }
+
+    private void onLoginSuccess(String phoneNum, String token) {
+        AtmobAuth.resetToken(token);
+        setLoginPhoneNum(phoneNum);
+        deviceFuncRepository.refreshFuncAuths();
+        payRepository.refreshOrderPageList();
+        //查找并存储userId
+        refreshUserInfo();
+    }
 
     public Single<?> requestUserCode(String phoneNum) {
-        long currentTime = System.currentTimeMillis();
-        if (currentTime - lastRequestCodeTime < 60 * 1000) {
-            return Single.error(new RequestCodeTooOftenException());
-        }
         return atmobApi.loginSendCode(new SendCodeRequest(phoneNum))
                 .compose(RxHttpHandler.handle(true))
-                .compose(RxJavaUtil.SingleSchedule.io2Main())
-                .doOnSuccess(o -> {
-                    lastRequestCodeTime = currentTime;
-                    errorCodeTimes = 0;
-                });
+                .compose(RxJavaUtil.SingleSchedule.io2Main());
     }
 
-
     private void refreshUserInfo() {
         if (requestUserInfoDisabled) {
             return;
@@ -126,7 +113,7 @@ public class AccountRepository {
             public void onSuccess(@NonNull UserInfoResponse userInfoResponse) {
                 requestUserInfoDisabled = false;
                 setLoginPhoneNum(userInfoResponse.getPhone());
-                QiYuHelper.setUserInfo(getKeyLoginPhoneNum(), userInfoResponse.getUserId(), token);
+                QiYuHelper.setUserInfo(getKeyLoginPhoneNum(), userInfoResponse.getUserId(), AtmobAuth.getToken());
                 KVUtils.getDefault().putString(KEY_LOGIN_USER_ID, userInfoResponse.getUserId());
             }
 
@@ -144,26 +131,11 @@ public class AccountRepository {
     }
 
     public Single<LoginResponse> login(String phoneNum, String verificationCode) {
-        if (errorCodeTimes >= 5) {
-            return Single.error(new LoginTooOftenException());
-        }
         LoginRequest loginRequest = new LoginRequest(phoneNum, verificationCode);
         return atmobApi.loginUserLogin(loginRequest)
                 .compose(RxHttpHandler.handle(true))
                 .compose(RxJavaUtil.SingleSchedule.io2Main())
-                .doOnSuccess(response -> {
-                    errorCodeTimes = 0;
-                    onLoginSuccess(phoneNum, response.getToken());
-                })
-                .doOnError(throwable -> {
-                    RxHttpHandler.ServerErrorException serverErrorException
-                            = throwable instanceof RxHttpHandler.ServerErrorException ? ((RxHttpHandler.ServerErrorException) throwable) : null;
-                    if (serverErrorException != null) {
-                        if (serverErrorException.getCode() == ErrorCode.ERROR_CODE_VERIFICATION_CODE_ERROR) {
-                            errorCodeTimes++;
-                        }
-                    }
-                });
+                .doOnSuccess(response -> onLoginSuccess(phoneNum, response.getToken()));
     }
 
     public void requestUserLogout() {
@@ -189,7 +161,7 @@ public class AccountRepository {
         if (!BoxingUtil.boxing(isLogin.getValue())) {
             return;
         }
-        token = null;
+        AtmobAuth.resetToken("");
         deviceFuncRepository.refreshFuncAuths();
         payRepository.refreshOrderPageList();
         KVUtils.getDefault().putString(KEY_LOGIN_PHONE_NUM, "");
@@ -220,19 +192,4 @@ public class AccountRepository {
                 .compose(RxJavaUtil.SingleSchedule.io2Main())
                 .doOnSuccess((response) -> onLoginSuccess(null, response.getToken()));
     }
-
-    public static String getUserId() {
-        return KVUtils.getDefault().getString(KEY_LOGIN_USER_ID, "");
-    }
-
-    public static String getKeyLoginPhoneNum() {
-        return KVUtils.getDefault().getString(KEY_LOGIN_PHONE_NUM, "");
-    }
-
-    public static class RequestCodeTooOftenException extends Exception {
-    }
-
-    public static class LoginTooOftenException extends Exception {
-    }
-
 }

+ 2 - 19
app/src/main/java/com/datarecovery/master/module/login/LoginViewModel.java

@@ -10,7 +10,6 @@ import androidx.lifecycle.MutableLiveData;
 import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
 import com.atmob.common.logging.AtmobLog;
-import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.R;
 import com.datarecovery.master.data.api.response.LoginResponse;
 import com.datarecovery.master.data.consts.ErrorCode;
@@ -22,8 +21,6 @@ import com.datarecovery.master.utils.BoxingUtil;
 import com.datarecovery.master.utils.Maps;
 import com.datarecovery.master.utils.RxHttpHandler;
 import com.datarecovery.master.utils.ToastUtil;
-import com.netease.nis.quicklogin.helper.UnifyUiConfig;
-import com.netease.nis.quicklogin.listener.QuickLoginPreMobileListener;
 
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
@@ -60,11 +57,6 @@ public class LoginViewModel extends BaseViewModel {
         init();
     }
 
-
-    public LiveData<Boolean> getShowLoading() {
-        return showLoading;
-    }
-
     public MutableLiveData<String> getPhoneNum() {
         return phoneNum;
     }
@@ -168,6 +160,7 @@ public class LoginViewModel extends BaseViewModel {
     private void doRequestVerificationCode(String phoneNumText) {
         if (BoxingUtil.boxing(isRequestCodeCountdown.getValue())) {
             ToastUtil.show(R.string.login_request_code_frequently_toast, ToastUtil.LENGTH_SHORT);
+            EventHelper.report(EventId.hf1000305, Maps.asMap(EventId.EVENT_ID, "hf11022"));
             return;
         }
         accountRepository.requestUserCode(phoneNumText)
@@ -188,11 +181,6 @@ public class LoginViewModel extends BaseViewModel {
                     @Override
                     public void onError(@NonNull Throwable e) {
                         showLoading.setValue(false);
-                        if (e instanceof AccountRepository.RequestCodeTooOftenException) {
-                            EventHelper.report(EventId.hf1000305, Maps.asMap(EventId.EVENT_ID, "hf11022"));
-                            ToastUtil.show(R.string.login_request_code_frequently_toast, ToastUtil.LENGTH_SHORT);
-                            return;
-                        }
                         e.printStackTrace();
                         stopGetCodeCountdown();
                         EventHelper.report(EventId.hf1000305, Maps.asMap(EventId.EVENT_ID, "hf11022"));
@@ -255,11 +243,6 @@ public class LoginViewModel extends BaseViewModel {
                     @Override
                     public void onError(@NonNull Throwable e) {
                         showLoading.setValue(false);
-                        if (e instanceof AccountRepository.LoginTooOftenException) {
-                            EventHelper.report(EventId.hf1000304, Maps.asMap(EventId.EVENT_ID, "hf11022"));
-                            ToastUtil.show(R.string.login_too_often_toast, ToastUtil.LENGTH_SHORT);
-                            return;
-                        }
                         if (e instanceof NetworkErrorException) {
                             EventHelper.report(EventId.hf1000304, Maps.asMap(EventId.EVENT_ID, "hf11019"));
                             ToastUtil.show(R.string.net_error, ToastUtil.LENGTH_SHORT);
@@ -285,7 +268,7 @@ public class LoginViewModel extends BaseViewModel {
 
 
     public boolean isCanLogin(String phoneNum, String verificationCode) {
-        return isPhone(phoneNum) && verificationCode != null && verificationCode.length() > 0;
+        return isPhone(phoneNum) && verificationCode != null && !verificationCode.isEmpty();
     }
 
     private boolean isPhone(String phoneNumText) {

+ 2 - 4
app/src/main/java/com/datarecovery/master/module/wxrecover/WeChatRecoverActivity.java

@@ -4,19 +4,17 @@ import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.atmob.app.lib.base.BaseActivity;
+import com.atmob.auth.AtmobAuth;
 import com.datarecovery.master.R;
-import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.databinding.ActivityWxRecoverBinding;
 import com.datarecovery.master.dialog.PermissionDialog;
 import com.datarecovery.master.module.login.LoginActivity;
 import com.datarecovery.master.module.member.MemberType;
-import com.datarecovery.master.utils.FilePermissionHelper;
 import com.datarecovery.master.utils.ReportUtil;
 import com.gyf.immersionbar.ImmersionBar;
 
@@ -98,7 +96,7 @@ public class WeChatRecoverActivity extends BaseActivity<ActivityWxRecoverBinding
     @Override
     protected void onResume() {
         super.onResume();
-        if (loginDialog != null && loginDialog.isShowing() && !TextUtils.isEmpty(AccountRepository.token)) {
+        if (loginDialog != null && loginDialog.isShowing() && AtmobAuth.isLoggedIn()) {
             weChatViewModel.findOrder();
             loginDialog.dismiss();
         }

+ 4 - 4
app/src/main/java/com/datarecovery/master/module/wxrecover/WeChatViewModel.java

@@ -7,10 +7,10 @@ import androidx.lifecycle.MutableLiveData;
 
 import com.atmob.app.lib.base.BaseViewModel;
 import com.atmob.app.lib.livedata.SingleLiveEvent;
+import com.atmob.auth.AtmobAuth;
 import com.datarecovery.master.R;
 import com.datarecovery.master.data.api.response.FindOrderResponse;
 import com.datarecovery.master.data.consts.EventId;
-import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.data.repositories.PayRepository;
 import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.member.MemberType;
@@ -42,10 +42,10 @@ public class WeChatViewModel extends BaseViewModel {
     @Inject
     public WeChatViewModel(PayRepository payRepository) {
         this.payRepository = payRepository;
-        if (TextUtils.isEmpty(AccountRepository.token)) {
-            showLoginEvent.call();
-        } else {
+        if (AtmobAuth.isLoggedIn()) {
             findOrder();
+        } else {
+            showLoginEvent.call();
         }
     }
 

+ 2 - 10
app/src/main/java/com/datarecovery/master/sdk/qiyu/QiYuHelper.java

@@ -1,37 +1,29 @@
 package com.datarecovery.master.sdk.qiyu;
 
-import android.app.AlertDialog;
 import android.app.Application;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.text.TextUtils;
-import android.widget.Toast;
 
+import com.atmob.auth.AtmobAuth;
 import com.atmob.common.data.KVUtils;
 import com.atmob.common.logging.AtmobLog;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.BuildConfig;
 import com.datarecovery.master.R;
-import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.dialog.CommonSureDialog;
 import com.datarecovery.master.module.browser.BrowserActivity;
 import com.datarecovery.master.utils.SystemUtil;
 import com.qiyukf.nimlib.sdk.RequestCallback;
 import com.qiyukf.nimlib.sdk.StatusBarNotificationConfig;
-import com.qiyukf.unicorn.api.OnMessageItemClickListener;
-import com.qiyukf.unicorn.api.UICustomization;
 import com.qiyukf.unicorn.api.Unicorn;
 import com.qiyukf.unicorn.api.YSFOptions;
 import com.qiyukf.unicorn.api.YSFUserInfo;
 import com.qiyukf.unicorn.api.event.EventCallback;
-import com.qiyukf.unicorn.api.event.EventProcessFactory;
 import com.qiyukf.unicorn.api.event.SDKEvents;
 import com.qiyukf.unicorn.api.event.UnicornEventBase;
 import com.qiyukf.unicorn.api.event.entry.RequestPermissionEventEntry;
 
 import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -48,7 +40,7 @@ public class QiYuHelper {
 
     public static void initSdk() {
         Unicorn.initSdk();
-        if (TextUtils.isEmpty(AccountRepository.token)) {
+        if (!AtmobAuth.isLoggedIn()) {
             setVisitorInfo();
         }
     }

+ 5 - 6
app/src/main/java/com/datarecovery/master/utils/FilePermissionHelper.java

@@ -1,7 +1,6 @@
 package com.datarecovery.master.utils;
 
 import android.os.Build;
-import android.text.TextUtils;
 import android.view.Gravity;
 
 import androidx.activity.ComponentActivity;
@@ -9,12 +8,12 @@ import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleEventObserver;
 import androidx.lifecycle.LifecycleOwner;
 
+import com.atmob.auth.AtmobAuth;
 import com.atmob.common.data.KVUtils;
 import com.atmob.common.runtime.ContextUtil;
 import com.datarecovery.master.BuildConfig;
 import com.datarecovery.master.R;
 import com.datarecovery.master.data.consts.EventId;
-import com.datarecovery.master.data.repositories.AccountRepository;
 import com.datarecovery.master.dialog.PermissionDialog;
 import com.datarecovery.master.handler.EventHelper;
 import com.datarecovery.master.module.login.LoginActivity;
@@ -41,7 +40,9 @@ public class FilePermissionHelper {
                     if (isSkipLogin || BuildConfig.DEBUG) {
                         return Single.just(sdkInt);
                     }
-                    if (TextUtils.isEmpty(AccountRepository.token)) {
+                    if (AtmobAuth.isLoggedIn()) {
+                        return Single.just(sdkInt);
+                    } else {
                         return (SingleSource<Integer>) observer -> activity.runOnUiThread(() -> {
                             PermissionDialog loginDialog = new PermissionDialog(activity);
                             loginDialog.setDialogContent(R.string.dialog_no_login)
@@ -54,7 +55,7 @@ public class FilePermissionHelper {
                                                 @Override
                                                 public void onStateChanged(@androidx.annotation.NonNull LifecycleOwner lifecycleOwner, @androidx.annotation.NonNull Lifecycle.Event event) {
                                                     if (event == Lifecycle.Event.ON_RESUME) {
-                                                        if (!TextUtils.isEmpty(AccountRepository.token)) {
+                                                        if (AtmobAuth.isLoggedIn()) {
                                                             loginDialog.dismiss();
                                                             activity.getLifecycle().removeObserver(this);
                                                             observer.onSuccess(sdkInt);
@@ -73,8 +74,6 @@ public class FilePermissionHelper {
                                     });
                             loginDialog.show();
                         });
-                    } else {
-                        return Single.just(sdkInt);
                     }
                 })
                 .flatMap((Function<Integer, SingleSource<Integer>>) sdkInt -> {