詳細實例教程!集成華為虛假用戶檢測,防范虛假惡意流量


前言

最近老板要我開發一個商城App,在注冊登錄環節過濾掉虛假用戶,減少這些惡意流量對App運營的影響。偶然想起來,在今年的華為開發者大會上了解到虛假用戶檢測功能,於是准備試試集成在我們的App上。集成后發現效果還真不錯,不僅對虛假用戶識別率高,而且目前這項功能是免費開放的。老板再也不用擔心之前的虛假用戶撞庫、惡意刷帖、薅羊毛等問題了。

今天簡單總結了一下我開發過程的教程,分享給大家!

官網的Demo和Sample代碼體驗

華為官網上有實例代碼可以直接下下來看,除了虛假用戶檢測(UserDetect),還有其他4個功能的示例代碼,都是支持Java和Kotlin兩種開發語言的:華為官網的示例代碼Java/Kotlin,下載下來以后,根據官網頁面的提示說明,改一下包名就可以運行。

我自己寫的簡易sample,朋友們感興趣也可以下下來參考。

商城App集成安全檢測 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

原作者:晚上吃啥


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM