前言
最近老板要我开发一个商城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() {
@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() {
@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
原作者:晚上吃啥