闪验SDK一键登录

一、效果图

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 开发这款软件有几个必备核心技能,uniapp这套开发框架就不用说了,后端至少会一种,这里后端选的是java,前段的...
    王佬爺阅读 5,366评论 6 6
  • 504b 0304 1400 0008 0800 4498 963d a6fa9ff3 9f41 1e00 a88...
    BossOx阅读 11,266评论 0 0
  • 去各个平台或者书籍上搜集你认为好的观点、金句、例子、故事、图片、视频……每一项各搜集5个(其中视频可直接复制链接)...
    井汪阅读 899评论 2 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,515评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,559评论 0 11