最近老闆要我開發一個商城App,在註冊登陸環節過濾掉虛假用戶,減小這些惡意流量對App運營的影響。偶然想起來,在今年的華爲開發者大會上了解到虛假用戶檢測功能,因而準備試試集成在咱們的App上。集成後發現效果還真不錯,不只對虛假用戶識別率高,並且目前這項功能是免費開放的。老闆不再用擔憂以前的虛假用戶撞庫、惡意刷帖、薅羊毛等問題了。html
今天簡單總結了一下我開發過程的教程,分享給你們!java
華爲官網上有實例代碼能夠直接下下來看,除了虛假用戶檢測(UserDetect),還有其餘4個功能的示例代碼,都是支持Java和Kotlin兩種開發語言的:華爲官網的示例代碼Java/Kotlin,下載下來之後,根據官網頁面的提示說明,改一下包名就能夠運行。android
我本身寫的簡易sample,朋友們感興趣也能夠下下來參考。git
商城App集成安全檢測 sample示例github
開發工具尚未裝的小夥伴能夠先本身下載一下:
Android studio官網下載:https://developer.android.com/studio?ha_source=hms1
Android studio安裝教程:http://www.javashuo.com/article/p-wamzpmfl-bo.htmljson
在開發應用前,須要在AppGallery Connect中配置相關信息。具體操做步驟瀏覽器
打開Android Studio項目級「build.gradle」文件:安全
添加HUAWEI agcp插件以及Maven代碼庫:app
buildscript { repositories { google() jcenter() // 配置HMS Core SDK的Maven倉地址。 maven {url 'https://developer.huawei.com/repo/'} } dependencies { ... // 增長agcp配置。 classpath 'com.huawei.agconnect:agcp:1.4.2.300' } } allprojects { repositories { google() jcenter() // 配置HMS Core SDK的Maven倉地址。 maven {url 'https://developer.huawei.com/repo/'} } }
這裏須要說明的是,Maven倉地址沒法直接在瀏覽器中打開訪問,只能在IDE中配置。須要添加多個Maven代碼庫的話,將華爲公司的Maven倉地址配置在最後哦。異步
打開應用級的「build.gradle」文件:
在文件頭 apply plugin: 'com.android.application' 下一行添加以下配置:
apply plugin: 'com.huawei.agconnect'
在「dependencies」中添加以下編譯依賴:
dependencies { implementation 'com.huawei.hms:safetydetect:5.0.5.301' }
若是你本身開發時要用到AndResGuard,那就還須要在應用級的「build.gradle」文件中加入AndResGuard容許清單,代碼能夠參考官網的混淆配置。
// 替換成本身的 activity 或者 context做爲參數. SafetyDetectClient client = SafetyDetect.getClient(MainActivity.this);
在使用該能力前,須要先經過initUserDetect接口完成初始化工做。我在商城App的LoginAct.java類的onResume方法裏來調用初始化接口,示例代碼以下:
@Override protected void onResume() { super.onResume(); // 初始化虛假用戶檢測API SafetyDetect.getClient(this).initUserDetect(); }
我設計的是在商城App用戶登陸階段進行虛假用戶檢測的,通常檢測請求也能夠設計在搶購、抽獎等環節。
先在LoginAct.java中的onLogin方法中,調用SafetyDetectUtil的callUserDetect方法來發起檢測。我具體的業務邏輯:商場App在判斷用戶名和密碼是否正確以前發起虛假用戶檢測,而後經過回調方法來獲取檢測結果,並作相應的處理。若檢測結果爲真實用戶,則容許該用戶登陸,不然不容許其登陸操做:
private void onLogin() { final String name = ... final String password = ... new Thread(new Runnable() { @Override public void run() { // 調用通過封裝後的虛假用戶檢測接口,此處須要傳入當前的Activity或上下文並添加回調處理 SafetyDetectUtil.callUserDetect(LoginAct.this, new ICallBack<Boolean>() { @Override public void onSuccess(Boolean userVerified) { // 虛假用戶檢測成功 if (userVerified){ // 檢測結果爲成功,繼續登陸 loginWithLocalUser(name, password); } else { // 檢測結果爲失敗,登陸失敗 ToastUtil.getInstance().showShort(LoginAct.this, R.string.toast_userdetect_error); } } }); } }).start(); }
SafetyDetectUtil.java中的callUserDetect方法封裝了虛假用戶檢測中的關鍵流程,如APP ID的獲取、responseToken的獲取以及向App Server發送responseToken等,詳見:
public static void callUserDetect(final Activity activity, final ICallBack<? super Boolean> callBack) { Log.i(TAG, "User detection start."); // 從app目錄下的agconnect-services.json文件中讀取app_id字段 String appid = AGConnectServicesConfig.fromContext(activity).getString("client/app_id"); // 調用虛假用戶檢測 API,並添加回調來作後續的異步處理 SafetyDetect.getClient(activity) .userDetection(appid) .addOnSuccessListener(new OnSuccessListener<UserDetectResponse>() { @Override public void onSuccess(UserDetectResponse userDetectResponse) { // 虛假用戶檢測成功,經過 getResponseToken 方法來獲取responseToken String responseToken =userDetectResponse.getResponseToken(); // 將該responseToken發送到App Server boolean verifyResult = verifyUserRisks(activity, responseToken); callBack.onSuccess(verifyResult); Log.i(TAG, "User detection onSuccess."); } }) }
到這裏,responseToken就經過虛假用戶檢測API拿到啦。
得到上述的responseToken後,提交至App服務端,再由App服務端發送到Safety Detect Server,調用verify雲側接口獲取結果。不過在中國大陸地區,因爲User Detect不支持驗證碼二次驗證,爲了保證檢測一樣準確有效,調用的是nocaptcha雲側接口來獲取檢測結果。
具體步驟:
a) 獲取Access Token
打開AppGallery Connect網站 - 「個人應用」 - 「HMSPetStoreApp」 - 「分發」 - 「應用信息」,能夠查看SecretKey,如圖:
而後使用SecretKey和APP ID請求華爲認證服務獲取Access Token,獲取方法參考
b) 調用Safety Detect Server接口獲取結果
根據上一步中獲取到的Access Token,和以前獲取到的responseToken,調用Safety Detect Server的檢測結果查詢接口,小夥伴戳這裏參考接口調用方法。
最後獲取的檢測結果,能夠經過App Server直接返回給App。True表明真實用戶,False表明虛假用戶,App能夠根據自身業務場景來完成對應的防禦處理。
小夥伴們記得用完之後關閉服務,釋放資源哦。在App的LoginAct.java 類的onPause方法中調用關閉接口:
@Override protected void onPause() { super.onPause(); // 關閉虛假用戶檢測API SafetyDetect.getClient(this).shutdownUserDetect(); }
整個代碼開發過程就結束啦,保姆級教程,是否是超簡單,給你們看下效果:
Demo演示請戳此
原文連接:https://developer.huawei.com/consumer/cn/forum/topic/0202445499791050552?fid=18
原做者:晚上吃啥