概述

  • 秒验整合了三大运营商的网关认证能力, 为开发者提供一键登录功能, 优化登录注册流程
  • SDK支持api16及以上版本。
  • 网络取号时候请务必开启手机流量
    • 电信只支持4G网络取号
    • 移动, 联通支持4G, 3G, 2G网络取号但在非4G网络情况下容易取号失败
  • 针对双卡双待手机只取当前流量卡号

一、集成准备:

1. 注册应用申请MobKey和MobSecret: 点击查看注册流程

二、配置集成

  • 将下面的脚本添加到您的根模块build.gradle中
buildscript {
    repositories {
        ...
    }
    dependencies {
        ...
        classpath "com.mob.sdk:MobSDK:2018.0319.1724"
    }
}

share1

  • 在使用SecVerify模块的build.gradle中,添加插件和扩展,需要将appKey和appSecret的值替换为在上面申请到的MobKey和MobSecret如:
// 添加插件
apply plugin: 'com.mob.sdk'

// 注册SecVerify的相关信息
MobSDK {
    appKey "申请Mob的appkey"
    appSecret "申请Mob的AppSecret"
    SecVerify {}
}
  • 指定.so库(如需)

电信免密登录能力使用了so库,若开发者应用同时使用了其他so库,则需根据自身应用支持的cpu架构,选择使用SecVerify的不同so库。

// 根据需要选择对应的.so库
android {
    defaultConfig {
        // 应用的applicationId、versionCode等配置信息
        ...
        applicationId '您的ApplicationId'

        ndk {
            // 选择要添加的对应 cpu 类型的 .so 库,多个abi以“,”分隔。
            abiFilters 'armeabi-v7a'
            // 可指定的值为 'armeabi-v7a', 'arm64-v8a', 'armeabi', 'x86', 'x86_64',
        }
    }
}
  • 指定Android9.0 http协议支持

由于Android 9.0开始,系统强制使用https请求,运营商方面暂不支持https取号,因此需要关闭9.0系统的强制https功能,请在manifest的 Application 节点增加 usesCleartextTraffic 设置,如下所示:

<application
		android:icon="@drawable/ic_launcher"
		android:label="@string/app_name"
		android:usesCleartextTraffic="true">

三、使用SDK

SecVerify包含两个接口:预登录登录

在使用API前,请注意以下说明:

a.免密登录能力必须经过运营商网关取号,因此必须在手机打开移动蜂窝网络的前提下才会成功。

b.预登录接口用于向运营商进行预取号操作,建议在实际调用登录接口前提前调用预登录接口(比如应用启动时或进入注册或登录页面时),这将极大地加快登录接口执行耗时,提高用户体验。

1 预登录

接口描述:

获取临时凭证 可以提前获知当前用户的手机网络环境是否符合一键登录的使用条件,成功后将得到用于一键登录使用的临时凭证, 默认的凭证有效期10min(电信)/60min(联通)/60min(移动)。

//建议提前调用预登录接口,可以加快免密登录过程,提高用户体验
    SecVerify.preVerify(new OperationCallback<Void>() {
        @Override
        public void onComplete(Void data) {
            //TODO处理成功的结果
        }
        @Override
        public void onFailure(VerifyException e) {
            //TODO处理失败的结果
        }
    });

参数说明:

接口 参数列表 必须 说明
preVerify OperationCallback<Void> callback callback: 接口回调

OperationCallback包含以下回调方法:

回调方法 意义
onComplete(Void data) 操作成功
onFailure(VerifyException e) 操作失败

VerifyException :

接口 参数列表 意义
getCode 获取错误码
getMessage 获取SDK返回的错误信息
getCause 获取运营商返回的错误信息

2登录

接口描述:

调用一键登录方法将立即拉起授权页面

SecVerify.verify(new VerifyCallback() {
		   @Override
		   public void onOtherLogin() {
				// 用户点击“其他登录方式”,处理自己的逻辑
		   }
		   @Override
		   public void onUserCanceled() {
				// 用户点击“关闭按钮”或“物理返回键”取消登录,处理自己的逻辑
			}
           @Override
		   public void onComplete(VerifyResult data) {
         // 获取授权码成功,将token信息传给应用服务端,再由应用服务端进行登录验证,此功能需由开发者自行实现
                LoginTask.getInstance().login(data,new ResultListener<LoginResult>() {
		             @Override
                     public void onComplete(LoginResult data) {
                     //TODO处理成功的结果
                     }
                     @Override
					 public void onFailure(DemoException e) {
					 //TODO处理失败的结果
					 }
				});
           }
		   @Override
		   public void onFailure(VerifyException e) {
			//TODO处理失败的结果
		   }
	    });
}
接口 参数列表 必须 说明
verify VerifyCallback callback callback: 接口回调

VerifyCallback包含以下回调方法:

回调方法 意义
onComplete(VerifyResult data) 操作成功
onOtherLogin() 其他登录方式回调
onFailure(VerifyException e) 操作失败

VerifyResult定义:

成员变量 意义
String opToken 运营商token
String token 服务器token
String operator 运营商类型,[CMCC:**移动,CUCC:**联通,CTCC:**电信]

注意:登录接口响应成功后,开发者需要将得到的token信息传给应用服务器,再由应用服务器请求SecVerify服务器,进行登录确认,并将最终结果返回给应用客户端,流程结束。此部分功能需由开发者自行实现,应用服务器与SecVerify服务器的对接请参考 服务端接口文档

4 手动关闭登录界面

SecVerify提供了以下方法用于由开发者主动关闭授权页面:

SecVerify.finishOAuthPage();

关于该方法,作以下说明:

  • 登录 接口默认在回调接口时,SDK内部会自动关闭授权页,开发者不需要再次调用上述方法进行关闭操作
  • 开发者添加的 自定义控件点击时默认不关闭授权页,如需关闭,可以使用该方法
  • 通过该方法主动关闭授权页时,不会触发 登录 接口的任何回调

5 是否自动关闭授权页面

SecVerify提供了以下方法用于由开发者决定登录成功或失败是否自动关闭授权页面如果不需要可以不调用:

SecVerify.autoFinishOAuthPage(boolean isFinish);

关于该方法,作以下说明:

  • 如果未设置或设置为true,登录接口在回调时默认会自动关闭授权页面

  • 如果设置为false,那么在登录成功或者失败的回调中,必须要手动调用SecVerify.finishOAuthPage();方法来关闭授权页面

刷新授权页面

SecVerify提供了以下方法用于刷新授权页面:

SecVerify.refreshOAuthPage();

关于该方法,作以下说明:

  • 如果需要在授权页面修改界面内容,可以通过设置ui属性的hidden方法来隐藏界面控件并用自定义控件设置自己的UI

获取授权页面的其他回调

SecVerify提供了以下方法用于获取授权页面的其他回调,此方法需放在调用verify方法之前:

