本文为您介绍融合认证功能Demo的运行步骤及示例代码,帮助您快速了解融合认证功能。Android客户端SDK集成的详细接入步骤及用法,请参见融合认证Android客户端接入。
步骤一:下载并解压SDK
登录号码认证产品控制台,在概览页面右侧API&SDK区域,单击立即下载,进入API&SDK页面,根据页面提示下载并解压对应SDK。
步骤二:设置认证方案和认证策略
创建认证方案
绑定认证策略
登录号码认证服务控制台,选择,将方案与场景进行关联。
步骤三:打开Demo项目
使用Android Studio IDE,选择打开已有项目,选择到Demo文件夹。项目载入过程会拉取相关依赖,请耐心等待。
本文使用Android Studio 4.0版本进行演示。如果您使用的是其他的IDE版本,可能会存在构建报错,请按照提示修改对应Gradle版本。使用工具和环境搭建相关可参考客户端SDK参考。
步骤四:选择访问模式
为方便用户在服务端尚未搭建成功的情况下运行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换取手机号接口方法,用户可将该方法替换成用户方服务接口参数,且该网络请求使用了public static GetAuthTokenResult getAuthToken(Context context) { StringBuilder builder = new StringBuilder(); builder.append("Action="); builder.append(Constant.GETAUTHREQUESTACTION); builder.append("&Platform=Android"); builder.append("&PackageName="); builder.append(PhoneUtils.getPackageName(context)); builder.append("&SchemeCode="); builder.append(Constant.SCHEME_CODE); //token有效期 单位 s builder.append("&DurationSeconds="); builder.append(3600); builder.append("&PackageSign="); builder.append(PackageUtil.getSign(context)); String result = getHttp(Constant.NETURL, builder.toString()); Log.d(TAG, "getAuthToken result is " + result); GetAuthTokenResult authTokenResult = ResultUtils.getAuthTokenResult(result); return authTokenResult; }HttpURLConnection请求,根据用户服务方环境可修改为HttpsURLConnection。public static VerifyTokenResult verifyToken(Context context, String token) { StringBuilder builder = new StringBuilder(); builder.append("platform=Android&"); builder.append("Action="); builder.append(Constant.VERIFYREQUESTACTION); builder.append("&SchemeCode="); builder.append(Constant.SCHEME_CODE); builder.append("&VerifyToken="); builder.append(token); String result = postHttp(Constant.NETURL, builder.toString()); Log.d(TAG, "verifyToken result is " + result); VerifyTokenResult verifyTokenResult = ResultUtils.getVerifyTokenResult(result); return verifyTokenResult; }
快速访问模式
快速访问模式可暂不接入服务端API,适合快速调试Demo并体验基础或部分功能。
-
在OpenAPI门户填写接口参数。参数详情,请参见融合认证获取鉴权token。
说明-
SchemeCode:请填写在控制台创建的方案Code。
-
PackageName:请在app/build.gradle文件
android.defaultConfig.applicationId属性查看包名。 -
PackageSign:包签名,您可以通过手机终端下载并安装Android App签名获取工具,获取Android App的包签名信息,便于认证过程进行鉴权。
-
-
单击发起调用。
-
在调用结果页,获取临时鉴权Token。调用成功后,返回状态码为200,在JSON响应体中找到Token字段并复制其值。
-
在
com.alicom.fusion.demo.Constant类中,进行如下设置:-
LOCAL_TOKEN:请填入已获取的临时鉴权Token。
-
SCHEME_CODE:请填入已创建的方案Code。
-
TOKEN_MODEL:请填1。
-
-
Demo运行完毕后,在AlicomFusionAuthCallBack回调的
onVerifySuccess方法中获取号码校验Token,通过Token在控制台进行换号校验操作,可参见服务端集成。@Override public void onVerifySuccess(String token, String s1, AlicomFusionEvent alicomFusionEvent) { Log.d(TAG, "AlicomFusionAuthCallBack---onVerifySuccess " + token); new Thread(new Runnable() { @Override public void run() { VerifyTokenResult verifyTokenResult = TokenActionFactory.verifyToken(GlobalInfoManager.getInstance().getContext(), token); updateBusiness(verifyTokenResult, s1); } }).start(); }
步骤五:构建及运行
-
将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();