前言
最近老板要我开发一个商城 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
原作者:早晨吃啥