SecVerify.OtherOAuthPageCallBack(new OAuthPageEventCallback() {
			@Override
			public void initCallback(OAuthPageEventResultCallback cb) {
				cb.pageOpenCallback(new OAuthPageEventCallback.PageOpenedCallback() {
					@Override
					public void handle() {
						Log.i(TAG, System.currentTimeMillis() + " pageOpened");
					}
				});
				cb.loginBtnClickedCallback(new OAuthPageEventCallback.LoginBtnClickedCallback() {
					@Override
					public void handle() {
						Log.i(TAG, System.currentTimeMillis() + " loginBtnClicked");
					}
				});
				cb.agreementPageClosedCallback(new OAuthPageEventCallback.AgreementPageClosedCallback() {
					@Override
					public void handle() {
						Log.i(TAG, System.currentTimeMillis() + " agreementPageClosed");
					}
				});
				cb.agreementPageOpenedCallback(new OAuthPageEventCallback.AgreementClickedCallback() {
					@Override
					public void handle() {
						Log.i(TAG, System.currentTimeMillis() + " agreementPageOpened");
					}
				});
				cb.cusAgreement1ClickedCallback(new OAuthPageEventCallback.CusAgreement1ClickedCallback() {
					@Override
					public void handle() {
						Log.i(TAG, System.currentTimeMillis() + " cusAgreement1ClickedCallback");
					}
				});
				cb.cusAgreement2ClickedCallback(new OAuthPageEventCallback.CusAgreement2ClickedCallback() {
					@Override
					public void handle() {
						Log.i(TAG, System.currentTimeMillis() + " cusAgreement2ClickedCallback");
					}
				});
				cb.pageCloseCallback(new OAuthPageEventCallback.PageClosedCallback() {
					@Override
					public void handle() {
						Log.i(TAG, System.currentTimeMillis() + " pageClosed");
					}
				});
				cb.checkboxStatusChangedCallback(new CheckboxStatusChangedCallback() {
					@Override
					public void handle(boolean b) {
						Log.i(TAG, System.currentTimeMillis() + " current status is " + b);
					}
				});
			}
		});
SecVerify.OtherOAuthPageCallBack(cb -> {
			cb.pageOpenCallback(() -> Log.i(TAG, System.currentTimeMillis() + " pageOpened"));
			cb.loginBtnClickedCallback(() -> Log.i(TAG, System.currentTimeMillis() + " loginBtnClicked"));
			cb.agreementPageClosedCallback(() -> Log.i(TAG, System.currentTimeMillis() + " agreementPageClosed"));
			cb.agreementPageOpenedCallback(() -> Log.i(TAG, System.currentTimeMillis() + " agreementPageOpened"));
			cb.cusAgreement1ClickedCallback(() -> Log.i(TAG, System.currentTimeMillis() + " cusAgreement1ClickedCallback"));
			cb.cusAgreement2ClickedCallback(() -> Log.i(TAG, System.currentTimeMillis() + " cusAgreement2ClickedCallback"));
			cb.pageCloseCallback(() -> {
				Log.i(TAG, System.currentTimeMillis() + " pageClosed");
			});
		});

参数说明:

接口 参数列表 必须 说明
OtherOAuthPageCallBack OAuthPageEventCallback callback callback: 接口回调

OAuthPageEventCallback包含以下方法:

回调方法 意义
pageOpenCallback(PageOpenedCallback callback) 授权页面打开回调
pageCloseCallback(PageClosedCallback callback) 授权页面关闭回调
loginBtnClickedCallback(LoginBtnClickedCallback callback) 点击登录按钮回调
agreementPageClosedCallback(AgreementPageClosedCallback callback) 隐私协议页面关闭回调
agreementPageOpenedCallback(AgreementClickedCallback callback) 点击运营商隐私协议回调
cusAgreement1ClickedCallback(CusAgreement1ClickedCallback callback) 点击自定义隐私协议一回调
cusAgreement2ClickedCallback(CusAgreement2ClickedCallback callback) 点击自定义隐私协议二回调
cusAgreement3ClickedCallback(CusAgreement3ClickedCallback callback) 点击自定义隐私协议三回调
checkboxStatusChangedCallback(CheckboxStatusChangedCallback callback) 复选框状态修改回调

可在以上各个方法的回调中处理对应的事件

设置debug模式

SecVerify提供了以下方法用于设置debug模式:

SecVerify.setDebugMode(boolean isDebug);

超时设置

SecVerify提供了以下方法用于设置超时时间,单位为ms,取值在1000-10000之间:

SecVerify.setTimeOut(int time);

是否使用缓存

SecVerify提供了以下方法用于关闭默认的缓存功能,默认为使用缓存,在进入授权页面之后取消登录和切换登录不会清除缓存,登录成功或者失败会清除缓存

SecVerify.setUseCache(boolean useCache);

四、授权页界面修改

收取页面控件

SecVerify提供默认的授权页面样式,在不指定的情况下显示默认样式

说明

  1. 该方法需在 登录 接口之前调用。
  2. 授权页面属性设置方法的参数可以设置资源ID也可以直接设置值,同时设置时优先使用资源ID
  3. 控件背景色的设置,建议使用 selector 以及 shape 实现,具体方法请参考Demo的 MainActivity
  4. 所有控件的X、RightX、Y、BottomY属性分别代表了控件距离屏幕左右上下的距离
  5. 设置了BottomY属性后,会默认靠屏幕底部,同时Y属性的设置即距屏幕上方距离无效。
  6. 根据运营商要求,手机号、登录按钮、运营商协议及品牌部分不可隐藏

具体方法如下

SecVerify.setUiSettings(UiSettings uiSettings)

SecVerify.setLandUiSettings(LandUiSettings uiSettings)
  • UiSettings 对象由 Uisettings.Builder 进行构建,用于设置竖屏授权页面

  • LandUiSettings对象由LandUiSettings.Builder进行构建,用于设置横屏授权页面

  • 同时设置UiSettings和LandUiSettings时可横竖屏切换

  • Android 8.0由于系统原因,无法固定设置横竖屏,如果只设置了UiSettings或LandUiSettings,屏幕方向由上一个页面的方向决定

  • Uisettings.BuilderLandUiSettings.Builder 都包含以下方法:

状态栏

方法 意义
setImmersiveTheme(boolean immersiveTheme) 状态栏是否透明 (5.0以上生效)
setImmersiveStatusTextColorBlack(boolean textColorBlack) 状态栏文字颜色是否为黑色(6.0以上生效)

导航栏

