一、效果圖
二、配置就不說了,可直接參考官方文檔,默認你配置沒問題
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這個類也是頭疼,授權界面就是硬湊出來的。格式不能亂改。