博客
关于我
详细实例教程!集成华为虚假用户检测,防范虚假恶意流量
阅读量:412 次
发布时间:2019-03-06

本文共 4856 字,大约阅读时间需要 16 分钟。

前言

最近老板要我开发一个商城App,在注册登录环节过滤掉虚假用户,减少这些恶意流量对App运营的影响。偶然想起来,在今年的华为开发者大会上了解到虚假用户检测功能,于是准备试试集成在我们的App上。集成后发现效果还真不错,不仅对虚假用户识别率高,而且目前这项功能是免费开放的。老板再也不用担心之前的虚假用户撞库、恶意刷帖、薅羊毛等问题了。

今天简单总结了一下我开发过程的教程,分享给大家!

官网的Demo和Sample代码体验

华为官网上有实例代码可以直接下下来看,除了虚假用户检测(UserDetect),还有其他4个功能的示例代码,都是支持Java和Kotlin两种开发语言的:,下载下来以后,根据官网页面的提示说明,改一下包名就可以运行。

我自己写的简易sample,朋友们感兴趣也可以下下来参考。

1 开发前准备

1.1 Android studio安装

开发工具还没有装的小伙伴可以先自己下载一下:

Android studio官网下载:
Android studio安装教程:

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方法里来调用初始化接口,示例代码如下:

@Overrideprotected 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
() { @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
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
() { @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,调用获取结果。不过在中国大陆地区,由于User Detect不支持验证码二次验证,为了保证检测同样准确有效,调用的是来获取检测结果。

具体步骤:

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方法中调用关闭接口:

@Overrideprotected void onPause() {    super.onPause();    // 关闭虚假用户检测API    SafetyDetect.getClient(this).shutdownUserDetect();}

结后语

整个代码开发过程就结束啦,保姆级教程,是不是超简单,给大家看下效果:

附官方开发指南


原文链接:

原作者:晚上吃啥

转载地址:http://zruuz.baihongyu.com/

你可能感兴趣的文章
delete对象时会自动调用类的析构函数
查看>>
POD类型
查看>>
const与常量,傻傻分不清楚~
查看>>
Head First设计模式——迭代器模式
查看>>
MongoDB版本及存储引擎区别
查看>>
shell echo单行和多行文字定向写入到文件中
查看>>
cmp命令
查看>>
Linux 磁盘管理(df fu fdisk mkfs mount)
查看>>
jQuery的事件绑定与触发 - 学习笔记
查看>>
Linux上TCP的几个内核参数调优
查看>>
记一次讲故事机器人的开发-我有故事,让机器人来读
查看>>
seo 回忆录百度基本概念(一)
查看>>
kettle 执行 kjb 临时文件夹 /tmp permission denied 问题
查看>>
netcore中使用session
查看>>
Android 开发学习进程0.25 自定义控件
查看>>
多媒体文件格式全解说(下)--图片
查看>>
淘宝WAP版小BUG分析
查看>>
asp.net打印网页后自动关闭网页【无需插件】
查看>>
【Maven】POM基本概念
查看>>
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
查看>>