本文为您介绍Android客户端一键登录的集成方法及接口的功能示例。
在使用过程中如有疑问,可以提交工单联系阿里云技术工程师处理。
接入步骤
下载SDK
登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。
创建认证方案
您导入项目或调用API接口时,会用到方案Code等参数信息,请先在号码认证产品控制台,创建认证方案,获取方案Code等参数信息。
导入项目
设置minSdkVersion和compileSdkVersion版本。
minSdkVersion:号码认证SDK最低依赖版本为21,创建新项目时minSdkVersion不能低于21。
compileSdkVersion:号码认证SDK最低依赖版本为30,创建新项目时compileSdkVersion不能低于30。
导入aar产物并添加依赖。
在使用号码认证功能的module中引入相关SDK,将3个aar全部导入
module libs
文件夹。authsdk是号码认证主aar,实现一键登录及本机号码校验功能;
logger组件是authsdk使用的日志组件必须引入依赖;
main组件是authsdk使用的基础功能组件必须引入依赖;
在module下build.gradle文件中找到
dependencies
,添加如下引用:implementation fileTree(dir: 'libs', include: ['*.aar']) implementation 'androidx.appcompat:appcompat:1.3.1'
创建签名文件。
参考studio创建签名文件创建签名文件,此签名文件在创建方案号时使用,签名文件放置在module下,文件名及文件路径无设置要求。
以Demo为例,将签名文件放置在
app/sig-adaptation/debug/
文件夹下,则需在module的build.gradle
文件中指向该签名。查看签名。
使用Studio右侧面板,选择Gradle > 项目名称 > 签名文件module > Tasks > android > signingReport,查看签名。
说明包签名获取方式如下:
方式一:上图的下方输出的MD5值移除冒号,将大写字母转换为小写字母即可生成包签名。
方式二:请通过手机终端下载并安装Android App签名获取工具,获取Android App的包签名信息。
添加配置
添加权限:在AndroidMainfest.xml清单文件中添加权限。
必要权限(aar中已申请,用户无需单独配置)
<uses-permission android:name="android.permission.INTERNET" /> <!-- 网络访问 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 检查wifi网络状态 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 检查网络状态 --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 允许修改网络状态 -->
非必要权限(不配置此权限,不影响使用一键登录功能)
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--允许访问电话状态-->
添加Activity声明。
在AndroidMainfest.xml清单文件中添加Activity声明。
<!--重点关注!!!!!!!--> <!--如果不需要使用窗口模式,建议不要使用authsdk_activity_dialog主题,会出现异常动画--> <!--如果需要使用authsdk_activity_dialog主题,则screenOrientation一定不能指定明确的方向, 比如portrait、sensorPortrait,在8.0的系统上不允许窗口模式指定orientation,会发生crash,需要指定为behind, 然后在授权页的前一个页面指定具体的orientation--> <activity android:name="com.mobile.auth.gatewayauth.LoginAuthActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:exported="false" android:launchMode="singleTop" android:screenOrientation="behind" android:theme="@style/authsdk_activity_dialog" /> //仅在弹窗模式下配置,全屏模式无需配置 //如使用自定义协议页跳转协议(即setProtocolAction)则不需注册该界面 <activity android:name="com.mobile.auth.gatewayauth.activity.AuthWebVeiwActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:exported="false" android:launchMode="singleTop" android:screenOrientation="behind" /> //如果需要使用二次弹窗功能则添加该注册 <activity android:configChanges="orientation|keyboardHidden|screenSize" android:exported="false" android:launchMode="singleTop" android:name="com.mobile.auth.gatewayauth.PrivacyDialogActivity" android:screenOrientation="behind" android:theme="@style/authsdk_activity_dialog"/>
交互流程详解
完整的功能交互流程请参见一键登录交互流程。
SDK方法说明
获取认证实例
/**
* 获取该类的单例实例对象
* @param context Android上下文建议使用applicationcontext
* @param tokenListener 需要实现的获取Token回调
* @return 单例实例对象
*/
public static PhoneNumberAuthHelper getInstance(Context context, TokenResultListener tokenResultListener)
使用示例
TokenResultListener mTokenResultListener = new TokenResultListener() {
@Override
public void onTokenSuccess(String s) {
//此处可进行token获取成功及授权页唤起成功的业务处理
}
@Override
public void onTokenFailed(String s) {
//此处可进行token获取失败及退出授权页的业务处理
}
};
PhoneNumberAuthHelper mPhoneNumberAuthHelper = PhoneNumberAuthHelper.getInstance(this, mTokenResultListener);
必调方法:设置SDK密钥(setAuthSDKInfo)
/**
* 初始化SDK调用参数,App生命周期内调用一次
* @param 在号码认证控制台的号码认证方案管理页,在对应的方案名称操作列单击密钥后,再单击复制密钥即可获取。
*/
public void setAuthSDKInfo(String secretInfo)
使用示例
mPhoneNumberAuthHelper.setAuthSDKInfo(secretInfo);
必调方法:设置获取Token回调
在一键登录前调用,用于监控一键登录结果。
/**
* 设置获取Token回调,修改getInstance传入的回调实现
* 接口回调其他事件:600001(授权页唤起成功)、600002(授权页唤起失败)、600000(成功获取Token)、600011(获取Token失败)、
* 600015(获取Token超时)、600013(运营商维护升级,该功能不可用)、600014(运营商维护升级,该功能已达最大调用次数).....
* @param tokenListener 回调实现
*/
public void setAuthListener(TokenResultListener tokenListener)
使用示例
mTokenResultListener = new TokenResultListener() {
@Override
public void onTokenSuccess(String s) {
//此处可进行token获取成功及授权页唤起成功的业务处理
}
@Override
public void onTokenFailed(String s) {
//此处可进行token获取失败及退出授权页的业务处理
}
};
mPhoneNumberAuthHelper.setAuthListener(mTokenResultListener);
必调方法:修改授权页主题
该接口需在getLoginToken接口之前调用,具体页面属性请参考UI接口设置。
/**
* 修改授权页面主题,开发者可以通过 此方法修改授权页面主题,需在 getLoginToken接口之前调用
*
* @param authUIConfig 登录授权页UI自定义配置
*/
@AuthNumber
public void setAuthUIConfig(AuthUIConfig authUIConfig)
使用示例
mAuthHelper.setAuthUIConfig(new AuthUIConfig.Builder()
.setAppPrivacyOne("《自定义隐私协议》", "https://www.baidu.com")
.setAppPrivacyTwo("《自定义隐私协议》2","https://baijiahao.baidu.com/s?id=1693920988135022454&wfr=spider&for=pc")
.setAppPrivacyThree("《自定义隐私协议》3","http://www.npc.gov.cn/zgrdw/npc/cwhhy/13jcwh/node_35014.htm")
.setAppPrivacyColor(Color.GRAY, Color.parseColor("#002E00"))
.setPrivacyConectTexts(new String[]{",","","和"})
.setPrivacyOperatorIndex(2)
.setPrivacyState(false)
//.setCheckboxHidden(true)
.setNavHidden(true)
.setSwitchAccHidden(true)
.setNavReturnHidden(true)
.setDialogBottom(false)
//自定义协议页跳转协议,需要在清单文件配置自定义intent-filter,不需要自定义协议页,则请不要配置ProtocolAction
.setProtocolAction("com.aliqin.mytel.protocolWeb")
.setPackageName(mPackageName)
.setNavColor(Color.TRANSPARENT)
.setWebNavColor(Color.BLUE)
.setLogoOffsetY(0)
.setLogoWidth(42)
.setLogoHeight(42)
.setLogoImgPath("mytel_app_launcher")
.setNumFieldOffsetY(unit + 10)
//设置字体大小,以Dp为单位,不同于Sp,不会随着系统字体变化而变化
.setNumberSizeDp(17)
.setLogBtnWidth(dialogWidth - 30)
.setLogBtnMarginLeftAndRight(15)
.setLogBtnHeight(logBtnHeight)
.setLogBtnTextSizeDp(16)
.setLogBtnBackgroundPath("login_btn_bg")
.setLogBtnOffsetY(unit * 4)
.setSloganText("为了您的账号安全,请先绑定手机号")
.setSloganOffsetY(unit * 3)
.setSloganTextSizeDp(11)
.setPageBackgroundPath("dialog_page_background")
.setAuthPageActIn("in_activity", "out_activity")
.setAuthPageActOut("in_activity", "out_activity")
.setVendorPrivacyPrefix("《")
.setVendorPrivacySuffix("》")
.setDialogWidth(dialogWidth)
.setDialogHeight(dialogHeight)
.setScreenOrientation(authPageOrientation)
.create());
必调方法:一键登录获取Token(getLoginToken)
/**
* 获取登录Token 调起一键登录授权页面,在用户授权后获取一键登录的Token
* @param context 上下文,建议使用activity(设置拉起动画时必须使用activity才会生效)
* @param totalTimeout 超时时间 单位ms
*/
public void getLoginToken(final Context context, final int totalTimeout)
使用示例
mPhoneNumberAuthHelper.getLoginToken(this, timeout);
必调方法:注销登录页面(quitLoginPage)
/**
* 退出授权认证页
*/
public void quitLoginPage()
使用示例
mPhoneNumberAuthHelper.quitLoginPage();
选调方法:授权页控件点击事件监控
/**
* 设置UI控件点击事件回调
*
* @param uiClickListener 回调实现
*/
public void setUIClickListener(AuthUIControlClickListener uiClickListener)
使用示例
mAuthHelper.setUIClickListener(new AuthUIControlClickListener() {
@Override
public void onClick(String code, Context context, String jsonString) {
//此处进行授权页各控件点击事件监控,根据不同code区分控件
}
});
选调方法:加速拉起授权页(accelerateLoginPage)
/**
* 加速授权页唤起
*
* @param overdueTimeMills 接口超时时间,单位:ms
* @param listener 预取号回调
*/
public void accelerateLoginPage(final int overdueTimeMills, final PreLoginResultListener listener)
使用示例
mPhoneNumberAuthHelper.accelerateLoginPage(timeout, new PreLoginResultListener() {
@Override
public void onTokenSuccess(String s) {
//加速成功业务逻辑处理
}
@Override
public void onTokenFailed(String s, String s1) {
//加速失败业务逻辑处理
}
});
其他接口说明
选调方法:获取版本号
/**
* 返回SDK版本号
*
* @return versionCode SDK版本号
*/
public static String getVersion()
使用示例
String version = PhoneNumberAuthHelper.getVersion();
选调方法:环境检查
/**
* SDK环境检查函数,检查终端是否支持号码认证,带返回code的
*
* @see PhoneNumberAuthHelper#SERVICE_TYPE_AUTH
* @see PhoneNumberAuthHelper#SERVICE_TYPE_LOGIN
*/
public void checkEnvAvailable(final @IntRange(from = 1, to = 2) int type)
使用示例
mPhoneNumberAuthHelper.checkEnvAvailable(PhoneNumberAuthHelper.SERVICE_TYPE_AUTH);
选调方法:设置授权页协议框是否勾选
/**
* 设置授权页协议勾选框选中状态
*
* @param paramBoolean勾选框选中状态
*/
public void setProtocolChecked(boolean ischeck)
使用示例
mPhoneNumberAuthHelper.setProtocolChecked(true);
选调方法:结束授权页loading动画
/**
* 结束授权页loading dialog
*/
public void hideLoginLoading()
使用示例
mPhoneNumberAuthHelper.hideLoginLoading();
选调方法:授权页是否扩大协议按钮选择范围至我已阅读并同意
/**
*授权页是否扩大协议按钮选择范围至我已阅读并同意
*/
public void expandAuthPageCheckedScope(boolean expand)
使用示例
mPhoneNumberAuthHelper.expandAuthPageCheckedScope(true);
选调方法:获取授权页协议勾选框选中状态
/**
* 获取授权页协议勾选框选中状态
*/
public boolean queryCheckBoxIsChecked()
使用示例
boolean checked = mPhoneNumberAuthHelper.queryCheckBoxIsChecked();
选调方法:用户控制返回键及左上角返回按钮效果
调用此方法后用户在setUIClickListener
方法中收到ResultCode.CODE_ERROR_USER_CANCEL
回调后控制授权页关闭逻辑。
/**
* 授权页返回由用户控制
*/
public void userControlAuthPageCancel()
使用示例
mPhoneNumberAuthHelper.userControlAuthPageCancel();
选调方法:用户禁止使用utdid
调用该方法后移除相关utdid的使用。
/**
* 禁止使用utdid
*/
public void prohibitUseUtdid()
使用示例
mPhoneNumberAuthHelper.prohibitUseUtdid();
选调方法:授权页是否跟随系统深色模式
/**
* 授权页界面是否跟随系统深色模式,默认true跟随
*/
public void setAuthPageUseDayLight(boolean authPageUseDayLight)
使用示例
mPhoneNumberAuthHelper.setAuthPageUseDayLight(true);
选调方法:授权页物理返回键禁用
/**
* 控制授权页物理返回键是否可用
*/
public void closeAuthPageReturnBack(boolean close)
使用示例
mPhoneNumberAuthHelper.closeAuthPageReturnBack(true);
选调方法:横屏水滴屏全屏适配
/**
*授权页刘海屏水滴屏药丸屏横屏时是否全屏
*/
public void keepAuthPageLandscapeFullSreen(boolean fullScreen)
使用示例
mPhoneNumberAuthHelper.keepAuthPageLandscapeFullSreen(true);
选调方法:删除预取号码信息
/**
* 删除预取号码信息
*/
@AuthNumber
public void clearPreInfo()
使用示例
mPhoneNumberAuthHelper.clearPreInfo();
选调方法:获取上网卡运营商
/**
* 返回默认上网卡运营商
*
* @return CMCC(中国移动)、CUCC(中国联通)、CTCC(中国电信)
*/
public String getCurrentCarrierName()
使用示例
String carrierName=mPhoneNumberAuthHelper.getCurrentCarrierName();
选调方法:动态添加控件
/**
* 动态添加控件
*
* @param viewID view的ID
* @param viewConfig view的动态配置
*/
public void addAuthRegistViewConfig(String viewID, AuthRegisterViewConfig viewConfig)
使用示例
mAuthHelper.addAuthRegistViewConfig(""/**view ID */, new AuthRegisterViewConfig.Builder()
//此处需改为用户自定义添加的view
.setView(null)
//AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY 导航栏以下部分
//AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_TITLE_BAR 导航栏部分
//AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_NUMBER 手机号掩码部分
.setRootViewId(AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY)
.setCustomInterface(new CustomInterface() {
@Override
public void onClick(Context context) {
//此处可进行用户自定义view点击事件业务逻辑处理
}
}).build());
选调方法:移除所有动态添加的控件
在调用addAuthRegistViewConfig
之前调用removeAuthRegisterViewConfig
先移除所有动态添加的控件。
/**
* 移除所有动态添加的控件
*/
public void removeAuthRegisterViewConfig()
使用示例
mAuthHelper.removeAuthRegisterViewConfig();
选调方法:添加自定义布局
/**
* 添加自定义布局
*
* @param xmlConfig
*/
@AuthNumber
public void addAuthRegisterXmlConfig(AuthRegisterXmlConfig xmlConfig)
使用示例
mAuthHelper.addAuthRegisterXmlConfig(new AuthRegisterXmlConfig.Builder()
.setLayout(//此处需改为用户自定义的布局ID, new AbstractPnsViewDelegate() {
@Override
public void onViewCreated(View view) {
//此处可进行用户自定义布局业务逻辑处理
}
})
.build());
选调方法:移除所有添加的自定义布局
在调用addAuthRegisterXmlConfig
之前调用removeAuthRegisterXmlConfig
先移除所有添加的自定义View。
/**
* 移除所有的自定义布局
*/
@AuthNumber
public void removeAuthRegisterXmlConfig()
使用示例
mAuthHelper.removeAuthRegisterXmlConfig();
二次弹窗相关
选调方法:添加二次弹窗自定义布局
在调用addPrivacyRegisterXmlConfig前,调用removePrivacyRegisterXmlConfig先移除所有添加的自定义View。
/**
* 添加二次弹窗自定义布局
*
* @param xmlConfig
*/
@AuthNumber
public void addPrivacyRegisterXmlConfig(AuthRegisterXmlConfig xmlConfig)
选调方法:二次弹窗取消事件
/**
* 二次弹窗取消事件
*
* @param
*/
@AuthNumber
public void quitPrivacyPage()
选调方法:移除二次弹窗所有自定义布局
/**
* 移除二次弹窗所有的自定义布局
*/
@AuthNumber
public void removePrivacyRegisterXmlConfig()
使用示例
mAuthHelper.removePrivacyRegisterXmlConfig();
mAuthHelper.addPrivacyRegisterXmlConfig(new AuthRegisterXmlConfig.Builder()
//此处需改为用户自定义的布局ID
.setLayout(null, new AbstractPnsViewDelegate() {
@Override
public void onViewCreated(View view) {
//此处可进行用户自定义布局业务逻辑处理
}
})
.build());
选调方法:二次弹窗动态添加控件
/**
* 动态添加控件
*
* @param viewID view的ID
* @param viewConfig view的动态配置
*/
public void addPrivacyAuthRegistViewConfig(String viewID, AuthRegisterViewConfig viewConfig)
使用示例
mAuthHelper.addPrivacyAuthRegistViewConfig(""/**view ID */, new AuthRegisterViewConfig.Builder()
//此处需改为用户自定义添加的view
.setView(null)
//AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY 协议文本区域
//AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_TITLE_BAR 导航栏部分
//AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_NUMBER 确认按钮区域
.setRootViewId(AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY)
.setCustomInterface(new CustomInterface() {
@Override
public void onClick(Context context) {
//此处可进行用户自定义view点击事件业务逻辑处理
}
}).build());
选调方法:移除所有动态添加的控件
在调用addPrivacyAuthRegistViewConfig
之前调用removePrivacyAuthRegisterViewConfig
先移除所有动态添加的控件。
/**
* 移除所有动态添加的控件
*/
public void removePrivacyAuthRegisterViewConfig()
使用示例
mAuthHelper.removePrivacyAuthRegisterViewConfig();
授权页设置ActivityResult回调
/**
* 设置ActivityResult回调
*
* @param resultListener 回调实现
*/
public void setActivityResultListener(ActivityResultListener resultListener)
使用示例
mPhoneNumberAuthHelper.setActivityResultListener(new ActivityResultListener() {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//此处可进行用户业务逻辑处理
}
});
获取日志埋点相关控制对象
获取到该对象后可以进行相关的日志设置。
/** 获取日志埋点相关控制对象
* @return
* @see PnsReporter
*/
public PnsReporter getReporter()
使用示例
PnsReporter reporter=mPhoneNumberAuthHelper.getReporter()
日志埋点设置
选调方法:控制台日志输出开关
/**
* 设置控制台日志开关
*
*/
void setLoggerEnable(boolean isEnable)
使用示例
mPhoneNumberAuthHelper.getReporter().setLoggerEnable(true)
选调方法:设置日志及埋点上传开关
/**
* 设置上传开关
*
* @param isEnable added in {@link Constant#API_LEVEL_2}
*/
void setUploadEnable(boolean isEnable)
使用示例
mPhoneNumberAuthHelper.getReporter().setUploadEnable(true)
选调方法:注册一个日志处理器
SDK内部产生的日志、埋点可以通过该处理器上传到您的平台。
/**
* 注册一个日志处理器,SDK内部产生的日志、埋点可以通过该处理器上传到自己的平台。
* 与{@link #setUploader(PnsUploader)}不同的是,该处理器不仅可以自己做上传处理,也可以做本地缓存管理
* @param handler
*/
void setLoggerHandler(PnsLoggerHandler handler)
使用示例
authHelper.getReporter().setLoggerHandler(new PnsLoggerHandler() {
@Override
public void monitor(String msg) {
Log.e("xxffg","Monitor:"+msg);
}
@Override
public void verbose(String msg) {
Log.e("xxffg","Verbose:"+msg);
}
@Override
public void info(String msg) {
Log.e("xxffg","Info:"+msg);
}
@Override
public void debug(String msg) {
Log.e("xxffg","Debug:"+msg);
}
@Override
public void warning(String msg) {
Log.e("xxffg","Warning:"+msg);
}
@Override
public void error(String msg) {
Log.e("xxffg","Error:"+msg);
}
});
UI页面接口说明
全屏授权页面设计规范
弹窗授权页面设计规范
代码示例
唤起授权页(竖屏全屏)示例
//1、创建PhoneNumberAuthHelper实例
String secretInfo="用户密钥";
TokenResultListener mCheckListener = new TokenResultListener() {
@Override
public void onTokenSuccess(String s) {
//此处可进行初始化环境检测成功的业务处理
}
@Override
public void onTokenFailed(String s) {
//此处可进行初始化环境检测失败的业务处理
}
};
mPhoneNumberAuthHelper = PhoneNumberAuthHelper.getInstance(this, mCheckListener);
mPhoneNumberAuthHelper.getReporter().setLoggerEnable(true);
mPhoneNumberAuthHelper.setAuthSDKInfo(secretInfo);
//2、检测环境
mPhoneNumberAuthHelper.checkEnvAvailable(PhoneNumberAuthHelper.SERVICE_TYPE_LOGIN);
//3.1、加速拉起一键登录页面
//在不是一进app就需要登录的场景 建议调用此接口 加速拉起一键登录页面
//等到用户点击登录的时候 授权页可以秒拉
//预取号的成功与否不影响一键登录功能,所以不需要等待预取号的返回。
mPhoneNumberAuthHelper.accelerateLoginPage(timeout, new PreLoginResultListener() {
@Override
public void onTokenSuccess(String s) {
//加速成功业务逻辑处理
}
@Override
public void onTokenFailed(String s, String s1) {
//加速失败业务逻辑处理
}
});
//3.2、添加授权页属性,调用获取登录Token接口,可以立马弹起授权页
mAuthHelper.setUIClickListener(new AuthUIControlClickListener() {
@Override
public void onClick(String code, Context context, String jsonString) {
//此处进行授权页各控件点击事件监控,根据不同code区分控件
}
});
mAuthHelper.removeAuthRegisterXmlConfig();
mAuthHelper.removeAuthRegisterViewConfig();
//添加自定义切换其他登录方式
mAuthHelper.addAuthRegistViewConfig(""//view ID, new AuthRegisterViewConfig.Builder()
//此处需改为用户自定义添加的view
.setView(null)
.setRootViewId(AuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY)
.setCustomInterface(new CustomInterface() {
@Override
public void onClick(Context context) {
//此处可进行用户自定义view点击事件业务逻辑处理
}
}).build());
int authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
if (Build.VERSION.SDK_INT == 26) {
authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_BEHIND;
}
updateScreenSize(authPageOrientation);
mAuthHelper.setAuthUIConfig(new AuthUIConfig.Builder()
.setAppPrivacyOne("《自定义隐私协议》", "https://test.h5.app.tbmao.com/user")
.setAppPrivacyTwo("《百度》", "https://www.baidu.com")
.setAppPrivacyColor(Color.GRAY, Color.parseColor("#002E00"))
//隐藏默认切换其他登录方式
.setSwitchAccHidden(true)
//隐藏默认Toast
.setLogBtnToastHidden(true)
//沉浸式状态栏
.setNavColor(Color.parseColor("#026ED2"))
.setStatusBarColor(Color.parseColor("#026ED2"))
.setWebViewStatusBarColor(Color.parseColor("#026ED2"))
.setLightColor(true)
.setBottomNavColor(Color.TRANSPARENT)
.setWebNavTextSizeDp(20)
//图片或者xml的传参方式为不包含后缀名的全称 需要文件需要放在drawable或drawable-xxx目录下 in_activity.xml, mytel_app_launcher.png
.setAuthPageActIn("in_activity", "out_activity")
.setAuthPageActOut("in_activity", "out_activity")
.setProtocolShakePath("protocol_shake")
.setVendorPrivacyPrefix("《")
.setVendorPrivacySuffix("》")
.setPageBackgroundPath("page_background_color")
.setLogoImgPath("mytel_app_launcher")
//一键登录按钮三种状态背景示例login_btn_bg.xml
.setLogBtnBackgroundPath("login_btn_bg")
.setScreenOrientation(authPageOrientation)
.create());
//用户控制返回键及左上角返回按钮效果
mPhoneNumberAuthHelper.userControlAuthPageCancel();
//用户禁用utdid
mPhoneNumberAuthHelper.prohibitUseUtdid();
//授权页是否跟随系统深色模式
mPhoneNumberAuthHelper.setAuthPageUseDayLight(true);
//授权页物理返回键禁用
//mPhoneNumberAuthHelper.closeAuthPageReturnBack(true);
//横屏水滴屏全屏适配
mPhoneNumberAuthHelper.keepAuthPageLandscapeFullSreen(true);
//授权页扩大协议按钮选择范围至我已阅读并同意
//mPhoneNumberAuthHelper.expandAuthPageCheckedScope(true);
mTokenResultListener = new TokenResultListener() {
@Override
public void onTokenSuccess(String s) {
//此处可进行token获取成功及授权页唤起成功的业务处理
}
@Override
public void onTokenFailed(String s) {
//此处可进行token获取失败及退出授权页的业务处理
}
};
mPhoneNumberAuthHelper.setAuthListener(mTokenResultListener);
mPhoneNumberAuthHelper.getLoginToken(this, timeout);
唤起授权页(横屏全屏)示例
mAuthHelper.setAuthUIConfig(new AuthUIConfig.Builder()
.setAppPrivacyOne("《自定义隐私协议》", "https://www.baidu.com")
.setAppPrivacyColor(Color.GRAY, Color.RED)
.setSloganHidden(true)
.setNavHidden(true)
.setCheckedImgPath("checked")
//设置字体大小,以Dp为单位,不同于Sp,不会随着系统字体变化而变化
.setNumberSizeDp(35)
.setUncheckedImgDrawable(mActivity.getResources().getDrawable(R.drawable.unchecked))
.setStatusBarHidden(true)
.setLogoOffsetY(unit)
.setLogoImgPath("phone")
.setLogoWidth(50)
.setLogoHeight(50)
.setNumFieldOffsetY(unit * 3)
.setLogBtnOffsetY(unit * 5)
.setLogBtnHeight(logBtnHeight)
.setSwitchOffsetY(unit * 7)
.setLogBtnMarginLeftAndRight((mScreenHeightDp - 339) / 2)
.setPrivacyMargin(115)
.setLogBtnWidth(339)
.setAuthPageActIn("in_activity", "out_activity")
.setAuthPageActOut("in_activity", "out_activity")
.setProtocolShakePath("protocol_shake")
.setVendorPrivacyPrefix("《")
.setVendorPrivacySuffix("》")
.setPageBackgroundPath("page_background_color")
.setLogBtnBackgroundPath("login_btn_bg")
//设置屏幕方向
.setScreenOrientation(authPageOrientation)
.create());
唤起授权页(竖屏弹窗)示例
int dialogWidth = (int) (mScreenWidthDp * 0.8f);
int dialogHeight = (int) (mScreenHeightDp * 0.65f) - 50;
mAuthHelper.setAuthUIConfig(new AuthUIConfig.Builder()
.setAppPrivacyOne("《自定义隐私协议》", "https://www.baidu.com")
.setAppPrivacyTwo("《自定义隐私协议》2","https://baijiahao.baidu.com/s?id=1693920988135022454&wfr=spider&for=pc")
.setAppPrivacyThree("《自定义隐私协议》3","http://www.npc.gov.cn/zgrdw/npc/cwhhy/13jcwh/node_35014.htm")
.setAppPrivacyColor(Color.GRAY, Color.parseColor("#002E00"))
.setPrivacyConectTexts(new String[]{",","","和"})
.setPrivacyOperatorIndex(2)
.setPrivacyState(false)
//.setCheckboxHidden(true)
.setNavHidden(true)
.setSwitchAccHidden(true)
.setNavReturnHidden(true)
.setDialogBottom(false)
//自定义协议页跳转协议,需要在清单文件配置自定义intent-filter,不需要自定义协议页,则请不要配置ProtocolAction
.setProtocolAction("com.aliqin.mytel.protocolWeb")
.setPackageName(mPackageName)
.setNavColor(Color.TRANSPARENT)
.setWebNavColor(Color.BLUE)
.setLogoOffsetY(0)
.setLogoWidth(42)
.setLogoHeight(42)
.setLogoImgPath("mytel_app_launcher")
.setNumFieldOffsetY(unit + 10)
//设置字体大小,以Dp为单位,不同于Sp,不会随着系统字体变化而变化
.setNumberSizeDp(17)
.setLogBtnWidth(dialogWidth - 30)
.setLogBtnMarginLeftAndRight(15)
.setLogBtnHeight(logBtnHeight)
.setLogBtnTextSizeDp(16)
.setLogBtnBackgroundPath("login_btn_bg")
.setLogBtnOffsetY(unit * 4)
.setSloganText("为了您的账号安全,请先绑定手机号")
.setSloganOffsetY(unit * 3)
.setSloganTextSizeDp(11)
.setPageBackgroundPath("dialog_page_background")
.setAuthPageActIn("in_activity", "out_activity")
.setAuthPageActOut("in_activity", "out_activity")
.setVendorPrivacyPrefix("《")
.setVendorPrivacySuffix("》")
.setDialogWidth(dialogWidth)
.setDialogHeight(dialogHeight)
.setScreenOrientation(authPageOrientation)
.create());
全屏模式下二次弹窗示例
mAuthHelper.setAuthUIConfig(new AuthUIConfig.Builder()
.setAppPrivacyOne("《自定义隐私协议》", "https://test.h5.app.tbmao.com/user")
.setAppPrivacyTwo("《百度》", "https://www.baidu.com")
.setAppPrivacyColor(Color.GRAY, Color.parseColor("#002E00"))
//隐藏默认切换其他登录方式
.setSwitchAccHidden(true)
//隐藏默认Toast
.setLogBtnToastHidden(true)
//沉浸式状态栏
.setNavColor(Color.parseColor("#026ED2"))
.setStatusBarColor(Color.parseColor("#026ED2"))
.setWebViewStatusBarColor(Color.parseColor("#026ED2"))
.setLightColor(false)
.setBottomNavColor(Color.TRANSPARENT)
.setWebNavTextSizeDp(20)
//图片或者xml的传参方式为不包含后缀名的全称 需要文件需要放在drawable或drawable-xxx目录下 in_activity.xml, mytel_app_launcher.png
.setAuthPageActIn("in_activity", "out_activity")
.setAuthPageActOut("in_activity", "out_activity")
.setProtocolShakePath("protocol_shake")
.setVendorPrivacyPrefix("《")
.setVendorPrivacySuffix("》")
.setPageBackgroundPath("page_background_color")
.setLogoImgPath("mytel_app_launcher")
//一键登录按钮三种状态背景示例login_btn_bg.xml
.setLogBtnBackgroundPath("login_btn_bg")
.setScreenOrientation(authPageOrientation)
.setPrivacyAlertIsNeedShow(true)
.setPrivacyAlertIsNeedAutoLogin(true)
.setPrivacyAlertAlignment(Gravity.CENTER)
.setPrivacyAlertBackgroundColor(Color.WHITE)
.setPrivacyAlertMaskAlpha(0.1f)
.setPrivacyAlertWidth(dialogWidth)
.setPrivacyAlertHeight(dialogHeight)
.setPrivacyAlertCornerRadiusArray(new int[]{10,10,10,10})
.setPrivacyAlertTitleTextSize(15)
.setPrivacyAlertTitleColor(Color.BLACK)
.setPrivacyAlertContentTextSize(12)
.setPrivacyAlertContentColor(Color.BLUE)
.setPrivacyAlertContentBaseColor(Color.RED)
.setPrivacyAlertContentHorizontalMargin(40)
.setPrivacyAlertContentAlignment(Gravity.CENTER)
.setPrivacyAlertContentVerticalMargin(30)
.setPrivacyAlertBtnTextColor(Color.WHITE)
.setPrivacyAlertBtnTextColorPath("privacy_alert_btn_color")
.setPrivacyAlertEntryAnimation("in_activity")
.setPrivacyAlertExitAnimation("out_activity")
.create());