Android 友盟 手机号一键登录

777 阅读2分钟

话不多说 先看效果图

a87e0a3b3cbbb61f8920bac530551b9.png 最后的效果是这样的

实现步骤

  1. 友盟官网下载一键认证 gradle 依赖地址我 这边用这个 版本 如图 2.```` // 友盟 implementation 'com.umeng.umsdk:uverify:2.5.9'// 必选 implementation 'com.umeng.umsdk:uverify-main:2.1.4'// 必选 implementation 'com.umeng.umsdk:uverify-logger:2.1.4'// 必选 implementation 'com.umeng.umsdk:uverify-crashshield:2.1.4'// 必选 ``` `

  2. 初始化 sdk 配置 UM_KEY

UMConfigure.preInit(this, BuildConfig.UM_KEY, channel)  // 友盟预初始化

UMConfigure.init(
    application, BuildConfig.UM_KEY, channel, UMConfigure.DEVICE_TYPE_PHONE, ""
) // 正式开始初始化sdk
BuildConfig.UM_KEY// 是你申请到的友盟 KEY 
channel //渠道号  可以默认""
application //上下文对象

4.调用方法,定义方法

```
private var mTokenResultListener: UMTokenResultListener? = null
private var mUMAuthUIControlClickListener: UMAuthUIControlClickListener? = null
var mPhoneNumberAuthHelper: UMVerifyHelper? = null
```

    fun sdkInit(): Boolean {
        mTokenResultListener = object : UMTokenResultListener {
            override fun onTokenSuccess(s: String) {
                try {
                    val pTokenRet = UMTokenRet.fromJson(s)
                    if (UMResultCode.CODE_ERROR_ENV_CHECK_SUCCESS == pTokenRet.code) {
                        accelerateLoginPage(5000)
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }

            override fun onTokenFailed(s: String) {
                Logger.d("s========>$s")

                if (KeyLogin.toString() == "1") {
                    ToastUtils.show("一键登录失败请使用其他方式登录")

                }
                saveUserKeyLogin("0")
//                mPhoneNumberAuthHelper.quitLoginPage()
                //终端环境检查失败之后 跳转到其他号码校验方式
            }
        }

        mPhoneNumberAuthHelper = UMVerifyHelper.getInstance(this, mTokenResultListener)
        mPhoneNumberAuthHelper?.checkEnvAvailable(UMVerifyHelper.SERVICE_TYPE_LOGIN)
        mPhoneNumberAuthHelper?.setAuthSDKInfo(Constant.UM_App_Secret)


    }
    
    
    ```
    fun getLoginToken(timeout: Int) {

        mTokenResultListener = object : UMTokenResultListener {
            @SuppressLint("SuspiciousIndentation")
            override fun onTokenSuccess(s: String) {
                val tokenRet: UMTokenRet?
                try {
                    tokenRet = UMTokenRet.fromJson(s)
                    when (tokenRet.code) {
                        UMResultCode.CODE_GET_TOKEN_SUCCESS -> {
                            // 这里一键登录成功 能获取到 需要token 拿到后端去解密 
                            }

                        }

                        else -> {
                            Logger.d(tokenRet.code)
                        }

                    }


                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }

            override fun onTokenFailed(s: String) {
                //如果环境检查失败 使用其他登录方式
                var tokenRet: UMTokenRet
                try {
                    tokenRet = UMTokenRet.fromJson(s)
                    if (UMResultCode.CODE_ERROR_USER_CANCEL != tokenRet.code) {
        

                    } else {

                    }


                } catch (e: Exception) {
                    e.printStackTrace()
                }

                mPhoneNumberAuthHelper!!.quitLoginPage()
            }
        }
        var authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
        if (Build.VERSION.SDK_INT == 26) {
            authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_BEHIND
        }
        
        //这里是设置弹出框的样式UI 
        mPhoneNumberAuthHelper!!.setAuthUIConfig(
            UMAuthUIConfig

                .Builder()

                .setAppPrivacyColor(Color.GRAY, Color.parseColor("#002E00")).setPrivacyState(false)
                .setCheckboxHidden(false).setStatusBarColor(Color.WHITE).setLogoHidden(false)
                .setStatusBarHidden(true).setSloganText("")
                .setStatusBarUIFlag(View.SYSTEM_UI_FLAG_LOW_PROFILE).setLightColor(true)
                .setAuthPageActIn("in_activity", "out_activity")
                   //这个 setDialogWidth  setDialogHeight 是设置弹出框的高度和宽度 如果不设置就是全屏
                .setDialogWidth(320)
                .setDialogHeight(500).setAuthPageActOut("in_activity", "out_activity")
                .setVendorPrivacyPrefix("《").setVendorPrivacySuffix("》").setStatusBarHidden(false)
                .setLogoImgPath("launcher_ic").setLogoWidth(80).setLogoHeight(80).setLogoOffsetY(10)
                .setLogoScaleType(ImageView.ScaleType.CENTER_INSIDE)

                .setStatusBarColor(Color.TRANSPARENT).setSwitchAccText("其他方式登陆")
                .setScreenOrientation(authPageOrientation).setAppPrivacyOne(
                    "《隐私协议》", "privacy"
                ).setAppPrivacyTwo(
                    "《服务协议》", "service"
                ).create()
        )
        mPhoneNumberAuthHelper!!.setAuthListener(mTokenResultListener)
        mPhoneNumberAuthHelper!!.getLoginToken(getContext(), timeout)

    }
```
    
    
       ToastUtils.show// 我引入的一个吐司工具类  如爆红 可删除

5.定义完成 友盟的初始化方法后 调用

sdkInit()
getLoginToken(5000) 即可 就会出现弹窗框

6.注意 根据友盟日志 root 过的手机无法进行认证 ,我测试过阿里云的一键登录 root设备是可以认证的 完结撒花 有问题留言我看到第一时间处理答疑