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