本文为您介绍融合认证功能Demo的运行步骤及示例代码,帮助您快速了解融合认证功能。Android客户端SDK集成的详细接入步骤及用法,请参见融合认证Android客户端接入。
步骤一:下载并解压SDK
登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。
步骤二:设置认证方案和认证策略
创建认证方案
绑定认证策略
登录号码认证服务控制台,选择 ,将方案与场景进行关联。
步骤三:打开Demo项目
使用Android Studio IDE,选择打开已有项目,选择到Demo文件夹。项目载入过程会拉取相关依赖,请耐心等待。
本文使用Android Studio 4.0版本进行演示。如果您使用的是其他的IDE版本,可能会存在构建报错,请按照提示修改对应Gradle版本。使用工具和环境搭建相关可参考准备工作。
步骤四:选择访问模式
为方便用户在服务端尚未搭建成功的情况下运行Demo,阿里云在Demo中添加了快速访问模式。在com.alicom.fusion.demo.Constant
中设置TOKEN_MODEL的值即可使用不同的访问模式。
TOKEN_MODEL:设置为1时,为快速访问模式。
TOKEN_MODEL:设置为2时,为正常访问模式(默认为2,正常访问模式)。
正常访问模式
正常访问模式需要接入融合认证服务端和客户端SDK,进行正式调试并可以体验全部功能。
请先根据开发指南接入融合认证服务端App Server,通过访问App Server获取鉴权Token,并通过访问App Server做最终认证结果校验。
在
com.alicom.fusion.demo.Constant
类中设置相关参数。SCHEME_CODE:请填入在控制台已创建的方案Code。
NETURL:请填写用户方网络服务地址。
GETAUTHREQUESTACTION:请填写用户获取Token接口名称。
VERIFYREQUESTACTION:请填写用户换号接口名称。
在
com.alicom.fusion.demo.net.HttpRequestUtil
类中修改相关参数。获取Token接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了
HttpURLConnection
请求,根据用户服务方环境可修改为HttpsURLConnection。Token换取手机号接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了HttpURLConnection
请求,根据用户服务方环境可修改为HttpsURLConnection。
快速访问模式
快速访问模式可暂不接入服务端API,适合快速调试Demo并体验基础或部分功能。
在OpenAPI门户填写接口参数。参数详情,请参见GetFusionAuthToken - 融合认证获取鉴权token。
说明SchemeCode:请填写在控制台创建的方案Code。
PackageName:请在app/build.gradle文件
android.defaultConfig.applicationId
属性查看包名。PackageSign:包签名,您可以通过手机终端下载并安装Android App签名获取工具,获取Android App的包签名信息,便于认证过程进行鉴权。
单击发起调用。
在调用结果页,获取临时鉴权Token。
在
com.alicom.fusion.demo.Constant
类中,进行如下设置:LOCAL_TOKEN:请填入已获取的临时鉴权Token。
SCHEME_CODE:请填入已创建的方案Code。
TOKEN_MODEL:请填1。
Demo运行完毕后,在AlicomFusionAuthCallBack回调的
onVerifySuccess
方法中获取号码校验Token,通过Token在控制台进行换号校验操作,可参见融合认证服务端集成。
步骤五:构建及运行
将Android系统的手机连接到电脑上,打开开发者模式和开发者模式下的USB调试模式。
点击IDE顶部工具菜单,构建并运行项目。
功能试用。
说明确保您的终端设备已开启SIM卡的移动数据网络(支持中国联通、中国移动的3G网络,但接口耗时会增加)。
示例代码
初始化SDK
mAlicomFusionBusiness = new AlicomFusionBusiness();
传入Token
AlicomFusionAuthToken token=new AlicomFusionAuthToken();
token.setAuthToken(GlobalInfoManager.getInstance().getToken());
mAlicomFusionBusiness.initWithToken(GlobalInfoManager.getInstance().getContext(), Constant.SCHEME_CODE,token);
设置主流程回调AlicomFusionAuthCallBack
mAlicomFusionAuthCallBack = new AlicomFusionAuthCallBack() {
@Override
public AlicomFusionAuthToken onSDKTokenUpdate() {
Log.d(TAG, "AlicomFusionAuthCallBack---onSDKTokenUpdate");
AlicomFusionAuthToken token=new AlicomFusionAuthToken();
CountDownLatch latch=new CountDownLatch(1);
new Thread(new Runnable() {
@Override
public void run() {
GlobalInfoManager.getInstance().setToken(HttpRequestUtil.getAuthToken(GlobalInfoManager.getInstance().getContext()));
latch.countDown();
}
}).start();
try {
latch.await();
token.setAuthToken(GlobalInfoManager.getInstance().getToken());
} catch (InterruptedException e) {
}
return token;
}
@Override
public void onSDKTokenAuthSuccess() {
Log.d(TAG, "AlicomFusionAuthCallBack---onSDKTokenAuthSuccess");
verifySuccess=true;
}
@Override
public void onSDKTokenAuthFailure(AlicomFusionAuthToken token, AlicomFusionEvent alicomFusionEvent) {
Log.d(TAG, "AlicomFusionAuthCallBack---onSDKTokenAuthFailure "+alicomFusionEvent.toString());
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
String token = HttpRequestUtil.getAuthToken(GlobalInfoManager.getInstance().getContext());
GlobalInfoManager.getInstance().setToken(token);
AlicomFusionAuthToken authToken=new AlicomFusionAuthToken();
authToken.setAuthToken(GlobalInfoManager.getInstance().getToken());
mAlicomFusionBusiness.updateToken(authToken);
}
}).start();
}
@Override
public void onVerifySuccess(String token, String s1, AlicomFusionEvent alicomFusionEvent) {
Log.d(TAG, "AlicomFusionAuthCallBack---onVerifySuccess " +token);
new Thread(new Runnable() {
@Override
public void run() {
String mobilNum = HttpRequestUtil.verifyToken(GlobalInfoManager.getInstance().getContext(), token);
updateBusiness(mobilNum,s1);
}
}).start();
}
@Override
public void onHalfWayVerifySuccess(String nodeName, String maskToken, AlicomFusionEvent alicomFusionEvent, HalfWayVerifyResult halfWayVerifyResult) {
Log.d(TAG, "AlicomFusionAuthCallBack---onHalfWayVerifySuccess "+maskToken);
new Thread(new Runnable() {
@Override
public void run() {
String result = HttpRequestUtil.verifyToken(GlobalInfoManager.getInstance().getContext(), maskToken);
updateBusinessHalfWay(result,halfWayVerifyResult,nodeName);
}
}).start();
}
@Override
public void onVerifyFailed(AlicomFusionEvent alicomFusionEvent, String s) {
Log.d(TAG, "AlicomFusionAuthCallBack---onVerifyFailed "+alicomFusionEvent.toString()());
mAlicomFusionBusiness.continueSceneWithTemplateId("100001",false);
}
@Override
public void onTemplateFinish(AlicomFusionEvent alicomFusionEvent) {
Log.d(TAG, "AlicomFusionAuthCallBack---onTemplateFinish "+alicomFusionEvent.toString());
sum=0;
mAlicomFusionBusiness.stopSceneWithTemplateId("100001");
}
@Override
public void onAuthEvent(AlicomFusionEvent alicomFusionEvent) {
Log.d(TAG, "AlicomFusionAuthCallBack---onAuthEvent"+alicomFusionEvent.toString());
}
@Override
public String onGetPhoneNumberForVerification(String s, AlicomFusionEvent alicomFusionEvent) {
Log.d(TAG, "AlicomFusionAuthCallBack---onGetPhoneNumberForVerification");
return GlobalInfoManager.getInstance().getUserInfo();
}
@Override
public void onVerifyInterrupt(AlicomFusionEvent alicomFusionEvent) {
Log.d(TAG, "AlicomFusionAuthCallBack---onVerifyInterrupt"+alicomFusionEvent.toString());
}
};
mAlicomFusionBusiness.setAlicomFusionAuthCallBack(mAlicomFusionAuthCallBack);
开始场景
mAlicomFusionBusiness.startSceneWithTemplateId(PersonalCenterFragment.this.getActivity(), "100001");
继续场景
mAlicomFusionBusiness.continueSceneWithTemplateId("100001",false);
结束场景
mAlicomFusionBusiness.stopSceneWithTemplateId("100001");
销毁SDK
mAlicomFusionBusiness.destory();