閃驗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這個類也是頭疼,授權界面就是硬湊出來的。格式不能亂改。

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