闪验SDK一键登录

一、效果图

二、配置就不说了,可直接参考官方文档,默认你配置没问题

http://shanyan.253.com/document/details?lid=519&cid=93&pc=28&pn=%25E9%2597%25AA%25E9%25AA%258CSDK

三、直接看一键登录方法

需求:未登录的,先进行一键登录(如未注册,接口顺便做注册,然后登录操作),未给权限的和一键授权出错的进普通登录流程

1、导入权限第三方库,也可以用你项目的。

//权限
implementation 'com.yanzhenjie:permission:2.0.0-rc4'

2、关键oneKeyLogin方法

fun oneKeyLogin(context:Context){
    if (PermissionCheckUtil.checkPermissions(context,READ_PHONE_STATE) && getAlwaysDeniedPhoneState()){
        saveAlwaysDeniedPhoneState(false)
    }
    if (getAlwaysDeniedPhoneState()){
        ARouter.getInstance().build(Constant.LoginNewActivity).navigation()
        return
    }
    if (!PermissionCheckUtil.checkPermissions(context,READ_PHONE_STATE)){
        //询问权限
        AndPermission.with(context)
                .permission(Permission.READ_PHONE_STATE)
                .onGranted {
                    LogUtil.i("getOneKeyLoginStatus2", "onGranted")
                    OneKeyLoginManager.getInstance().setAuthThemeConfig(ConfigUtils.getCJSConfig(context))
                    OneKeyLoginManager.getInstance().openLoginAuth(false,object :OpenLoginAuthListener{
                        override fun getOpenLoginAuthStatus(code: Int, result: String) {
                            LogUtil.i("getOneKeyLoginStatus1", "getAuthCode=" + code + "result=" + result)
                            if (code != 1000){
                                //拉取授权失败直接跳到登录界面
                                ARouter.getInstance().build(Constant.LoginNewActivity).navigation()
                                //销毁授权页
                                OneKeyLoginManager.getInstance().finishAuthActivity()
                            }
                        }

                    },object :OneKeyLoginListener{
                        override fun getOneKeyLoginStatus(code: Int, result: String) {
                            LogUtil.i("getOneKeyLoginStatus", "getAuthCode=" + code + "result=" + result)
                            if (code == 1000){
                                var bean = Gson().fromJson<OneKeyLoginBean>(result,OneKeyLoginBean::class.java)
                                CommonApiUtils.startOneKeyLogin(context,bean.token)
                            } else {
                                if (code == 1011){
                                    //销毁授权页
                                    OneKeyLoginManager.getInstance().finishAuthActivity()
                                } else {
                                    //拉取授权失败直接跳到注册页
                                    ToastUtils.showCustomToast("一键登录验证失败,请使用手机号码进行登录/注册")
                                    ARouter.getInstance().build(Constant.LoginNewActivity).navigation()
                                    //销毁授权页
                                    OneKeyLoginManager.getInstance().finishAuthActivity()
                                }
                            }
                        }

                    })
                }
                .onDenied {
                    SPUtils.saveAlwaysDeniedPhoneState(AndPermission.hasAlwaysDeniedPermission(context, Permission.READ_PHONE_STATE))
                    //拉取授权失败直接跳到登录界面
                    ARouter.getInstance().build(Constant.LoginNewActivity).navigation()
                    //销毁授权页
                    OneKeyLoginManager.getInstance().finishAuthActivity()

                }.start()
    } else {
        OneKeyLoginManager.getInstance().setAuthThemeConfig(ConfigUtils.getCJSConfig(context))
        OneKeyLoginManager.getInstance().openLoginAuth(false,object :OpenLoginAuthListener{
            override fun getOpenLoginAuthStatus(code: Int, result: String) {
                LogUtil.i("getOneKeyLoginStatus2", "getAuthCode=" + code + "result=" + result)
                if (code != 1000){
                    //拉取授权失败直接跳到登录界面
                    ARouter.getInstance().build(Constant.LoginNewActivity).navigation()
                    //销毁授权页
                    OneKeyLoginManager.getInstance().finishAuthActivity()
                }
            }

        },object :OneKeyLoginListener{
            override fun getOneKeyLoginStatus(code: Int, result: String) {
                LogUtil.i("getOneKeyLoginStatus3", "getAuthCode=" + code + "result=" + result)
                if (code == 1000){
                    var bean = Gson().fromJson<OneKeyLoginBean>(result,OneKeyLoginBean::class.java)
                    CommonApiUtils.startOneKeyLogin(context,bean.token)
                } else {
                    if (code == 1011){
                        //销毁授权页
                        OneKeyLoginManager.getInstance().finishAuthActivity()
                    } else {
                        //拉取授权失败直接跳到注册页
                        ToastUtils.showCustomToast("一键登录验证失败,请使用手机号码进行登录/注册")
                        ARouter.getInstance().build(Constant.LoginNewActivity).navigation()
                        //销毁授权页
                        OneKeyLoginManager.getInstance().finishAuthActivity()
                    }
                }
            }

        })
    }

}

3、ConfigUtils类

