feat:添加google登录
This commit is contained in:
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
BIN
app/src/main/res/drawable-xxhdpi/login_ic_google.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/login_ic_google.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.1 KiB |
@@ -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"
|
||||
|
@@ -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
|
||||
*
|
||||
|
@@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user