feat:添加google登录

This commit is contained in:
max
2024-04-01 16:34:24 +08:00
parent 7e6c8bc4d3
commit 2f8511ca16
5 changed files with 193 additions and 4 deletions

View File

@@ -271,6 +271,7 @@ public class LoginPasswordActivity extends BaseActivity {
});
});
setProtocol();
findViewById(R.id.layout_google).setOnClickListener(v -> googleLogin());
}
private void startCounter() {
@@ -312,6 +313,7 @@ public class LoginPasswordActivity extends BaseActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
AuthModel.get().getGoogleLoginService().onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK) {
String areaCode = data.getStringExtra(AreaCodeActivity.COUNTRY_NUMBER);
if (areaCode != null) {
@@ -492,4 +494,27 @@ public class LoginPasswordActivity extends BaseActivity {
return super.onKeyDown(keyCode, event);
}
private void googleLogin(){
getDialogManager().showProgressDialog(this);
AuthModel.get().googleLogin(this)
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String result) {
getDialogManager().dismissDialog();
}
@Override
public void onError(Throwable e) {
getDialogManager().dismissDialog();
dealWithLoginError(e);
e.printStackTrace();
}
});
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -79,10 +79,9 @@
<LinearLayout
android:id="@+id/ll_account_login"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_account_login"
@@ -174,11 +173,10 @@
<LinearLayout
android:id="@+id/ll_sms_login"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_account_login"
@@ -283,7 +281,42 @@
</LinearLayout>
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_login_body_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="ll_account_login,ll_sms_login" />
<FrameLayout
android:id="@+id/layout_google"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_48"
android:layout_marginStart="@dimen/dp_36"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_36"
android:background="@drawable/base_shape_ffffff_26dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_login_body_bottom">
<ImageView
android:id="@+id/iv_google"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_gravity="center_vertical|start"
android:layout_marginStart="@dimen/dp_28"
android:src="@drawable/login_ic_google" />
<TextView
android:id="@+id/tv_google"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Google"
android:textColor="@color/black"
android:textSize="@dimen/dp_16" />
</FrameLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_protocol_hint"

View File

@@ -5,8 +5,13 @@ import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import com.chwl.library.utils.constant.PackageNameConstants;
import com.example.module_base.support.google.IGoogleService;
import com.example.module_base.support.login.ILoginService;
import com.example.module_base.support.login.LoginSDKException;
import com.example.module_base.support.login.PlatformInfo;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
@@ -314,6 +319,129 @@ public class AuthModel extends BaseModel implements IAuthModel {
});
}
@Override
public Single<String> googleLogin(Activity activity) {
return Single.create((SingleOnSubscribe<PlatformInfo>) e -> {
ILoginService loginService = getGoogleLoginService();
if (loginService == null) {
e.onError(new Throwable(ResUtil.getString(R.string.bean_response_serviceresult_015)));
return;
}
//是否安装客户端
if (!DeviceUtils.isAppInstalled(getContext(), PackageNameConstants.GOOGLE_NAME)) {
e.onError(new Throwable(ResUtil.getString(R.string.xchat_android_core_auth_authmodel_09)));
return;
}
loginService.login(activity, new ILoginService.Listener() {
@Override
public void onSuccess(@NonNull PlatformInfo platformInfo) {
thirdUserInfo = new ThirdUserInfo();
thirdUserInfo.setType(ThirdUserInfo.TYPE_GOOGLE);
thirdUserInfo.setPlatform("Google");
thirdUserInfo.setUserName(platformInfo.getName());
thirdUserInfo.setUserIcon(platformInfo.getAvatar());
e.onSuccess(platformInfo);
}
@Override
public void onFailure(@NonNull LoginSDKException exception) {
exception.printStackTrace();
LogUtils.d("googleLogin" + exception);
e.onError(new Throwable(ResUtil.getString(R.string.xchat_android_core_auth_authmodel_010) + exception.getCode()));
}
});
})
.flatMap(platform -> {
String openid = platform.getId();
String unionid = platform.getId();
String avatar = thirdUserInfo.getUserIcon();
if (avatar != null && avatar.equals("null")) {
avatar = null;
}
thirdUserInfo.setUserIcon(avatar);
String gender = thirdUserInfo.getUserGender();
if (gender != null && !gender.trim().isEmpty()) {
gender = gender.replace("m", "1").replace("f", "2");
}
thirdUserInfo.setUserGender(gender);
EventBus.getDefault().post(new LoginReportEvent(3));
return thirdLogin(openid, unionid, TYPE_GOOGLE_LOGIN, "", "");
})
.flatMap(s -> imLogin(currentAccountInfo))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxHelper.handleException())
.doOnSuccess(s -> EventBus.getDefault().post(new LoginEvent()));
}
/**
* 第三方信息登录
*
* @param openid
* @param unionid
* @param type
* @return
*/
private Single<String> thirdLogin(String openid, String unionid, int type, String yiDunToken, String shuMeiDeviceId) {
LinkedInfo linkedInfo = LinkedModel.get().getLinkedInfo();
String linkedmeChannel = null;
if (linkedInfo != null && !StringUtil.isEmpty(linkedInfo.getChannel())) {
linkedmeChannel = linkedInfo.getChannel();
}
String finalLinkedmeChannel = linkedmeChannel;
return Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> e) throws Exception {
try {
LoginResult loginResult = api.thirdLogin(
openid,
unionid,
String.valueOf(type),
finalLinkedmeChannel,
yiDunToken,
shuMeiDeviceId
).blockingGet();
if (!loginResult.isSuccess()) {
if (loginResult.getCode() == CODE_BAN_ACCOUNT || loginResult.getCode() == CODE_BAN_DEVICE) {
e.onError(new BanAccountException(loginResult.getReason(), loginResult.getDate()));
} else if (loginResult.getCode() == CODE_ACCOUNT_CANCEL) {
e.onError(new AccountCancelException(loginResult.getMessage(), loginResult.getErbanNo(), loginResult.getCancelDate()));
} else {
e.onError(new Throwable(loginResult.getMessage()));
}
return;
}
currentAccountInfo = loginResult.getData();
DemoCache.saveCurrentAccountInfo(currentAccountInfo);
//成功获取到uid后就通知首页刷新审核中状态的数据
EventBus.getDefault().post(new GetCurrentUidEvent(true));
} catch (Exception e1) {
e.onError(new Throwable(OldHttpErrorHandleUtil.handle(e1)));
return;
}
//获取tick
try {
TicketResult ticketResult = requestTicket().blockingGet();
if (!ticketResult.isSuccess()) {
e.onError(new Throwable(ticketResult.getMessage()));
return;
}
ticketInfo = ticketResult.getData();
DemoCache.saveTicketInfo(ticketInfo);
} catch (Exception e1) {
e.onError(new Throwable(OldHttpErrorHandleUtil.handle(e1)));
return;
}
e.onSuccess(ResUtil.getString(R.string.xchat_android_core_auth_authmodel_012));
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
/**
* 获取tick
*

View File

@@ -64,6 +64,8 @@ public interface IAuthModel extends IModel {
*/
Single<String> login(String phoneAreaCode, String account, String password, String code, String yiDunToken, String shuMeiDeviceId);
Single<String> googleLogin(Activity activity);
/**
* 重置用户信息
*/
@@ -139,4 +141,5 @@ public interface IAuthModel extends IModel {
*/
boolean isImLogin();
}