项目中的一键登录整理
-
效果图
-
极光一键登录
-
运行提供 demo,手动导入一些 jar
-
加入了一些混淆
-
-dontoptimize
-dontpreverify-dontwarn cn.jpush.**
-keep class cn.jpush.** { ; }
-dontwarn cn.jiguang.*
-keep class cn.jiguang.** { ; }
-dontwarn com.cmic.*
-keep class com.cmic.** { ; }
-dontwarn com.unicom.*
-keep class com.unicom.** { ; }
-dontwarn cn.com.chinatelecom.*
-keep class cn.com.chinatelecom.** { *; }
-
-
-
思路
- 点击按钮登录时,用一个 透明 的 SignActivity 来 承载 极光创建的 CtLoginActivity,并手动的关闭 CtLoginActivity
- 有一些比如在文章详情页登录,登录后还需显示原来界面,可通过在application中设置一些字段,用于判断是否需要在执行MainActivity后,继续跳转
-
代码如下
<!-- 设置主题为透明 xml中不能和portrait 混用,Android 8.0 会出现问题 -->
<activity
android:name=".activity.login_onekey.SignActivityV1"
android:launchMode="singleTask"
android:theme="@style/loginTheme"
/>
<!-- 一键登录主题 -->
<style name="loginTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
public class SignActivityV1 extends NormalActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
//设置坚屏 一定要放到try catch里面,否则会崩溃
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} catch (Exception e) {
}
//检查 当前网络环境不支持认证,不支持去验证码登录
if(!checkYiJianLogin()){
finish();
SignActivity.startLogin(this, SignActivity.LOGIN);
return;
}
//因为有很多细节的地方一键登录,在这里面做了快速点击判断
if (DoubleClickUtils.isFastDoubleClick()) {
return;
}
if (this != null) {
//显示加载Dialog
showProgressDialogByZL();
//设置一键授权的展示样式
setUIConfig(this);
//获取号码认证的token
JVerificationInterface.getToken(this, 5000, new VerifyListener() {
@Override
public void onResult(int code, String content, String operator) {
//2008 正在获取token中,稍后再试
Log.e("tag", "code= " + code + " token=" + content + ", operator=" + operator);
if (code == FETCH_TOKEN_SUCCESS) {
toGetYuYueCode(SignActivityV1.this);
} else {
//关闭Dialog
hideProgressDialogByZL();
finish();
SignActivity.startLogin(SignActivityV1.this, SignActivity.LOGIN);
}
}
});
}
}
private void toGetYuYueCode(NormalActivity activity) {
JVerificationInterface.preLogin(activity, 3000, (code, content) -> {
hideProgressDialogByZL();
//7000 表示成功