由于后台位置模式而被拒绝

时间:2014-05-27 08:19:18

标签: ios objective-c location core-location cllocationmanager

我的应用更新(1.1)因此原因被拒绝: We found that your app uses a background mode but does not include functionality that requires that mode to run persistently

但是我的应用程序仍在版本1.0中使用相同的功能。

我做什么: 在位置更新时,我检查新位置是否在特定区域(矩形)内:

- (BOOL)locationInRegion: (CLLocation *) lastLocation {
    if ((lastLocation.coordinate.latitude < self.overlayTopLeftCoordinate.latitude && lastLocation.coordinate.latitude > self.overlayBottomLeftCoordinate.latitude) &&
        (lastLocation.coordinate.longitude < self.overlayTopRightCoordinate.longitude && lastLocation.coordinate.longitude > self.overlayTopLeftCoordinate.longitude)) {
        return YES;
    }
    return NO;
}

在前景和后台模式中,如果用户在此区域,我在MKMapView上绘制一个碎屑路径。如果没有,我什么都不做。

需要背景模式 - &gt;用于位置更新的应用程序寄存器位于我的.plist

我做错了什么?

我的说明中没有这些信息:

  

继续使用在后台运行的GPS可以大大提高   减少电池寿命。

这可能是(唯一的)原因吗?

2 个答案:

答案 0 :(得分:1)

您的应用被拒绝的原因有两个。

它是: -

a)您的应用在后台时不需要位置更新。

b)您的应用无法正确处理后台位置更新

如果是后者,则需要在后台处理位置更新以及后台任务。你需要这样的东西

- (id)init {
   if (self==[super init]) {
    //Get the share model and also initialize myLocationArray
    self.shareModel = [LocationShareModel sharedModel];
    self.shareModel.myLocationArray = [[NSMutableArray alloc]init];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];
 }
 return self;
}

-(void)applicationEnterBackground{
  CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
  locationManager.delegate = self;
  locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
  locationManager.distanceFilter = kCLDistanceFilterNone;
  [locationManager startUpdatingLocation];

  //Use the BackgroundTaskManager to manage all the background Task
  self.shareModel.bgTask = [BackgroundTaskManager sharedBackgroundTaskManager];
  [self.shareModel.bgTask beginNewBackgroundTask];
}

以上只是完整解决方案的一小部分。我已经分享了一个完整的解决方案,上传到Github以及如何在iOS 7的后台持续获取位置更新的博客文章:Background Location Services not working in iOS 7

答案 1 :(得分:0)

是的,如果您未能在应用说明中添加以下警告文字,并且您启用了后台定位模式,则Apple会拒绝您的应用。

Continued use of GPS running in the background can dramatically decrease battery life.