方法 参数 意义
setNavColorId int navColorId 标题栏背景色资源ID 例:R.color.sec_verify_nav_color
int color 16进制色值,例:0xffffffff
setNavTextId int navTextId 标题栏标题文字资源ID 例:R.string.sec_verify_demo_verify
String navText 标题栏标题文字 例:“一键登录”
setNavTextSize int navTextSizeId 标题栏标题文字大小ID 例:R.dimen.sec_verify_demo_text_size_s
int textSize 标题栏标题文字大小(单位:sp)例:16
setNavTextColorId int navTextColorId 标题栏文字颜色资源ID例:R.color.sec_verify_nav_text_color
int color 16进制色值,例:0xffffffff
setNavCloseImgId int navCloseImgId 标题栏左侧关闭按钮图片资源ID 例:R.drawable.sec_verify_nav_close_img
Drawable navCloseImg Drawable对象
setNavCloseImgWidth int navCloseImgWidthId 标题栏左侧关闭按钮图片宽度资源ID例:R.dimen.sec_verify_demo_text_size_s
int navCloseImgWidth 标题栏左侧关闭按钮图片宽度(单位:dp) 例:16
setNavCloseImgHeight int navCloseImgHeightId 标题栏左侧关闭按钮图片高度资源ID例:R.dimen.sec_verify_demo_text_size_s
int navCloseImgHeight 标题栏左侧关闭按钮图片高度(单位:dp) 例:16
setNavCloseImgOffsetX int navCloseImgOffsetXId 标题栏左侧关闭按钮图片左偏移量资源ID例:R.dimen.sec_verify_demo_text_size_s
int navCloseImgOffsetX 标题栏左侧关闭按钮图片宽度(单位:dp)例:16
setNavCloseImgOffsetRightX int navCloseImgOffsetRightXId 标题栏左侧关闭按钮图片右偏移量资源ID(设置之后关闭图标会默认靠屏幕右边)例:R.dimen.sec_verify_demo_text_size_s
int navCloseImgOffsetRightX 标题栏左侧关闭按钮图片右偏移量(单位:dp)例:16
setNavCloseImgOffsetY int navCloseImgOffsetYId 标题栏左侧关闭按钮图片上偏移量资源ID例:R.dimen.sec_verify_demo_text_size_s
int navCloseImgOffsetY 标题栏左侧关闭按钮图片上偏移量(单位:dp)例:16
setNavTransparent boolean navTransparent 标题栏是否透明,默认透明
setNavHidden boolean navHidden 标题栏是否隐藏,默认不隐藏
setNavCloseImgHidden boolean navCloseImgHidden 标题栏左侧关闭按钮是否隐藏,默认不隐藏

背景

方法 参数 意义

setBackgroundClickClose(boolean
backgroundClickClose)

boolean backgroundClickClose

设置点击授权页面背景是否关闭页面,默认不关闭页面

setBackgroundImgId

int backgroundImgId

设置背景图片资源ID 例:R.drawable.background

int backgroundImg

Drawable 对象

Logo


 方法
 

 参数
 

 意义
 

setLogoImgId

int logoImgId

Logo图片资源ID,默认使用应用图标

Drawable logoImg

Drawable对象

setLogoHidden

boolean logoHidden

Logo是否隐藏,默认false

setLogoWidth

int logoWidthId

Logo宽度大小资源ID 例:R.dimen.sec_verify_demo_logo_width

int logoWidth

Logo宽度(单位:dp) 例:80

setLogoHeight

int logoHeightId

Logo高度大小资源ID例:R.dimen.sec_verify_demo_logo_height

int logoHeight

Logo高度(单位:dp) 例:80

setLogoOffsetX

int logoOffsetXId

Logo左偏移量大小资源ID例:R.dimen.sec_verify_demo_logo_offset_x

int logoOffsetX

Logo左偏移量(单位:dp) 例:30

setLogoOffsetY

int logoOffsetYId

Logo上偏移量大小资源ID例:R.dimen.sec_verify_demo_logo_offset_y

int logoOffsetY

Logo上偏移量(单位:dp) 例:30

setLogoOffsetBottomY

int logoOffsetBottomYId

Logo下偏移量大小资源ID例:R.dimen.sec_verify_demo_logo_offset_bottom_y

int logoOffsetBottomY

Logo下偏移量(单位:dp) 例:30

setLogoOffsetRightX

int logoOffsetRightXId

Logo右偏移量大小资源ID例:R.dimen.sec_verify_demo_logo_offset_right_x

int logoOffsetRightX

Logo右偏移量(单位:dp) 例:30

setLogoAlignParentRight

boolean logoAlignParentRight

Logo是否靠屏幕右边

脱敏手机号


 方法
 

 参数
 

 意义
 

setNumberColorId

int numberColorId

标题栏文字颜色资源ID例:R.color.sec_verify_demo_number_color

int numberColor

16进制色值,例:0xffffffff

setNumberSizeId

int numberSizeId

脱敏手机号字体大小资源ID例:R.dimen.sec_verify_demo_text_size_s

int numberSize

脱敏手机号上偏移量(单位:sp) 例:16

setNumberOffsetX

int numberOffsetXId

脱敏手机号 左偏移量大小资源ID例:R.dimen.sec_verify_demo_number_offset_x

int numberOffsetX

脱敏手机号 左偏移量(单位:dp) 例:30

setNumberOffsetY

int numberOffsetYId

脱敏手机号 上偏移量大小资源ID例:R.dimen.sec_verify_demo_number_offset_y

int numberOffsetY

脱敏手机号 上偏移量(单位:dp) 例:30

setNumberOffsetBottomY

int numberOffsetBottomYId

脱敏手机号 下偏移量大小资源ID例:R.dimen.sec_verify_demo_number_offset_bottom_y

int numberOffsetBottomY

脱敏手机号 下偏移量(单位:dp) 例:30

setNumberOffsetRightX

int numberOffsetRightXId

脱敏手机号 右偏移量大小资源ID例:R.dimen.sec_verify_demo_number_offset_right_x

int numberOffsetRightX

脱敏手机号 右偏移量(单位:dp) 例:30

setNumberAlignParentRight

boolean numberAlignParentRight

脱敏手机号是否靠屏幕右边

setNumberHidden

boolean numberHidden

脱敏手机号隐藏,默认false

切换账号


 方法
 

 参数
 

 意义
 

setSwitchAccTextSize

int switchAccTextSizeId

切换账号字体大小资源ID例:R.dimen.sec_verify_demo_text_size_s

int switchAccTextSize

切换账号字体大小(单位:sp) 例:16

setSwitchAccColorId

int switchAccColorId

切换账号字体颜色资源ID例:R.color.sec_verify_demo_switch_acc_color

int switchAccColor

切换账号字体颜色16进制色值,例:0xffffffff

setSwitchAccHidden

boolean switchAccHidden

切换账号是否隐藏,默认false

setSwitchAccOffsetX

int switchAccOffsetXId

切换账号 左偏移量大小资源ID 例:R.dimen.sec_verify_demo_swithc_acc_offset_x

int switchAccOffsetX

切换账号 左偏移量(单位:dp) 例:30

setSwitchAccOffsetY

int switchAccOffsetYId

切换账号 上偏移量大小资源ID例:R.dimen.sec_verify_demo_swithc_acc_offset_y

int switchAccOffsetY

切换账号 上偏移量(单位:dp) 例:30

setSwitchAccOffsetBottomY

