Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS专用API,用于在应用程序被禁用后跟踪后台位置(如查找我的朋友)_Iphone_Ios_Core Location - Fatal编程技术网

Iphone iOS专用API,用于在应用程序被禁用后跟踪后台位置(如查找我的朋友)

Iphone iOS专用API,用于在应用程序被禁用后跟踪后台位置(如查找我的朋友),iphone,ios,core-location,Iphone,Ios,Core Location,我正试图通过Theos在查找我的朋友中伪造位置更新 到目前为止我拥有的: 当应用程序处于前台时,我能够伪造更新消息(使用Theos/Logos钩住FMFLocation类) 缺少什么: 当应用程序处于后台或死机时,当我的朋友请求我的位置时,它仍会将我的位置发送到服务器。此后台更新不会调用常规更新方法,因此我的挂钩不起作用。此外,即使应用程序被终止,它也可以响应来自网络的位置请求。我认为苹果不允许在常规应用程序中出现这种行为 我认为这只能通过一些私有API来实现。有人能给我指出正确的方向来找出它在

我正试图通过Theos在
查找我的朋友
中伪造位置更新

到目前为止我拥有的:

当应用程序处于前台时,我能够伪造更新消息(使用
Theos/Logos
钩住
FMFLocation
类)

缺少什么:

当应用程序处于后台死机时,当我的朋友请求我的位置时,它仍会将我的位置发送到服务器。此后台更新不会调用常规更新方法,因此我的挂钩不起作用。此外,即使应用程序被终止,它也可以响应来自网络的位置请求。我认为苹果不允许在常规应用程序中出现这种行为


我认为这只能通过一些私有API来实现。有人能给我指出正确的方向来找出它在后台使用的API/方法吗?

您可能需要检查
CLLocationMananger
()中的
-startMonitoringSignificantLocationChanges
方法

正如文件所述:

此方法异步启动位置事件的传递, 打过电话后马上回来。位置事件被传递到 代理的位置管理器:didUpdateLocations:方法。第一 要传递的事件通常是最近缓存的位置 事件(如果有),但在某些情况下可能是较新的事件。 获取当前位置修复可能需要额外几秒钟, 因此,请务必检查您的数据库中位置事件的时间戳 委托方法

返回当前位置修复后,接收器生成更新 仅当用户位置发生重大更改时才发生事件 检测。例如,当设备启动时,它可能会生成一个新事件 与不同的细胞塔关联。它不依赖于 用于生成事件的distanceFilter属性中的值。使命感 此方法连续多次不会自动产生结果 在正在生成的新事件中。使命感 但是,停止监视之间的重要位置更改 使新的初始事件在下次调用时发送 方法

如果您启动此服务,并且您的应用程序随后 终止后,系统会自动将应用程序重新启动到 新事件到达时的背景。在这种情况下,选项 传递给locationManager:didUpdateLocations:method的字典 您的应用程序委托包含密钥 UIApplicationLaunchActionSlocationKey,指示您的 应用程序因位置事件而启动。重新启动后, 您仍然必须配置位置管理器对象并调用此 方法继续接收位置事件。重新启动时 位置服务,当前事件将传递给您的代表 马上。此外,您所在位置的location属性 使用最近的位置对象填充管理器对象 在开始定位服务之前

除了实现 locationManager:didUpdateLocations:方法,它还应该实现 locationManager:didFailWithError:响应潜在风险的方法 错误

所以基本上你需要:

  • Info.plist
    文件中将
    location
    键设置为后台模式
  • 启动
    CLLocationMananger
  • 调用
    startMonitoringSignificantLocationChanges
  • 在您的
    AppDelegate
    上,当用户移动大约500米时,您将收到信息字典中的一个位置,并用
    uiapplicationaunchoptionslocationkey
    键入
  • 在该方法中,您可以更新服务器上的位置

    • 我想出来了!是
      aosnotifyd
      在后台发送位置

      我最终做了这样的事:

      #import <CoreLocation/CoreLocation.h>
      
      %hook AOSFindBaseServiceProvider
      -(void)sendCurrentLocation:(id)fp8 isFinished:(BOOL)fp12 forCmd:(id)fp16 withReason:(int)fp20 andAccuracyChange:(double)fp24{
          //Mess with (CLLocation *)fp8 here
          %orig(c,fp12,fp16,fp20,fp24);
      }
      %end
      
      #导入
      %钩子AOSFindBaseServiceProvider
      -(void)sendCurrentLocation:(id)fp8已完成:(BOOL)fp12 forCmd:(id)fp16,原因:(int)fp20和精度更改:(double)fp24{
      //在这里与(CLLocation*)fp8发生冲突
      %原始数据(c、fp12、fp16、fp20、fp24);
      }
      %结束
      
      实际上
      查找我的朋友
      可以根据网络请求发送位置信息,即使应用程序被关闭且未检测到任何移动,这显然不是由
      开始监视重要位置更改触发的。你有没有类似的示例项目?@Maulik我有一篇关于和github repo的博客文章: