Android客戶端Demo體驗(yàn)
本文為您介紹融合認(rèn)證功能Demo的運(yùn)行步驟及示例代碼,幫助您快速了解融合認(rèn)證功能。Android客戶端SDK集成的詳細(xì)接入步驟及用法,請(qǐng)參見融合認(rèn)證Android客戶端接入。
步驟一:下載并解壓SDK
登錄號(hào)碼認(rèn)證產(chǎn)品控制臺(tái),在概覽頁面右側(cè)API&SDK區(qū)域,單擊立即下載,進(jìn)入API&SDK頁面,根據(jù)頁面提示下載并解壓對(duì)應(yīng)SDK。
步驟二:設(shè)置認(rèn)證方案和認(rèn)證策略
創(chuàng)建認(rèn)證方案
登錄號(hào)碼認(rèn)證服務(wù)控制臺(tái),創(chuàng)建融合認(rèn)證方案,在方案列表界面獲取方案Code。
綁定認(rèn)證策略
登錄號(hào)碼認(rèn)證服務(wù)控制臺(tái),選擇 ,將方案與場(chǎng)景進(jìn)行關(guān)聯(lián)。
步驟三:打開Demo項(xiàng)目
使用Android Studio IDE,選擇打開已有項(xiàng)目,選擇到Demo文件夾。項(xiàng)目載入過程會(huì)拉取相關(guān)依賴,請(qǐng)耐心等待。
本文使用Android Studio 4.0版本進(jìn)行演示。如果您使用的是其他的IDE版本,可能會(huì)存在構(gòu)建報(bào)錯(cuò),請(qǐng)按照提示修改對(duì)應(yīng)Gradle版本。使用工具和環(huán)境搭建相關(guān)可參考準(zhǔn)備工作。
步驟四:選擇訪問模式
為方便用戶在服務(wù)端尚未搭建成功的情況下運(yùn)行Demo,阿里云在Demo中添加了快速訪問模式。在com.alicom.fusion.demo.Constant
中設(shè)置TOKEN_MODEL的值即可使用不同的訪問模式。
TOKEN_MODEL:設(shè)置為1時(shí),為快速訪問模式。
TOKEN_MODEL:設(shè)置為2時(shí),為正常訪問模式(默認(rèn)為2,正常訪問模式)。
正常訪問模式
正常訪問模式需要接入融合認(rèn)證服務(wù)端和客戶端SDK,進(jìn)行正式調(diào)試并可以體驗(yàn)全部功能。
請(qǐng)先根據(jù)開發(fā)指南接入融合認(rèn)證服務(wù)端App Server,通過訪問App Server獲取鑒權(quán)Token,并通過訪問App Server做最終認(rèn)證結(jié)果校驗(yàn)。
在
com.alicom.fusion.demo.Constant
類中設(shè)置相關(guān)參數(shù)。SCHEME_CODE:請(qǐng)?zhí)钊朐诳刂婆_(tái)已創(chuàng)建的方案Code。
NETURL:請(qǐng)?zhí)顚懹脩舴骄W(wǎng)絡(luò)服務(wù)地址。
GETAUTHREQUESTACTION:請(qǐng)?zhí)顚懹脩臬@取Token接口名稱。
VERIFYREQUESTACTION:請(qǐng)?zhí)顚懹脩魮Q號(hào)接口名稱。
在
com.alicom.fusion.demo.net.HttpRequestUtil
類中修改相關(guān)參數(shù)。獲取Token接口方法,用戶可將該方法替換成用戶方服務(wù)接口參數(shù),且該網(wǎng)絡(luò)請(qǐng)求使用了
HttpURLConnection
請(qǐng)求,根據(jù)用戶服務(wù)方環(huán)境可修改為HttpsURLConnection。Token換取手機(jī)號(hào)接口方法,用戶可將該方法替換成用戶方服務(wù)接口參數(shù),且該網(wǎng)絡(luò)請(qǐng)求使用了HttpURLConnection
請(qǐng)求,根據(jù)用戶服務(wù)方環(huán)境可修改為HttpsURLConnection。
快速訪問模式
快速訪問模式可暫不接入服務(wù)端API,適合快速調(diào)試Demo并體驗(yàn)基礎(chǔ)或部分功能。
在OpenAPI門戶填寫接口參數(shù)。參數(shù)詳情,請(qǐng)參見GetFusionAuthToken - 融合認(rèn)證獲取鑒權(quán)token。
說明SchemeCode:請(qǐng)?zhí)顚懺诳刂婆_(tái)創(chuàng)建的方案Code。
PackageName:請(qǐng)?jiān)?b>app/build.gradle文件
android.defaultConfig.applicationId
屬性查看包名。PackageSign:包簽名,您可以通過手機(jī)終端下載并安裝Android App簽名獲取工具,獲取Android App的包簽名信息,便于認(rèn)證過程進(jìn)行鑒權(quán)。
單擊發(fā)起調(diào)用。
在調(diào)用結(jié)果頁,獲取臨時(shí)鑒權(quán)Token。
在
com.alicom.fusion.demo.Constant
類中,進(jìn)行如下設(shè)置:LOCAL_TOKEN:請(qǐng)?zhí)钊胍勋@取的臨時(shí)鑒權(quán)Token。
SCHEME_CODE:請(qǐng)?zhí)钊胍褎?chuàng)建的方案Code。
TOKEN_MODEL:請(qǐng)?zhí)?。
Demo運(yùn)行完畢后,在AlicomFusionAuthCallBack回調(diào)的
onVerifySuccess
方法中獲取號(hào)碼校驗(yàn)Token,通過Token在控制臺(tái)進(jìn)行換號(hào)校驗(yàn)操作,可參見融合認(rèn)證服務(wù)端集成。
步驟五:構(gòu)建及運(yùn)行
將Android系統(tǒng)的手機(jī)連接到電腦上,打開開發(fā)者模式和開發(fā)者模式下的USB調(diào)試模式。
點(diǎn)擊IDE頂部工具菜單,構(gòu)建并運(yùn)行項(xiàng)目。
功能試用。
說明確保您的終端設(shè)備已開啟SIM卡的移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)(支持中國聯(lián)通、中國移動(dòng)的3G網(wǎng)絡(luò),但接口耗時(shí)會(huì)增加)。
示例代碼
初始化SDK
mAlicomFusionBusiness = new AlicomFusionBusiness();
傳入Token
AlicomFusionAuthToken token=new AlicomFusionAuthToken();
token.setAuthToken(GlobalInfoManager.getInstance().getToken());
mAlicomFusionBusiness.initWithToken(GlobalInfoManager.getInstance().getContext(), Constant.SCHEME_CODE,token);
設(shè)置主流程回調(diào)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);
開始場(chǎng)景
mAlicomFusionBusiness.startSceneWithTemplateId(PersonalCenterFragment.this.getActivity(), "100001");
繼續(xù)場(chǎng)景
mAlicomFusionBusiness.continueSceneWithTemplateId("100001",false);
結(jié)束場(chǎng)景
mAlicomFusionBusiness.stopSceneWithTemplateId("100001");
銷毀SDK
mAlicomFusionBusiness.destory();