由于以下原因,Apple最近拒绝了我的应用。
以下是功能说明:
我们使用了info.plist的以下标志,因此app可以在后台运行:
1所需的背景模式:
2所需的设备功能:
其他信息: 应用程序支持iOS 5.0到iOS 8
原因:
2.16:多任务应用程序只能将后台服务用于其预期目的:VoIP,音频播放,位置,任务完成,本地通知等。 ----- 2.16 -----
我们发现您的应用使用后台模式,但不包含要求该模式持续运行的功能。此行为不符合App Store审核指南。
我们注意到您的应用在Info.plist中的UIBackgroundModes键中声明了对位置的支持,但不包含需要持久位置的功能。
在应用程序处于后台时添加需要持续使用实时位置更新的功能或从UIBackgroundModes键中删除“location”设置是合适的。如果您的应用程序不需要持久的实时位置更新,我们建议您使用重要更改位置服务或区域监控位置服务。
有关这些选项的更多信息,请参阅位置感知编程指南中的“启动重要更改位置服务”和“监控基于形状的区域”部分。
如果您选择添加使用位置背景模式的功能,请在您的应用说明中包含以下电池使用免责声明:
“继续使用GPS在后台运行会大大缩短电池寿命。”
任何人请建议我
提前致谢。
答案 0 :(得分:0)
首先,您需要从UIBackgroundModes
删除位置更新。
现在,您需要编写一些代码来处理用户进入区域时发生的情况。我写了一个非常简单的解决方案大纲,它检测用户何时进入某个区域,将该区域的中心发送到Web服务(因此它知道如何计算新区域)并监视返回的新区域。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
[self setNewFencesFromWebServiceAtCoordinates:[(CLCircularRegion *)region center] withCompletionBlock:^(NSArray *locations) {
int i = 0;
for (CLLocation * location in locations)
{
i++;
CLLocationCoordinate2D regionCenter = [location coordinate];
[manager startMonitoringForRegion:[[CLCircularRegion alloc] initWithCenter:regionCenter radius:100.0 identifier:[NSString stringWithFormat:@"location %d",i]]];
}
}];
}
- (void)setNewFencesFromWebServiceAtCoordinates:(CLLocationCoordinate2D)coordinates withCompletionBlock:(void(^)(NSArray * locations))completion
{
NSArray * newRegions;
// Write code to get the new regions from the web service and store them in an array of locations
completion(newRegions);
}