int switchAccOffsetBottomYId

切换账号 下偏移量大小资源ID例:R.dimen.sec_verify_demo_swithc_acc_offset_bottom_y

int switchAccOffsetBottomY

切换账号 下偏移量(单位:dp) 例:30

setSwitchAccOffsetRightX

int switchAccOffsetRightXId

切换账号 右偏移量大小资源ID例:R.dimen.sec_verify_demo_swithc_acc_offset_right_x

int switchAccOffsetRightX

切换账号 右偏移量(单位:dp) 例:30

setSwitchAccAlignParentRight

boolean switchAccAlignParentRight

切换账号 是否靠屏幕右边,默认false

setSwitchAccText

int switchAccTextId

切换账号 文本内容资源Id 例: R.string.sec_verify_switch_acc_text

String switchAccText

切换账号 文本内容例: 其他方式登录

隐私协议栏


 方法
 

 参数
 

 意义
 

setCheckboxImgId

int checkboxImgId

隐私协议复选框背景图资源ID,建议使用selector 例:R.drawable.sec_verify_demo_checkbox_selector

Drawable checkboxImgId

Drawable对象

setCheckboxDefaultState

boolean checkboxDefaultState

隐私协议复选框默认状态,默认为true

setCheckboxHidden

boolean checkboxHidden

隐私协议复选框是否隐藏,若设置隐藏,则默认状态设置不生效

setAgreementColorId

int agreementColorId

隐私协议字体颜色资源ID例:R.color.sec_verify_demo_agreement_color

int agreementColor

隐私协议字体颜色16进制色值,例:0xffffffff

setCusAgreementNameId1

int cusAgreementNameId1

自定义隐私协议一文字资源ID例:R.string.sec_verify_demo_cus_agreement_1

int cusAgreementName1

自定义隐私协议一文字 例:“隐私协议一”

setCusAgreementColor1

int cusAgreementColorId1

自定义隐私协议一颜色资源ID例:R.color.sec_verify_demo_cus_agreement_color_1

int cusAgreementColor1

自定义隐私协议一颜色16进制色值,例:0xffffffff

setCusAgreementUrl1

String cusAgreementUrl1

自定义隐私协议一URL 例:http://www.mob.com

setCusAgreementNameId2

int cusAgreementNameId2

自定义隐私协议二文字资源ID 例:R.string.sec_verify_demo_cus_agreement_2

int cusAgreementNameId2

自定义隐私协议二文字 例:“隐私协议二”

setCusAgreementColor2

int cusAgreementColorId2

自定义隐私协议二颜色资源ID例:R.color.sec_verify_demo_cus_agreement _color_2

int cusAgreementColor2

自定义隐私协议二颜色16进制色值,例:0xffffffff

setCusAgreementUrl2

String cusAgreementUrl2

自定义隐私协议二URL 例:http://www.mob.com

setCusAgreementNameId3

int cusAgreementNameId3

自定义隐私协议三文字资源ID 例:R.string.sec_verify_demo_cus_agreement_3

int cusAgreementNameId3

自定义隐私协议三文字 例:“隐私协议三”

setCusAgreementColor3

int cusAgreementColorId3

自定义隐私协议三颜色资源ID例:R.color.sec_verify_demo_cus_agreement _color_3

int cusAgreementColor3

自定义隐私协议三颜色16进制色值,例:0xffffffff

setCusAgreementUrl3

String cusAgreementUrl3

自定义隐私协议三URL 例:http://www.mob.com

setAgreementGravityLeft

boolean agreementAlignParentRight

隐私协议文字是否左对齐,默认false

setAgreementBaseTextColorId

int agreementBaseTextColorId

隐私协议其他文字颜色资源ID 例:R.color.sec_verify_demo_agreement_base_text_color

int agreementBaseTextColor

隐私协议其他文字颜色 16进制色值,例:0xffffffff

setAgreementOffsetX

int agreementOffsetXId

隐私协议左偏移量大小资源ID例:R.dimen.sec_verify_demo_agreement_offset_x

int agreementOffsetX

隐私协议左偏移量(单位:dp) 例:30

setAgreementOffsetRightX

int agreementOffsetRightXId

隐私协议右偏移量大小资源ID例:R.dimen.sec_verify_demo_agreement_offset_right_x

int agreementOffsetRightX

隐私协议右偏移量(单位:dp) 例:30

setAgreementOffsetY

int agreementOffsetYId

隐私协议上偏移量大小资源ID例:R.dimen.sec_verify_demo_agreement_offset_y

int agreementOffsetY

隐私协议上偏移量(单位:dp) 例:30

setAgreementOffsetBottomY

int agreementOffsetBottomYId

隐私协议下偏移量大小资源ID 例:R.dimen.sec_verify_demo_agreement_offset_bottom_y

int agreementOffsetBottomY

隐私协议下偏移量(单位:dp) 例:30

setAgreementCmccText

int cmccTextId

设置移动隐私协议显示文本资源ID 例:R.string.sec_verify_demo_cmcc_privacy

String cmccText

移动隐私协议显示文本 例:“《**移动隐私协议》”

setAgreementCuccText

int cuccTextId

设置联通隐私协议显示文本资源ID 例:R.string.sec_verify_demo_cucc_privacy

String cuccText

联通隐私协议显示文本例:“《**联通隐私协议》”

setAgreementCtccText

int ctccTextId

设置电信隐私协议显示文本资源ID 例:R.string.sec_verify_demo_ctcc_privacy

String ctccText

电信隐私协议显示文本例:“《**电信隐私协议》”

setAgreementTextStart

int startTextId

设置隐私协议文本开头资源ID 例:R.string.sec_verify_demo_privacy_start

String startText

隐私协议文本开头 例:“登录即同意”

setAgreementTextAnd1

int andTextId1

设置隐私协议连接文本1资源ID 例:R.string.sec_verify_demo_privacy_and_1

String andText1

隐私协议连接文本1 例:“和”

setAgreementTextAnd2

int andTextId2

设置隐私协议连接文本2资源ID 例:R.string.sec_verify_demo_privacy_and_2

String andText2

隐私协议连接文本2 例:“及”

setAgreementTextAnd3

int andTextId3

设置隐私协议连接文本3资源ID 例:R.string.sec_verify_demo_privacy_and_3

String andText3

隐私协议连接文本3 例:“及”

setAgreementTextEnd

int endTextId

设置隐私协议结束文本资源ID 例:R.string.sec_verify_demo_privacy_end

String endText

隐私协议结束文本 例:“并使用本手机号登录”

setAgreementTextSize

int agreementTextSizeId

设置隐私协议文字大小资源ID 例:R.dimen.sec_verify_demo_text_size_s

int agreementTextSize

隐私协议文字大小 (单位:sp) 例:16

setAgreementAlignParentRight

boolean agreementAlignParentRight

设置隐私协议是否靠屏幕右边,默认false

setAgreementHidden

boolean agreementAlignParentRight

