我的应用更新(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可以大大提高 减少电池寿命。
这可能是(唯一的)原因吗?
答案 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.