前言

最近老板要我开发一个商城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办法里来调用初始化接口,示例代码如下:

@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<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办法中调用敞开接口:

@Overrideprotected void onPause() {    super.onPause();    // 敞开虚伪用户检测API    SafetyDetect.getClient(this).shutdownUserDetect();}

结后语

整个代码开发过程就完结啦,保姆级教程,是不是超简略,给大家看下成果:
Demo演示请戳此

附官网开发指南

华为虚伪用户检测开发指南


原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0202445499791050552?fid=18

原作者:早晨吃啥