Android 一键登录最佳实践
Android 一键登录最佳实践
本文旨要介绍 Android SDK 一键登录的最佳实践方式。
支持版本
v3.0.0 及以后版本。
一键登录流程说明
初始化SDK->获取运营商预取号->设置授权页面UI样式->拉起授权页面
1、初始化
我们建议在Application的onCreate方法中初始化SDK。
SDK初始化的目的是为了提前拉取运营商配置,提前拉取运行商配置有助于提高一键登录的速度。
@Override
public void onCreate() {
super.onCreate();
JVerificationInterface.init(this, new RequestCallback
@Override
public void onResult(int code, String result) {
}
});
}
@Override
public void onCreate() {
super.onCreate();
JVerificationInterface.init(this, new RequestCallback
@Override
public void onResult(int code, String result) {
}
});
}
此代码块在浮窗中显示
1、获取运营商预取号
API:预取号
预取号是通过运营商获取登录token的前置步骤,所以我们建议在进入需要使用一键登录的页面后,先调用预取号接口,这样当用户真正要使用一键登录的时候可以减少预取号加载时间,提升用户体验。
我们建议用户增加一个字段存储预取号接口状态!
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//建议在页面加载时进行获取预取号
preLogin();
}
//增加一个字段存储预取号接口状态
private boolean finishPrelogin = true;
private void preLogin() {
//判断SDK初始化状态
if (JVerificationInterface.isInitSuccess()){
this.finishPrelogin = false;
JVerificationInterface.preLogin(this, 5000, new PreLoginListener() {
@Override
public void onResult(final int code, final String content, JSONObject operatorReturn) {
//回调响应结果,建议用户增加一个字段存储预取号接口状态
this.finishPrelogin = true;
}
});
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//建议在页面加载时进行获取预取号
preLogin();
}
//增加一个字段存储预取号接口状态
private boolean finishPrelogin = true;
private void preLogin() {
//判断SDK初始化状态
if (JVerificationInterface.isInitSuccess()){
this.finishPrelogin = false;
JVerificationInterface.preLogin(this, 5000, new PreLoginListener() {
@Override
public void onResult(final int code, final String content, JSONObject operatorReturn) {
//回调响应结果,建议用户增加一个字段存储预取号接口状态
this.finishPrelogin = true;
}
});
}
}
此代码块在浮窗中显示
API说明
参数
类型
含义
说明
context
Context
上下文
应用程序的上下文
timeOut
int
超时时间
有效取值范围(0,10000], 若小于等于 0 则取默认值 5000. 大于 10000 则取 10000, 为保证预取号的成功率,建议设置为 3000-5000ms
listener
PreLoginListener
接口回调
预取号结果的响应回调
2、设置授权页面UI样式
API:自定义授权页面 UI 样式
在拉起授权登录页面之前,建议设置自定义的页面样式以呈现更好的页面效果。
private void loginAuth() {
//一些前置操作,例如:判断是否处于预取号中,加载HUD等等
..............
//建议拉起授权页面之前设置自定义UI
setUIConfig();
//以下为拉起授权页面部分
..............
}
private void setUIConfig() {
//UIConfig案例,具体参考API文档JVerifyUIConfig 一键登录-配置元素说明
JVerifyUIConfig uiConfig = new JVerifyUIConfig.Builder().setAuthBGImgPath("main_bg")
.setNavColor(0xff0086d0)
.setNavText("登录")
.setNavTextColor(0xffffffff)
.setNavReturnImgPath("umcsdk_return_bg")
.setLogoWidth(70)
.setLogoHeight(70)
.setLogoHidden(false)
.setNumberColor(0xff333333)
.setLogBtnText("本机号码一键登录")
.setLogBtnTextColor(0xffffffff)
.setLogBtnImgPath("umcsdk_login_btn_bg")
.setPrivacyNameAndUrlBeanList(List
.setPrivacyNameAndUrlBeanList(List
.setUncheckedImgPath("umcsdk_uncheck_image")
.setCheckedImgPath("umcsdk_check_image")
.setSloganTextColor(0xff999999)
.setLogoOffsetY(50)
.setLogoImgPath("logo_cm")
.setNumFieldOffsetY(170)
.setSloganOffsetY(230)
.setLogBtnOffsetY(254)
.setNumberSize(18)
.setPrivacyState(false)
.setNavTransparent(false)
.addCustomView(mBtn, true, new JVerifyUIClickCallback() {
@Override
public void onClicked(Context context, View view) {Toast.makeText(context,"动态注册的其他按钮",Toast.LENGTH_SHORT).show();}
}).addCustomView(mBtn2, false, new JVerifyUIClickCallback() {
@Override
public void onClicked(Context context, View view) {Toast.makeText(context,"动态注册的其他按钮 222",Toast.LENGTH_SHORT).show();}
}).addNavControlView(navBtn, new JVerifyUIClickCallback() {
@Override
public void onClicked(Context context, View view) {Toast.makeText(context,"导航栏按钮点击",Toast.LENGTH_SHORT).show();}
}).setPrivacyOffsetY(30).build();
//设置自定义页面UI
JVerificationInterface.setCustomUIWithConfig(uiConfig);
}
private void loginAuth() {
//一些前置操作,例如:判断是否处于预取号中,加载HUD等等
..............
//建议拉起授权页面之前设置自定义UI
setUIConfig();
//以下为拉起授权页面部分
..............
}
private void setUIConfig() {
//UIConfig案例,具体参考API文档JVerifyUIConfig 一键登录-配置元素说明
JVerifyUIConfig uiConfig = new JVerifyUIConfig.Builder().setAuthBGImgPath("main_bg")
.setNavColor(0xff0086d0)
.setNavText("登录")
.setNavTextColor(0xffffffff)
.setNavReturnImgPath("umcsdk_return_bg")
.setLogoWidth(70)
.setLogoHeight(70)
.setLogoHidden(false)
.setNumberColor(0xff333333)
.setLogBtnText("本机号码一键登录")
.setLogBtnTextColor(0xffffffff)
.setLogBtnImgPath("umcsdk_login_btn_bg")
.setPrivacyNameAndUrlBeanList(List
.setPrivacyNameAndUrlBeanList(List
.setUncheckedImgPath("umcsdk_uncheck_image")
.setCheckedImgPath("umcsdk_check_image")
.setSloganTextColor(0xff999999)
.setLogoOffsetY(50)
.setLogoImgPath("logo_cm")
.setNumFieldOffsetY(170)
.setSloganOffsetY(230)
.setLogBtnOffsetY(254)
.setNumberSize(18)
.setPrivacyState(false)
.setNavTransparent(false)
.addCustomView(mBtn, true, new JVerifyUIClickCallback() {
@Override
public void onClicked(Context context, View view) {Toast.makeText(context,"动态注册的其他按钮",Toast.LENGTH_SHORT).show();}
}).addCustomView(mBtn2, false, new JVerifyUIClickCallback() {
@Override
public void onClicked(Context context, View view) {Toast.makeText(context,"动态注册的其他按钮 222",Toast.LENGTH_SHORT).show();}
}).addNavControlView(navBtn, new JVerifyUIClickCallback() {
@Override
public void onClicked(Context context, View view) {Toast.makeText(context,"导航栏按钮点击",Toast.LENGTH_SHORT).show();}
}).setPrivacyOffsetY(30).build();
//设置自定义页面UI
JVerificationInterface.setCustomUIWithConfig(uiConfig);
}
此代码块在浮窗中显示
3、拉起授权页面
API:拉起授权页面
拉起授权页面,在该页面中完成一键登录;
####注意
如果没有获取预取号该接口则会主动获取预取号,然后再进行拉起页面;
如果调用该接口时调用了预取号接口并且还没有获取完成,则回调中会返回预取号获取中的提示,建议在预取号获取完成后再调用该接口;
没有设置自定义UI,会使用默认UI;
private void loginAuth() {
//如果预登录未完成则不建议调用一键登录,根据我们的数据分析如果预登录较长时间未完成,一键登录的成功率也会降低,所以用户体验最好的方式就是,在预登录接口执行完成后进行一键登录。
//我们强烈建议,在一键登录的前置页面进行预取号接口调用。
if (!finishPrelogin) {
return;
}
//设置自定义UI
setUIConfig();
//LoginSettings为登录配置
LoginSettings settings = new LoginSettings();
settings.setAutoFinish(true);// 设置登录完成后是否自动关闭授权页
settings.setTimeout(15 * 1000);// 设置超时时间,单位毫秒。 合法范围(0,30000], 范围以外默认设置为 10000
settings.setAuthPageEventListener(new AuthPageEventListener() {
@Override
public void onEvent(int cmd, String msg) {//do something...}
});// 设置授权页事件监听
//拉起授权页面
JVerificationInterface.loginAuth(this, settings, new VerifyListener() {
@Override
public void onResult(int code, String content, String operator, JSONObject operatorReturn) {
//回调授权页面响应结果
//得到loginToken以完成登录
}
});
}
private void setUIConfig() {
......
}
private void loginAuth() {
//如果预登录未完成则不建议调用一键登录,根据我们的数据分析如果预登录较长时间未完成,一键登录的成功率也会降低,所以用户体验最好的方式就是,在预登录接口执行完成后进行一键登录。
//我们强烈建议,在一键登录的前置页面进行预取号接口调用。
if (!finishPrelogin) {
return;
}
//设置自定义UI
setUIConfig();
//LoginSettings为登录配置
LoginSettings settings = new LoginSettings();
settings.setAutoFinish(true);// 设置登录完成后是否自动关闭授权页
settings.setTimeout(15 * 1000);// 设置超时时间,单位毫秒。 合法范围(0,30000], 范围以外默认设置为 10000
settings.setAuthPageEventListener(new AuthPageEventListener() {
@Override
public void onEvent(int cmd, String msg) {//do something...}
});// 设置授权页事件监听
//拉起授权页面
JVerificationInterface.loginAuth(this, settings, new VerifyListener() {
@Override
public void onResult(int code, String content, String operator, JSONObject operatorReturn) {
//回调授权页面响应结果
//得到loginToken以完成登录
}
});
}
private void setUIConfig() {
......
}
此代码块在浮窗中显示
API说明
参数
类型
含义
说明
context
Context
上下文
应用程序的上下文
settings
LoginSettings
登录接口设置项
用来设置登录完成后是否自动关闭等配置,
listener
VerifyListener
接口回调
登录结果的响应回调