美文网首页
iOS 外接设备虚拟GPS心得

iOS 外接设备虚拟GPS心得

作者: 丶天空蓝丶 | 来源:发表于2019-02-26 08:47 被阅读0次

    1.改变定位用法:

           下一个app,然后购买一个配合使用的外设,将外设插在手机上,打开app,即可在app 上修改位置,也可以设置坐标进行路线规划,虚拟出行驶路径;

    2.如何禁止此类修改位置的工具

    2.1:高德地图自带方法:高德地图自带detectRiskOfFakeLocation方法,检测是否存在虚拟定位风险,默认为NO,不检测。 注意:设置为YES时,单次定位通过 AMapLocatingCompletionBlock 的error给出虚拟定位风险提示;连续定位通过 amapLocationManager:didFailWithError: 方法的error给出虚拟定位风险提示。error格式为error.domain==AMapLocationErrorDomain; error.code==AMapLocationErrorRiskOfFakeLocation; 附带的error的详细信息参考 error.localizedDescription 中的描述以及 error.userInfo 中的信息(error.userInfo.AMapLocationRiskyLocateResult 表示有虚拟风险的定位结果; error.userInfo.AMapLocationAccessoryInfo 表示外接辅助设备信息)。(但是经过实测,检测不出)

    2.2:  活动器CMMotionActivityManager: 通过CMMotionActivityManager类,当运动状态发生变化时通过startActivityUpdatesToQueue监听回调获取当前的运动状态,如果GPS位置发生改变而手机状态为静止,则可认定为手机没动,是通过外设来改变的位置,也就是通过外设来作弊。(在作弊时一直晃动手机则无法识别出来)

     使用获取运动状态使用方法: 

     self.motionActivityManager = [[CMMotionActivityManager alloc] init];

        [self.motionActivityManager startActivityUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMMotionActivity *activity)

         {

             if(activity.walking) { //走路

             }elseif(activity.running) {//跑步

             }elseif(activity.automotive) {//开车

             }elseif(activity.stationary) {//禁止

             }elseif(activity.cycling) {骑车

             }

         }];

    2.3:通过禁止app:找到要禁止使用的app Url Scheme,在自己的app的plist文件里面添加上,然后通过canOpenURL来判断手机是否安装了禁止使用的app,如果安装,提示删除后再进行操作。(只有知道要禁止的app Url Scheme 才可以禁止app)

          使用方法:

        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"app1 Url Scheme"]]) {

    //        说明安装了app1,提示删除

        }else if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"app2 Url Scheme"]]) {

    //        说明安装了app2,提示删除

        }else{

    //        说明该手机没有装要禁止使用的app,可以继续走下面流程

        }

    2.4:通过禁止外设:使用EADSessionController类,苹果不支持获取所有外设的信息,只能获取签过协议的外设信息,所以首先需要找到外设的协议,将要禁止使用的外设的协议添加到info.plist文件的Supported external accessory protocols中,然后通过EADSessionController类的connectedAccessories方法获取是否链接了要禁止使用的外设,如果监测到,则说明正在使用禁止的外设。(只有知道要禁止的外设协议才可以禁止外设)

            外设的协议是一个反向域名组成的字符串,由硬件的生产厂商定义的;这里讲一下我是如何拿到与app连接的外设协议,首先通过上面app下载链接将其ipa包下载下来,然后将ipa后缀改成zip,解压,右键选择“显示包内容”,找到info.plist文件,在plist文件下的Supported external accessory protocols值就是该外设的协议,将这个值添加到自己app的plist文件中即可。

    检测方法:

       [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];

        NSArray*array = [EAAccessoryManager sharedAccessoryManager].connectedAccessories;

    //   如果数组array不为空,说明手机使用了禁止使用的外设

        // 监听EAAccessoryDidConnectNotification通告(有硬件连接就会回调Block)

        [[NSNotificationCenter defaultCenter] addObserverForName:EAAccessoryDidConnectNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {

    //      调用这个回调着则说明该手机使用了禁止使用的外设

                                                      }];

        // 监听EAAccessoryDidConnectNotification通告(有硬件断开连接就会回调Block)

        [[NSNotificationCenter defaultCenter] addObserverForName:EAAccessoryDidDisconnectNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {

                                                      }];

    参考链接:ExternalAccessory | Apple Developer Documentation       ExternalAccessory框架     

    demo链接:EADemo

    如果有更好的方法,欢迎评论分析

    相关文章

      网友评论

          本文标题:iOS 外接设备虚拟GPS心得

          本文链接:https://www.haomeiwen.com/subject/epngyqtx.html