第三方登录绑定手机逻辑优化

This commit is contained in:
huangjian
2021-07-22 14:28:31 +08:00
parent 91c399d95e
commit b6e65ea0b1
5 changed files with 35 additions and 81 deletions

View File

@@ -29,10 +29,7 @@ import com.yizhuan.xchat_android_core.auth.exception.ShowPhoneCodeException;
import com.yizhuan.xchat_android_core.code.CodeType;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.user.event.NeedCompleteInfoEvent;
import org.greenrobot.eventbus.EventBus;
import com.yizhuan.xchat_android_core.user.UserModel;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -48,24 +45,22 @@ import io.reactivex.disposables.Disposable;
*/
public class BindCodeActivity extends BaseLoginAct {
private static final String TAG = "LoginVertificationActivity";
private CodeEditText codeEt;
private TextView tvGetCode,tvDesc,tvSecond;
private TextView tvGetCode, tvDesc, tvSecond;
private String mPhone;
private boolean isSuperAdmin = false;
private CodeDownDescTimer timer;
private static final String TYPE_SMS = "1";
public static void start(Context context,String phone) {
public static void start(Context context, String phone) {
Intent intent = new Intent(context, BindCodeActivity.class);
intent.putExtra("phone",phone);
intent.putExtra("phone", phone);
context.startActivity(intent);
}
public static void startForResult(Activity context,String phone, int requestCode) {
public static void startForResult(Activity context, String phone, int requestCode) {
Intent intent = new Intent(context, BindCodeActivity.class);
intent.putExtra("phone",phone);
intent.putExtra("phone", phone);
context.startActivityForResult(intent, requestCode); // startActivityForResult会导致singletop,singletask失效
}
@@ -142,7 +137,7 @@ public class BindCodeActivity extends BaseLoginAct {
*/
@SuppressLint("CheckResult")
private void getSmsCode() {
if (mPhone.length() != 11){
if (mPhone.length() != 11) {
return;
}
AuthModel.get()
@@ -157,7 +152,7 @@ public class BindCodeActivity extends BaseLoginAct {
@Override
public void onSuccess(String s) {
tvDesc.setText(getString(R.string.str_send_code_success)+mPhone);
tvDesc.setText(getString(R.string.str_send_code_success) + mPhone);
startCountDownTimer();
toast(s);
@@ -167,13 +162,12 @@ public class BindCodeActivity extends BaseLoginAct {
public void onError(Throwable e) {
toast(e.getMessage());
// finish();
LogUtils.e( "获取短信失败!");
LogUtils.e("获取短信失败!");
}
});
}
@Override
public void dealWithLoginError(Throwable e) {
if (!(e instanceof IsSuperAdminException)) {
@@ -209,7 +203,7 @@ public class BindCodeActivity extends BaseLoginAct {
private void startCountDownTimer() {
stopCountDownTimer();
timer = new CodeDownDescTimer(tvSecond, tvGetCode,60000, 1000);
timer = new CodeDownDescTimer(tvSecond, tvGetCode, 60000, 1000);
timer.start();
}
@@ -222,34 +216,19 @@ public class BindCodeActivity extends BaseLoginAct {
private void bindPhone() {
getDialogManager().showProgressDialog(BindCodeActivity.this, "正在绑定请稍后...");
AuthModel.get().bindPhone(
mPhone,
codeEt.getText().toString()
)
AuthModel.get().bindPhone(mPhone, codeEt.getText().toString())
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new SingleObserver<UserInfo>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(UserInfo userInfo) {
if (TextUtils.isEmpty(userInfo.getNick()) || TextUtils.isEmpty(userInfo.getAvatar())) {
EventBus.getDefault().post(new NeedCompleteInfoEvent());
}
getDialogManager().dismissDialog();
.doOnSuccess(s -> {
toast("绑定手机号成功");
setResult(RESULT_OK);
finish();
}
@Override
public void onError(Throwable e) {
})
.doOnError(throwable -> toast(throwable.getMessage()))
.flatMap(s -> UserModel.get().updateCurrentUserInfo())
.doFinally(() -> {
getDialogManager().dismissDialog();
toast(e.getMessage());
}
});
finish();
})
.subscribe();
}
}

View File

@@ -22,8 +22,8 @@ import com.yizhuan.xchat_android_library.utils.NetworkUtils;
import com.yizhuan.xchat_android_library.utils.TextWatcherWrapper;
/**
* @author zhouxiangfeng
* @date 17/2/26
* 由于所有用户都需要强制绑定手机,所以理论上这里只有MainActivity会调用到这个界面
* 但是为了以防万一,其它调用绑定手机的地方也改为调用这个页面了
*/
public class BindPhoneActivity extends BaseActivity implements View.OnClickListener {
@@ -49,11 +49,6 @@ public class BindPhoneActivity extends BaseActivity implements View.OnClickListe
context.startActivity(intent);
}
public static void startForResult(Activity context, int requestCode) {
Intent intent = new Intent(context, BindPhoneActivity.class);
context.startActivityForResult(intent, requestCode); // startActivityForResult会导致singletop,singletask失效
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -100,7 +95,7 @@ public class BindPhoneActivity extends BaseActivity implements View.OnClickListe
toast(accountValidator.getErrorMessage());
return;
}
BindCodeActivity.startForResult(BindPhoneActivity.this,accountEt.getText().toString(),REQUEST_CODE);
BindCodeActivity.startForResult(BindPhoneActivity.this, accountEt.getText().toString(), REQUEST_CODE);
break;
case R.id.iv_back:
@@ -115,7 +110,7 @@ public class BindPhoneActivity extends BaseActivity implements View.OnClickListe
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE &&resultCode == RESULT_OK){
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
finish();
}
}
@@ -143,7 +138,6 @@ public class BindPhoneActivity extends BaseActivity implements View.OnClickListe
}
@Override
public void onBackPressed() {
handleFinish();

View File

@@ -12,7 +12,6 @@ import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.Observer;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.StatusCode;
import com.netease.nimlib.sdk.auth.AuthService;
import com.netease.nimlib.sdk.auth.AuthServiceObserver;
@@ -31,7 +30,6 @@ import com.yizhuan.xchat_android_core.auth.event.LogoutEvent;
import com.yizhuan.xchat_android_core.auth.exception.BanAccountException;
import com.yizhuan.xchat_android_core.auth.exception.BigHeadPhoneException;
import com.yizhuan.xchat_android_core.auth.exception.IsSuperAdminException;
import com.yizhuan.xchat_android_core.auth.exception.OldMemberException;
import com.yizhuan.xchat_android_core.auth.exception.ShowPhoneCodeException;
import com.yizhuan.xchat_android_core.base.BaseModel;
import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
@@ -44,8 +42,6 @@ import com.yizhuan.xchat_android_core.initial.InitialModel;
import com.yizhuan.xchat_android_core.linked.LinkedModel;
import com.yizhuan.xchat_android_core.linked.bean.LinkedInfo;
import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent;
import com.yizhuan.xchat_android_core.utils.APIEncryptUtil;
import com.yizhuan.xchat_android_core.utils.CheckUtils;
import com.yizhuan.xchat_android_core.utils.OldHttpErrorHandleUtil;
@@ -947,38 +943,21 @@ public class AuthModel extends BaseModel implements IAuthModel {
* @return
*/
@Override
public Single<UserInfo> bindPhone(String phone, String code) {
public Single<String> bindPhone(String phone, String code) {
if (currentAccountInfo == null || currentAccountInfo.getUid() == 0) {
return Single.error(new Throwable("获取不到当前用户UID"));
}
return api.bindPhone(
String.valueOf(currentAccountInfo.getUid()),
phone,
code,
getTicket()
)
.flatMap(new Function<ServiceResult, SingleSource<String>>() {
@Override
public SingleSource<String> apply(ServiceResult serviceResult) throws Exception {
.flatMap(serviceResult -> {
if (!serviceResult.isSuccess()) {
return Single.error(new Throwable(serviceResult.getMessage()));
}
return Single.just("绑定手机成功");
}
})
.flatMap(new Function<String, SingleSource<UserInfo>>() {
@Override
public SingleSource<UserInfo> apply(String s) throws Exception {
return UserModel.get().updateCurrentUserInfo();
}
})
.doOnSuccess(new Consumer<UserInfo>() {
@Override
public void accept(UserInfo info) throws Exception {
//在绑定手机号成功时,重新发出此事件
EventBus.getDefault().post(new LoadLoginUserInfoEvent());
}
})
.compose(RxHelper.handleSchedulers());
}

View File

@@ -100,7 +100,7 @@ public interface IAuthModel extends IModel{
* @param code
* @return
*/
Single<UserInfo> bindPhone(String phone, String code);
Single<String> bindPhone(String phone, String code);
/**
* 获取手机验证码

View File

@@ -36,6 +36,7 @@ import com.yizhuan.xchat_android_core.user.event.NeedCompleteInfoEvent;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_library.net.rxnet.RxNet;
import com.yizhuan.xchat_android_library.utils.ListUtils;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import com.yizhuan.xchat_android_library.utils.StringUtils;
import com.yizhuan.xchat_android_library.utils.codec.DESUtils;
@@ -150,6 +151,7 @@ public final class UserModel extends BaseModel implements IUserModel {
//如果没有绑定手机号,提醒去绑定手机号
if (userInfo.getDefUser() != 4 && !userInfo.isBindPhone()) {
EventBus.getDefault().post(new NeedBindPhoneEvent());
SingleToastUtil.showToast("第三方登录需绑定手机号喔~");
return Single.error(new Throwable("need bind phone"));
}
//首次注册需要完善昵称和头像