public class ConfigUtils {


//沉浸式竖屏样式
public static ShanYanUIConfig getCJSConfig(final Context context) {

    /************************************************自定义控件**************************************************************/

    //Drawable authNavHidden = context.getResources().getDrawable(R.mipmap.bg_onekey_banner);
    Drawable logoImgPath = context.getResources().getDrawable(R.mipmap.icon_app);
    Drawable logBtnImgPath = context.getResources().getDrawable(R.drawable.sysdk_login_bg);
    Drawable uncheckedImgPath = context.getResources().getDrawable(R.drawable.umcsdk_uncheck_image);
    Drawable checkedImgPath = context.getResources().getDrawable(R.drawable.umcsdk_check_image);
    //其他方式登录

   
    //顶部返回键和一键登录标题
    LinearLayout linearLayout = (LinearLayout) UtilHelper.INSTANCE.inflate(context, R.layout.activity_bar_base);
    LinearLayout.LayoutParams layoutParamsOther = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, UtilHelper.INSTANCE.dip2px(context, 44));
    layoutParamsOther.setMargins(0, 0, 0, 0);
    linearLayout.setLayoutParams(layoutParamsOther);
    linearLayout.setBackgroundColor(Color.alpha(0));
    ImageView ivBack = linearLayout.findViewById(R.id.back_button);
    ivBack.setVisibility(View.GONE);
    ImageView bar_right_image2 = linearLayout.findViewById(R.id.bar_right_image2);
    bar_right_image2.setImageResource(R.mipmap.icon_close_navigation_bar);
    View v_head_bottom_line = linearLayout.findViewById(R.id.bar_under_line);
    v_head_bottom_line.setVisibility(View.GONE);

    bar_right_image2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //销毁授权页
            OneKeyLoginManager.getInstance().finishAuthActivity();
        }
    });


    //其他方式登录
    TextView tip = new TextView(context);
    tip.setText("其他账号登录");
    tip.setTextColor(context.getResources().getColor(R.color.c_757575));
    tip.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
    RelativeLayout.LayoutParams mLayoutParamsTip = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    mLayoutParamsTip.setMargins(0, UtilHelper.INSTANCE.dip2px(context, 380), 0, 0);
    mLayoutParamsTip.addRule(RelativeLayout.CENTER_HORIZONTAL);
    tip.setLayoutParams(mLayoutParamsTip);

    
  

    /****************************************************设置授权页*********************************************************/
    ShanYanUIConfig uiConfig = new ShanYanUIConfig.Builder()
            //授权页导航栏:
            .setNavColor(Color.parseColor("#ffffff"))  //设置导航栏颜色
            .setNavText("")  //设置导航栏标题文字
            .setNavTextColor(0xff080808) //设置标题栏文字颜色
            .setAuthNavHidden(true)

            //授权页logo(logo的层级在次底层,仅次于自定义控件)
            .setLogoImgPath(logoImgPath)  //设置logo图片
            .setLogoWidth(65)   //设置logo宽度
            .setLogoHeight(65)   //设置logo高度
            .setLogoOffsetY(145)  //设置logo相对于标题栏下边缘y偏移
            .setLogoHidden(false)   //是否隐藏logo,需求隐藏logo


            //授权页slogan:
            .setSloganTextColor(0xff757575)  //设置slogan文字颜色
            .setSloganOffsetY(230)  //设置slogan相对于标题栏下边缘y偏移
            .setSloganHidden(false)

            //授权页号码栏:
            .setNumberColor(0xff222222)  //设置手机号码字体颜色
            .setNumFieldOffsetY(260)    //设置号码栏相对于标题栏下边缘y偏移
            .setNumFieldWidth(150)
            .setNumberSize(24)

            //授权页登录按钮:
            .setLogBtnText("本机号码一键登录")  //设置登录按钮文字
            .setLogBtnTextColor(0xffffffff)   //设置登录按钮文字颜色
            .setLogBtnImgPath(logBtnImgPath)   //设置登录按钮图片
            .setLogBtnOffsetY(310)   //设置登录按钮相对于标题栏下边缘y偏移
            .setLogBtnTextSize(15)
            .setLogBtnHeight(48)
            .setLogBtnWidth(320)
            .setLogBtnTextBold(true)

            //授权页隐私栏:
            .setAppPrivacyOne("隐私政策", "http://xxx.html")  //设置开发者隐私条款1名称和URL(名称,url)
            .setAppPrivacyTwo("注册协议", "https://xxx.html#/regxieyi")
            //.setAppPrivacyTwo("隐私政策", SPNoCleanUtil.getString(SPKey.YINSI_URL,""))  //设置开发者隐私条款2名称和URL(名称,url)
            .setAppPrivacyColor(0xff757575, 0xffD5100A)   //    设置隐私条款名称颜色(基础文字颜色,协议文字颜色)
            .setPrivacyOffsetBottomY(30)//设置隐私条款相对于屏幕下边缘y偏
            //.setPrivacyText("登录即代表同意","和","、","并授权闪验获取本机号码")
            .setUncheckedImgPath(uncheckedImgPath)
            .setCheckedImgPath(checkedImgPath)


            // 添加自定义控件:
            //其他方式登录及监听,可以不写,第二个参数为true时,跳转后会销毁授权界面
            //.addCustomView(tvXieYi, false, false, null)
            .addCustomView(tip, true, false, new ShanYanCustomInterface() {
                @Override
                public void onClick(Context context, View view) {
                    ARouter.getInstance().build(Constant.LoginNewActivity).navigation();

                }
            })
            //标题栏
            .addCustomView(linearLayout, false, false, null)
            .build();
    return uiConfig;

}

}

ConfigUtils这个类也是头疼,授权界面就是硬凑出来的。格式不能乱改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章