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

接口回调

登录结果的响应回调