话不多说 先看效果图
最后的效果是这样的
实现步骤
-
友盟官网下载一键认证 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'// 必选 ``` `
-
初始化 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设备是可以认证的 完结撒花 有问题留言我看到第一时间处理答疑