【问题标题】:Getting Background Location Without using location services IOS在不使用位置服务 IOS 的情况下获取后台位置
【发布时间】:2014-01-28 12:53:18
【问题描述】:

我的应用被拒绝了,因为

我们发现您的应用使用后台模式,但不包含需要该模式持续运行的功能。此行为不符合 App Store 审核指南。

我们注意到您的应用在 Info.plist 的 UIBackgroundModes 键中声明支持位置,但不包含需要持久位置的功能。

我需要在后台跟踪用户位置,以便在用户靠近应用程序中的一张照片时发出通知。这就是我在 .plist 上使用后台模式键的原因

这就是我初始化 locationManager 的方式

_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
_locationManager.distanceFilter = 1000; // Will update evert 1 KM.
_locationManager.activityType = CLActivityTypeFitness;
_locationManager.pausesLocationUpdatesAutomatically = YES;
[_locationManager startUpdatingLocation];

我正在使用 didUpdateToLocation 在后台接收位置。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    if (_currentLocation == nil){
        self.currentLocation = newLocation;
    }else{

        if([self.currentLocation distanceFromLocation:newLocation]){
            [self getNearPicturesMethod:newLocation];
        }
    }

}

他们指出我应该使用“startMonitoringSignificantLocationChanges”,但如果我删除后台密钥(他们想要的),应用程序将不再接收位置更新,如果它在前台,它们只会在用户打开它时出现这对我不起作用。

PS。我阅读了相关问题,但似乎没有人解决此问题或提供解决方法。

【问题讨论】:

  • 你是如何测试这个的?您的应用应该在没有后台模式的情况下唤醒重大更改的位置更新,但此类事件在模拟器上可能不可靠。
  • 我只能在真实设备中创建一次行为,在模拟器中永远无法工作;有什么想法吗?
  • 也许您可以发布启动和停止重大更改位置监控的代码?此外,该应用程序将在哪些领域使用?大城市、小城市还是乡村? Wifi 网络和手机信号塔密度会影响非 GPS 定位服务的准确性。
  • 另外,(来自重大更改位置文档):“应用程序可以在设备从之前的通知移动 500 米或更多时收到通知。它的通知频率不应超过每 5 次分钟。如果设备能够从网络中检索数据,则位置管理器更有可能及时传递通知。您在使用该设备的测试中走了多远?您在每个地点等了多长时间?

标签: ios objective-c background cllocationmanager


【解决方案1】:

您的应用将在位置发生重大变化时唤醒。您不需要为此设置后台位置模式键。区域边界监测也是如此。

对于您的情况,我认为您更可能希望为最近的图片设置区域,然后等待跨越边界。

使用重大位置更改来更新最近的图片并将您的区域重置为这些。

这将按预期工作,符合 Apple 文档的指导方针,并且对用户的电池影响很小(如果有的话)。

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 2014-12-10
    • 2013-03-14
    • 2015-07-28
    • 2015-02-10
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多