设置隐私协议隐藏,默认false

setAgreementText

SpannableString agreementText

设置自定义的完整的隐私协议内容

setAgreementUncheckHintText

int agreementUncheckHintTextId

设置隐私协议复选框未选中时提示的文本小资源ID 例:R.dimen.sec_verify_demo_agreement_hint_text

String agreementUncheckHintText

设置隐私协议复选框未选中时提示的文本 例: "请阅读并勾选隐私协议"

setAgreementUncheckHintType

int agreementUncheckHintType

设置隐私协议复选框未选中时提示类型

Slogan


 方法
 

 参数
 

 意义
 

setSloganTextSize

int sloganTextSizeId

Slogan文字大小资源ID 例:R.dimen.sec_verify_demo_text_size_s

int sloganTextSize

Slogan文字大小(单位:sp) 例:16

setSloganTextColor

int sloganTextColorId

Slogan文字颜色资源ID例:R.color.sec_verify_demo_slogan_color

int sloganTextColor

Slogan文字颜色 16进制色值,例:0xffffffff

setSloganOffsetX

int sloganOffsetXId

Slogan左偏移量大小资源ID例:R.dimen.sec_verify_demo_slogan_offset_x

int sloganOffsetX

Slogan左偏移量(单位:dp) 例:30

setSloganOffsetY

int sloganOffsetYId

Slogan上偏移量大小资源ID例:R.dimen.sec_verify_demo_slogan_offset_y

int sloganOffsetY

Slogan上偏移量(单位:dp) 例:30

setSloganOffsetBottomY

int sloganOffsetBottomYId

Slogan下偏移量大小资源ID,设置此属性时,上偏移量大小不生效 例:R.dimen.sec_verify_demo_slogan_offset_bottom_y

int sloganOffsetBottomY

Slogan下偏移量(单位:dp) 例:30

setSloganOffsetRightX

int sloganOffsetRightXId

Slogan右偏移量大小资源ID例:R.dimen.sec_verify_demo_slogan_offset_right_x

int sloganOffsetRightX

Slogan右偏移量 (单位:dp) 例:30

setSloganAlignParentRight

boolean sloganAlignParentRight

Slogan是否靠屏幕右边,默认false

setSloganHidden

boolean sloganHidden

Slogan隐藏,默认false

登录按钮


 方法
 

 参数
 

 意义
 

setLoginBtnImgId

int loginBtnImgId

登录按钮背景图资源ID,建议使用shape例: R.drawable.sec_verify_demo_login_btn_shape

Drawable loginBtnImg

Drawable 对象

setLoginBtnTextId

int loginBtnTextId

登录按钮文字资源ID 例:R.string.sec_verify_demo_login_btn_

String loginBtnText

登录按钮文字 例:“一键登录”

setLoginBtnTextColorId

int loginBtnTextColorId

登录按钮字体颜色资源ID 例:R.color.sec_verify_demo_login_btn_color

int loginBtnTextColor

登录按钮字体颜色 16进制色值,例:0xffffffff

setLoginBtnTextSize

int loginBtnTextSizeId

登录按钮文字大小资源ID例:R.dimen.sec_verify_demo_text_size_s

int loginBtnTextSize

登录按钮文字大小(单位:sp) 例:16

setLoginBtnWidth

int loginBtnWidthId

登录按钮宽度大小资源ID例:R.dimen.sec_verify_demo_login_btn_width

int loginBtnWidth

登录按钮宽度大小(单位:dp) 例:30

setLoginBtnHeight

int loginBtnHeightId

登录按钮高度大小资源ID例:R.dimen.sec_verify_demo_login_btn_height

int loginBtnHeight

登录按钮高度大小(单位:dp) 例:30

setLoginBtnOffsetX

int loginBtnOffsetXId

登录按钮左偏移量大小资源ID例:R.dimen.sec_verify_demo_login_btn_offset_x

int loginBtnOffsetX

登录按钮左偏移量(单位:dp) 例:30

setLoginBtnOffsetY

int loginBtnOffsetYId

登录按钮上偏移量大小资源ID例:R.dimen.sec_verify_demo_login_btn_offset_y

int loginBtnOffsetY

登录按钮上偏移量(单位:dp) 例:30

setLoginBtnOffsetBottomY

int loginBtnOffsetBottomYId

登录按钮下偏移量大小资源ID例:R.dimen.sec_verify_demo_login_btn_offset_bottom_y

int loginBtnOffsetBottomY

登录按钮下偏移量(单位:dp) 例:30

setLoginBtnOffsetRightX

int loginBtnOffsetRightXId

登录按钮右偏移量大小资源ID例:R.dimen.sec_verify_demo_login_btn_offset_right_x

int loginBtnOffsetRightX

登录按钮右偏移量(单位:dp) 例:30

setLoginBtnAlignParentRight

boolean loginBtnAlignParentRight

登录按钮是否靠屏幕右边,默认false

setLoginBtnHidden

Boolean loginBtnHidden

登录按钮是否隐藏,默认false

动画

方法 意义
setTranslateAnim(boolean translateAnim) 设置授权页面从左往右平移动画
setRightTranslateAnim(boolean rightAnim) 设置进入授权页面从从右往左平移动画
setBottomTranslateAnim(boolean bottomAnim) 设置进入授权页面从下往上平移,退出方向相反
setZoomAnim(boolean zoomAnim) 设置授权页面从大到小动画
setFadeAnim(boolean fadeAnim) 设置授权页面从透明到不透明动画
setStartActivityTransitionAnim(int startInAnim,int startOutAnim) 设置授权页面进入动画ID
setFinishActivityTransitionAnim(int finishInAnim,int finishOutAnim) 设置授权页面结束动画ID

弹窗模式


 方法
 

 参数
 

 意义
 

setDialogTheme

boolean dialogTheme

设置是否使用弹窗模式,默认false

setDialogAlignBottom

boolean dialogAlignBottom

设置弹窗是否靠屏幕底部,默认false

setDialogOffsetX

int dialogOffsetXId

设置弹窗左右偏移量资源ID例:R.dimen.sec_verify_demo_dialog_offset_x

int dialogOffsetX

弹窗左右偏移量(单位:dp) 例:60

setDialogOffsetY

int dialogOffsetYId

设置弹窗上下偏移量资源ID例:R.dimen.sec_verify_demo_dialog_offset_y

int dialogOffsetY

弹窗上下偏移量(单位:dp) 例:80

setDialogWidth

int dialogWidthId

设置弹窗宽度资源ID例:R.dimen.sec_verify_demo_dialog_width

int dialogWidth

弹窗宽度(单位:dp) 例:100

setDialogHeight

int dialogHeightId

设置弹窗高度资源ID例:R.dimen.sec_verify_demo_dialog_height

int dialogHeight

弹窗高度(单位:dp) 例:200

setDialogMaskBackground

int dialogBackground

设置弹窗蒙版背景 例: R.drawable.sec_verify_demo_dialog_background

