美文网首页
闪验SDK一键登录

闪验SDK一键登录

作者: 你的益达233 | 来源:发表于2020-12-03 15:56 被阅读0次

    一、效果图

    效果图.jpg

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

    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这个类也是头疼,授权界面就是硬凑出来的。格式不能乱改。

    相关文章

      网友评论

          本文标题:闪验SDK一键登录

          本文链接:https://www.haomeiwen.com/subject/ewwmwktx.html