浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
防定位作弊
更新时间:2020年07月08日
简介

挖掘各类模拟定位方式对百度定位SDK内部信息的影响特征,综合多源数据信息,有效识别模拟GPS定位结果,为签到、运动、出行、游戏等场景的位置真实性提供有力保障。
在签到类场景中,如果设置了单次定位setOnceLocation(true),则不会返回GPS定位结果,不需进行防定位作弊配置。

防定位作弊配置具体步骤如下:

1第一步,准备工作
在使用定位SDK进行具体开发工作之前,需 获取密钥(AK),并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 此外,Google在Android 6.0中引入了动态权限获取机制,开发者在使用定位SDK之前,请详细了解关于Android 6.0系统开发须知。
2第二步,初始化LocationClient类
请在主线程中声明LocationClient类对象,该对象初始化需传入Context类型参数。推荐使用getApplicationConext()方法获取全进程有效的Context。

核心代码段如下:

public LocationClient mLocationClient = null;
private MyLocationListener myListener = new MyLocationListener();
//BDAbstractLocationListener为7.2版本新增的Abstract类型的监听接口
//原有BDLocationListener接口暂时同步保留。具体介绍请参考后文中的说明
public void onCreate() {
    mLocationClient = new LocationClient(getApplicationContext());     
    //声明LocationClient类
    mLocationClient.registerLocationListener(myListener);    
    //注册监听函数
}
3第三步,配置定位SDK参数

要实现定位防作弊功能,需要利用LocationClientOption类配置定位SDK参数。

核心代码及注释说明如下:

LocationClientOption option = new LocationClientOption();

option.setScanSpan(1000);
//可选,设置发起定位请求的间隔,int类型,单位ms
//如果设置为0,则代表单次定位,即仅定位一次,默认为0

option.setOpenGps(true);
//可选,设置是否使用gps,默认false
//使用高精度和仅用设备两种定位模式的,参数必须设置为true

option.setCoorType("bd09ll");
//可选,设置返回经纬度坐标类型,默认GCJ02
//GCJ02:国测局坐标;
//BD09ll:百度经纬度坐标;
//BD09:百度墨卡托坐标;
//海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
    
option.setEnableSimulateGps(false);
//可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false   
 
mLocationClient.setLocOption(option);
//mLocationClient为第二步初始化过的LocationClient对象
//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明

4第四步,实现BDAbstractLocationListener接口
Android定位SDK自V7.2版本起,对外提供了Abstract类型的监听接口BDAbstractLocationListener,用于实现定位监听。原有BDLocationListener暂时保留,推荐开发者升级到Abstract类型的新监听接口使用,该接口会异步获取定位结果,核心代码如下:
public class MyLocationListener extends BDAbstractLocationListener{
    @Override
    public void onReceiveLocation(BDLocation location){
        //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
        //以下只列举部分获取位置描述信息相关的结果
        //更多结果信息获取说明,请参照类参考中BDLocation类中的说明

        double latitude = location.getLatitude();    //获取纬度信息
        double longitude = location.getLongitude();    //获取经度信息
        float radius = location.getRadius();    //获取定位精度,默认值为0.0f

        String coorType = location.getCoorType();
        //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准

        int errorCode = location.getLocType();
        // 获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明

        int strategy = location.getMockGpsStrategy();
        // 防作弊策略识别码,用于辅助分析排查问题
        
        int probability = location.getMockGpsProbability();
        // 此定位点作弊概率,3代表高概率,2代表中概率,1代表低概率,0代表概率为0

        BDLocation realLoc = location.getReallLocation();
        if (location.getMockGpsStrategy() > 0 && null != realLoc) {
            double dis = location.getDisToRealLocation();
            // 虚假位置和真实位置之间的距离
            int realLocType = realLoc.getLocType();
            // 真实定位结果类型
            String realLocTime = realLoc.getTime();
            // 真实位置定位时间
            double realLat = realLoc.getLatitude();
            // 真实纬度
            double realLng = realLoc.getLongitude();
            // 真实经度
            String realLocCoorType = realLoc.getCoorType();
            // 真实位置坐标系
        }
    }
}
5第五步,获取定位经纬度
调用LocationClient的start()方法,发起请求,在BDAbstractLocationListener接口中,便可获得。 详细信息请参考获取经纬度中第五步的介绍
示例Demo


https://mapopen-pub-androidsdk.cdn.bcebos.com/location/anti-cheating/FZBdemo2.mp4
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消