前言
最近老板要我開發一個商城App,在注冊登錄環節過濾掉虛假用戶,減少這些惡意流量對App運營的影響。偶然想起來,在今年的華為開發者大會上了解到虛假用戶檢測功能,於是准備試試集成在我們的App上。集成后發現效果還真不錯,不僅對虛假用戶識別率高,而且目前這項功能是免費開放的。老板再也不用擔心之前的虛假用戶撞庫、惡意刷帖、薅羊毛等問題了。
今天簡單總結了一下我開發過程的教程,分享給大家!
官網的Demo和Sample代碼體驗
華為官網上有實例代碼可以直接下下來看,除了虛假用戶檢測(UserDetect),還有其他4個功能的示例代碼,都是支持Java和Kotlin兩種開發語言的:華為官網的示例代碼Java/Kotlin,下載下來以后,根據官網頁面的提示說明,改一下包名就可以運行。
我自己寫的簡易sample,朋友們感興趣也可以下下來參考。
1 開發前准備
1.1 Android studio安裝
開發工具還沒有裝的小伙伴可以先自己下載一下:
Android studio官網下載:https://developer.android.com/studio?ha_source=hms1
Android studio安裝教程:https://www.cnblogs.com/xiadewang/p/7820377.html
1.2 在AppGallery Connect中配置相關信息
在開發應用前,需要在AppGallery Connect中配置相關信息。具體操作步驟
1.3 配置華為maven倉地址
打開Android Studio項目級“build.gradle”文件:
添加HUAWEI agcp插件以及Maven代碼庫:
- 在“buildscript > repositories”中配置HMS Core SDK的Maven倉地址。
- 在“allprojects > repositories”中配置HMS Core SDK的Maven倉地址。
- 如果App中添加了“agconnect-services.json”文件則需要在“buildscript > dependencies”中增加agcp配置。
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倉地址配置在最后哦。
1.4 添加編譯依賴
打開應用級的“build.gradle”文件:
在文件頭 apply plugin: 'com.android.application' 下一行添加如下配置:
apply plugin: 'com.huawei.agconnect'
在“dependencies”中添加如下編譯依賴:
dependencies {
implementation 'com.huawei.hms:safetydetect:5.0.5.301'
}
1.5 配置混淆腳本
如果你自己開發時要用到AndResGuard,那就還需要在應用級的“build.gradle”文件中加入AndResGuard允許清單,代碼可以參考官網的混淆配置。
2 代碼開發
2.1 創建SafetyDetectClient
// 替換成自己的 activity 或者 context作為參數.
SafetyDetectClient client = SafetyDetect.getClient(MainActivity.this);
2.2初始化虛假用戶行為檢測
在使用該能力前,需要先通過initUserDetect接口完成初始化工作。我在商城App的LoginAct.java類的onResume方法里來調用初始化接口,示例代碼如下:
@Override
protected void onResume() {
super.onResume();
// 初始化虛假用戶檢測API
SafetyDetect.getClient(this).initUserDetect();
}
2.3 發起檢測請求
我設計的是在商城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拿到啦。
2.4 獲取檢測結果
獲得上述的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可以根據自身業務場景來完成對應的防護處理。
2.5 關閉虛假用戶檢測
小伙伴們記得用完以后關閉服務,釋放資源哦。在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
原作者:晚上吃啥