• 详细实例教程!集成华为虚假用户检测,防范虚假恶意流量


    前言

    最近老板要我开发一个商城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

    原作者:晚上吃啥

  • 相关阅读:
    条码解析的一片js
    再看.net本质(二)
    再看.net本质
    powerdesigner逆向导出oracle数据库结构显示备注
    powerdesigner逆向工程,从数据库导出PDM
    实现HTTP跳转到HTTPS
    opencart 模块开发详解
    Opencart 之 Registry 类详解
    OpenCart 之registry功用
    php+支付宝整合
  • 原文地址:https://www.cnblogs.com/developer-huawei/p/14388834.html
Copyright © 2020-2023  润新知