Drawable dialogBackground

Drawable对象

setDialogMaskBackgroundClickClose

boolean dialogBackgroundClickClose

设置点击弹窗蒙版是否关闭页面,默认false

示例代码(可参考Demo的MainActivity):

     
	/**
     * 自定义授权页面UI样式
     */
    private void customizeUi() {
       UiSettings uiSettings = new UiSettings.Builder()
            /** 标题栏 */
            // 标题栏背景色资源ID
            .setNavColorId(R.color.sec_verify_demo_text_color_blue)
            //标题栏是否透明
            .setNavTransparent(false)
            //标题栏是否隐藏
            .setNavHidden(false)
            //设置背景图片
            .setBackgroundImgId(R.drawable.sec_verify_background_demo)
            //设置背景是否点击关闭页面
            .setBackgroundClickClose(true)
            // 标题栏标题文字资源ID
            .setNavTextId(R.string.sec_verify_demo_verify)
            // 标题栏文字颜色资源ID
            .setNavTextColorId(R.color.sec_verify_demo_text_color_common_black)
            // 标题栏左侧关闭按钮图片资源ID
            .setNavCloseImgId(R.drawable.sec_verify_demo_close)
            //标题栏返回按钮是否隐藏
            .setNavCloseImgHidden(false)
            /** Logo */
            // Logo图片资源ID,默认使用应用图标
            .setLogoImgId(R.drawable.ic_launcher)
            //logo是否隐藏
            .setLogoHidden(false)
            //logo宽度
            .setLogoWidth(R.dimen.sec_verify_demo_logo_width_customize)
            //logo高度
            .setLogoHeight(R.dimen.sec_verify_demo_logo_height_customize)
            //logo x轴偏移量
            .setLogoOffsetX(R.dimen.sec_verify_demo_logo_offset_x_customize)
            //logo y轴偏移量
            .setLogoOffsetY(R.dimen.sec_verify_demo_logo_offset_y_customize)
            //logo x轴右偏移量
			.setLogoOffsetRightX(R.dimen.sec_verify_demo_logo_offset_right_x_customize)
			//logo 是否靠屏幕右边
			.setLogoAlignParentRight(false)
            /** 手机号 */
            // 脱敏手机号字体颜色资源ID
            .setNumberColorId(R.color.sec_verify_demo_text_color_common_black)
            // 脱敏手机号字体大小资源ID
            .setNumberSizeId(R.dimen.sec_verify_demo_text_size_m)
            //脱敏手机号 x轴偏移量
            .setNumberOffsetX(R.dimen.sec_verify_demo_number_field_offset_x_customize)
            //脱敏手机号 y轴偏移量
            .setNumberOffsetY(R.dimen.sec_verify_demo_number_field_offset_y_customize)
            //脱敏手机号 x轴右偏移量
			.setNumberOffsetRightX(R.dimen.sec_verify_demo_number_field_offset_right_x_customize)
			//脱敏手机号 是否靠屏幕右边
			.setNumberAlignParentRight(true)
		            /** 切换帐号 */
            // 切换账号字体颜色资源ID
            .setSwitchAccColorId(R.color.sec_verify_demo_text_color_blue)
            //切换账号 字体大小
            .setSwitchAccTextSize(R.dimen.sec_verify_demo_text_size_s)
            // 切换账号是否显示,默认显示
            .setSwitchAccHidden(false)
            //切换账号 x轴偏移量
            .setSwitchAccOffsetX(R.dimen.sec_verify_demo_switch_acc_offset_x_customize)
            //切换账号 y轴偏移量
            .setSwitchAccOffsetY(R.dimen.sec_verify_demo_switch_acc_offset_y_customize)
	        //脱敏手机号 x轴右偏移量
			.setSwitchAccOffsetRightX(R.dimen.sec_verify_demo_switch_acc_offset_right_x_customize)
			//脱敏手机号 是否靠屏幕右边
			.setSwitchAccAlignParentRight(true)
            /** 登录按钮 */
            // 登录按钮背景图资源ID,建议使用shape
            .setLoginBtnImgId(R.drawable.sec_verify_demo_shape_rectangle)
            // 登录按钮文字资源ID
            .setLoginBtnTextId(R.string.sec_verify_demo_login)
            // 登录按钮字体颜色资源ID
            .setLoginBtnTextColorId(R.color.sec_verify_demo_text_color_common_white)
            //登录按钮字体大小
            .setLoginBtnTextSize(R.dimen.sec_verify_demo_text_size_s)
            //登录按钮 width
            .setLoginBtnWidth(R.dimen.sec_verify_demo_login_btn_width_customize)
            //登录按钮 height
            .setLoginBtnHeight(R.dimen.sec_verify_demo_login_btn_height_customize)
            //登录按钮 x轴偏移
            .setLoginBtnOffsetX(R.dimen.sec_verify_demo_login_btn_offset_x_customize)
            //登录按钮 y轴偏移
            .setLoginBtnOffsetY(R.dimen.sec_verify_demo_login_btn_offset_y_customize)
            //登录按钮 x轴右偏移
			.setLoginBtnOffsetRightX(R.dimen.sec_verify_demo_login_btn_offset_right_x_customize)
			//登录按钮 靠屏幕右边
			.setLoginBtnAlignParentRight(true)
            /** 隐私协议 */
            //是否隐藏复选框(设置此属性true时setCheckboxDefaultState不会生效)
            .setCheckboxHidden(false)
            // 隐私协议复选框背景图资源ID,建议使用selector
            .setCheckboxImgId(R.drawable.sec_verify_demo_customized_checkbox_selector)
            // 隐私协议复选框默认状态,默认为“选中”
            .setCheckboxDefaultState(true)
            // 隐私协议字体颜色资源ID(自定义隐私协议的字体颜色也受该值影响)
            .setAgreementColorId(R.color.sec_verify_demo_main_color)
            // 自定义隐私协议一文字资源ID
            .setCusAgreementNameId1(R.string.sec_verify_demo_customize_agreement_name_1)
            // 自定义隐私协议一URL
            .setCusAgreementUrl1(http://www.baidu.com)
            //自定义隐私协议一颜色
            .setCusAgreementColor1(R.color.sec_verify_demo_main_color)
            // 自定义隐私协议二文字资源ID
            .setCusAgreementNameId2(R.string.sec_verify_demo_customize_agreement_name_2)
            // 自定义隐私协议二URL
            .setCusAgreementUrl2(https://www.jianshu.com)
            //自定义隐私协议二颜色
            .setCusAgreementColor2(R.color.sec_verify_demo_main_color)
            //隐私协议是否左对齐,默认居中
            .setAgreementGravityLeft(true)
            //隐私协议其他文字颜色
            .setAgreementBaseTextColorId(R.color.sec_verify_demo_text_color_common_black)
            //隐私协议 x轴偏移量,默认30
            .setAgreementOffsetX(R.dimen.sec_verify_demo_agreement_offset_x_customize)
            //隐私协议 x轴rightMargin右偏移量,默认30
          .setAgreementOffsetRightX(R.dimen.sec_verify_demo_agreement_offset_x_customize)
            //隐私协议 y轴偏移量
            .setAgreementOffsetY(R.dimen.sec_verify_demo_agreement_offset_y_customize)
            //隐私协议 底部y轴偏移量                            
  			.setAgreementOffsetBottomY(R.dimen.sec_verify_demo_agreement_offset_bottom_y_customize)
            /** slogan */
            //slogan文字大小
            .setSloganTextSize(R.dimen.sec_verify_demo_text_size_s)
            //slogan文字颜色
            .setSloganTextColor(R.color.sec_verify_demo_main_color)
            //slogan x轴偏移量
            .setSloganOffsetX(R.dimen.sec_verify_demo_slogan_offset_x_customize)
            //slogan y轴偏移量
            .setSloganOffsetY(R.dimen.sec_verify_demo_slogan_offset_y_customize)
            //slogan 底部y轴偏移量(设置此属性时,setSloganOffsetY不生效)
            .setSloganOffsetBottomY(R.dimen.sec_verify_demo_slogan_offset_botto    m_y_customize)
             //设置状态栏为透明状态栏,5.0以上生效
			.setImmersiveTheme(false)
			//设置状态栏文字颜色为黑色,只在6.0以上生效
			.setImmersiveStatusTextColorBlack(false)
			//使用平移动画
			.setTranslateAnim(true)
			//设置隐私协议文字起始
			.setAgreementTextStart(R.string.sec_verify_demo_agreement_ext_start)
			//设置隐私协议文字连接
			.setAgreementTextAnd1(R.string.sec_verify_demo_agreement_txt_and1)
			//设置隐私协议文字连接
			.setAgreementTextAnd2(R.string.sec_verify_demo_agreement_txt_and2)
			//设置隐私协议文字结束
			.setAgreementTextEnd(R.string.sec_verify_demo_agreement_tet_end)
			//设置移动隐私协议文字
			.setAgreementCmccText(R.string.sec_verify_demo_agreement_txt_cmcc)
			//设置联通隐私协议文字
			.setAgreementCuccText(R.string.sec_verify_demo_agreement_txt_cucc)
			//设置电信隐私协议文字
			.setAgreementCtccText(R.string.sec_verify_demo_agreement_txt_ctcc)
			
            .build();
      SecVerify.setUiSettings(uiSettings);
    }

添加自定义控件

SecVerify支持在授权页添加开发者自定义的控件,关于该功能,请注意以下说明:

  • 该功能主要用于在授权页添加其他第三方登录方式(其他登录方式也可以通过页面的“切换账号”实现,区别仅在于其他登录方式是否显示在授权页)
  • 不建议添加过多自定义控件

1 标题栏下方位置添加自定义控件

接口:CustomUIRegister.addCustomizedUi(List viewList, CustomViewClickListener listener)

接口 参数列表 必须 说明
addCustomizedUi List viewList, viewList: 自定义view列表
addCustomizedUi CustomViewClickListener listener listener:自定义view事件监听器

2 标题栏上添加自定义控件

接口:CustomUIRegister.addTitleBarCustomizedUi(List viewList, CustomViewClickListener listener) 件

接口 参数列表 必须 说明
addTitleBarCustomizedUi List viewList viewList: 自定义view列表
addTitleBarCustomizedUi CustomViewClickListener listener listener:自定义view事件监听器

3 用于设置自定义的LoadingView

接口:CustomUIRegister.setCustomizeLoadingView(View loadingView)

接口 参数列表 必须 说明
setCustomizeLoadingView View loadingView loadingView: 自定义LoadingView
TextView view = new TextView(context);
view.setId(R.id.customized_view_id);
view.setText("其他方式登录");
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params.bottomMargin = ResHelper.dipToPx(context,120);
view.setLayoutParams(params);

ImageView iv1 = new ImageView(context);
iv1.setId(R.id.customized_btn_id_1);
iv1.setImageDrawable(context.getResources().getDrawable(R.drawable.sec_verify_demo_wechat));
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params1.addRule(RelativeLayout.CENTER_HORIZONTAL);
params1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params1.bottomMargin = ResHelper.dipToPx(context,80);
iv1.setLayoutParams(params1);

List<View> views = new ArrayList<View>();
views.add(view);
views.add(iv1);
   CustomUIRegister.addCustomizedUi(views, new CustomViewClickListener() {
            @Override
            public void onClick(View view) {
                int id = view.getId();
                String msg = ;
                if (id == R.id.customized_btn_id_1) {
                    msg = 按钮1 clicked;
                    // 自定义控件点击时,SecVerify默认不关闭授权页面,若需关闭,可调用该方法
                    SecVerify.finishOAuthPage();
                } else if (id == R.id.customized_btn_id_2) {
                    msg = 按钮2 clicked;
                }
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

注意:
  • 以上方法需在 登录 接口之前调用
  • 自定义控件将被添加到一个相对布局中,因此控件的位置与大小,需使用RelativeLayout.LayoutParams进行设置
  • 自定义控件仅支持View,不支持ViewGroup,请勿将多个自定义View放在一个ViewGroup(LinearLayout、RelativeLayout等)中传入,否则可能无法监听到每个子View的点击事件
  • 自定义控件点击时,SecVerify默认不关闭授权页面,若需关闭,可通过SecVerify.finishOAuthPage()方法实现

五 混淆设置

SecVerify已经做了混淆处理,再次混淆会导致不可预期的错误,请在您的混淆脚本中添加如下的配置,跳过对SecVerify的混淆操作:

-ignorewarnings
# for SecVerify
-keep class com.mob.**{*;}
# for CTCC
-keep class cn.com.chinatelecom.account.**{*;}
# for CUCC
-keep class com.sdk.**{*;}
# for CMCC
-keep class com.cmic.sso.sdk.**{*;}

六 注意事项

1、 使用gradle集成时,默认为SecVerify提供最新版本的集成,如果您想锁定某个版本,可以在SecVerify下设置“version "某个版本"”来固定使用这个版本

MobSDK {
    appKey "申请Mob的appkey"
    appSecret "申请Mob的AppSecret"
    SecVerify {
        version '2.0.8'
    }
}

2、 如果使用插件的模块会被其它模块依赖,请确保依赖它的模块也引入插件,或在此模块的gradle中添加:

apply plugin: 'com.mob.sdk'

3、如果只需要某个运营商的功能,可以通过如下配置关闭其他运营商的功能

 MobSDK {
   appKey "申请Mob的appkey"
   appSecret "申请Mob的AppSecret"
   SecVerify {
       version '2.0.8'
        disable {
           CMCC {}
           CUCC {}
           CTCC {}
       }
   }
}

4、由于系统本身限制,OPPO系统首次进入且连接WIFI的时候无法获取到使用移动网络的权限,需要手动关闭WIFI或者进入设置中 “双卡与移动网络” 里的 “使用WLAN与移动网络的应用” 中设置当前APP允许使用移动网络

七、错误码

服务器错误码列表

错误码 说明
5119104 解密失败
5119105 服务错误
4119301 数据校验失败
4119302 数据不存在
4119303 数据已经存在
5119303 数据已经存在
4119310 token未找到(客户端错误)
5119310 token未找到(服务端错误)
4119311 token非法
4119330 App没有初始化
4119331 AppSecret错误
4119520 md5不匹配
4119521 包名没有配置

客户端错误码列表

错误码 说明
6119000 不支持的运营商
6119001 手机号不合法
6119002 无sim卡
6119003 缺少必要的权限
6119004 未打开蜂窝网络
6119005 未接受Mob隐私协议
6119401 获取运营商配置信息失败
6119402 登录失败
6119403 运营商预取号失败
6119404 运营商登录失败
6119405 用户取消授权
6119406 获取服务器token失败
6119095 缺少必要的参数
6119096 参数不合法
6119097 服务器返回数据异常
6119098 网络异常
6119099 未知错误

移动错误码

错误码 说明
103000 成功
102507 登录超时(授权页点登录按钮时)
103101 请求签名错误
103102 包签名/Bundle ID错误
103108 短信验证码错误
103109 短信验证码校验超时
103111 网关IP错误
103119 appid不存在
103211 其他错误,(如有需要请联系qq群609994083内的移动认证开发)
103901 短验下发次数已达上限(5次/min,30次/day)
103902 scrip失效
103911 token请求过于频繁,10分钟内获取token且未使用的数量不超过30个
103273 预取号联通重定向(暂不支持联通取号)
105002 移动取号失败
105003 电信取号失败
105021 已达当天取号限额
105302 appid不在白名单
105313 非法请求
200005 用户未授权(READ_PHONE_STATE)
200020 用户取消登录
200021 数据解析异常
200022 无网络
200023 请求超时
200024 数据网络切换失败
200025 未知错误一般出现在线程捕获异常,请配合异常打印分析
200026 输入参数错误
200027 未开启数据网络
200028 网络请求出错
200038 异网取号网络请求失败
200039 异网取号网关取号失败
200040 UI资源加载异常
200048 用户未安装sim卡
200050 EOF异常
200060 切换账号(未使用SDK短验时返回)
200072 CA根证书校验失败
200080 本机号码校验仅支持移动手机号
200082 服务器繁忙

联通错误码

错误码 说明 示例说明
101001 授权码不能为空使用SDK 调用置换接口时没有填入授权码
101002 认证的手机号不能为空使用SDK 认证置换时没有填入需要认证的手机号码
101003 UiConfig 不能为空 调用openActivity 接口时,必须配置UiConfig
101004 ApiKey 或PublicKey不能为空 未进行初始化,调用SDKManager.init()进行初始化
101005 超时 超过了接入方设置的时间
101006 公钥出错 公钥错误,请核对配置的公钥是否与申请的公钥一致
101007 用户取消登录 免密登录时,进入授权页执行了返回操作
102001 选择流量通道失败 取号功能必须使用流量访问,在wifi和流量同时开启的情况下,sdk 会选择使用流量进行访问,此返回码代表切换失败!(受不同机型的影响)
201001 "操作频繁请请稍后再试" 超出10 分钟之内只能访问30 次的限制
302001 SDK 解密异常 服务端返回数据时sdk会进行解密操作,如果解密出错则出现此错误
302002 网络访问异常sdk 网络请求异常
302003 服务端数据格式出错 服务端返回数据格式错误

电信错误码

错误码 说明
0 处理结果正常
-2 appid为空
-6 appid-invalid
-32 AccessToken 存在问题
-61 AccessToken 不存在
-64 没有权限
-65 请求频率过高
-66 Token没有权限
-103 AccessToken 无效
-7999 服务不可用(其他错误,默认返回值)——电信版
-8000 网络错误(http非200状态码)——电信版
-8001 请求网络异常
-8002 请求参数异常
-8003 请求超时
-8004 移动网络未开启
-8005 请先初始化SDK
-8100 蜂窝数据网络未开启
-8101 获取失败(切换失败)
-8102 获取失败
-8103 域名解析异常
-8104 I0异常
-8200 关闭登录界面
-8201 响应码错误
-8202 登录结果异常
-8203 用户点击其他登录方式
-9999 其他异常
-10000 获取用户信息失败
-10001 调用失败
-10002 参数错误
-10003 解密失败
-10004 无效的IP
-10005 异网授权回调参数异常
-10006 Mdn授权失败,且属于电信网络
-10007 重定向到异网取号
-10008 超过预设取号阀值
-10009 时间超期
-10010 mobile-error
-10011 运营商不匹配
-10012 区域不匹配
-10013 业务类型不支持该运营商
-10014 AES解密失败
-10015 Ipv6取号失败
-10016 安全校验失败
-10017 redirect方式需要https的callback地址
-20005 签名非法
-20006 应用不存在
-20007 公钥数据不存在
-20100 内部解析错误
-20102 加密参数解析失败
-30001 时间戳非法
-30003 topClass失效
-99999 服务内部错误
-720001 切换异常
-720002 切换异常超时
404 API配置不存在
10000 处理结果正常
20101 参数错误
20102 参数转换异常
20103 参数为空
20104 权限处理异常
20105 返回结果转换Json 异常
20107 Token权限处理异常
20108 获取用户信息失败
20109 限流处理异常
20110 获取TOKEM异常
20123 底层返回302/301
30002 无法识别用户网络,返回两个重定向异网取号地址
30100 clientID为空
30101 时间戳为空
30102 时间戳无效
30103 accessCode为空
30201 ParamKey参数解密错误
30900 登录失败
30901 Code换Tokenfail
30902 移动回调失败
30903 电信回调失败
30904 联通回调失败
30909 内部错误
30910 topClass异常
48001 请求网络异常
48003 请求超时
49000 接口请求成功,认证失败
49001 返回结果格式异常
51001 参数不能为空
51002 接入不合法
51003 能力集不合法
51004 Appid和accesstoken不匹配
51005 没有AccessToken记录
51114 无法获取手机号数据
51207 获取accessCode使用的appid与本次操作的appid不一致
51208 "无效的accessCode,该accessCode无法在该业务中使用"
80000 请求超时
80001 请求网络异常
80002 响应码错误
80003 无网络连接
80004 移动网络未开启
80005 Socket超时异常
80006 域名解析异常
80007 I0异常
80008 No route to host
80009 nodename nor servname provided,or not known
80010 Socket closed by remote peer
80100 登录结果为空
80101 登录结果异常
80102 预登录异常
80103 SDK未初始化
80104 未调用预登录接口
80105 加载nib文件异常
80200 用户关闭界面
80201 其他登录方式
80800 WIFI切换异常
80801 WIFI切换超时