由于使用geofence的后台位置模式,iOS应用程序被拒绝
最近苹果拒绝了我的应用程序,原因如下 以下是功能说明:由于使用geofence的后台位置模式,iOS应用程序被拒绝,ios,location,geofencing,Ios,Location,Geofencing,最近苹果拒绝了我的应用程序,原因如下 以下是功能说明: 我们需要在从服务器接收的区域中跟踪用户的进入和退出 如果用户进入某个已定义的区域,我们也将调用web服务并准备新的地理围栏集。我们将此类围栏定义为重置围栏 所以这也是可能的,有一段时间应用程序处于后台模式,用户可能会进入重置围栏区域,所以我们需要调用web服务并在后台设置新围栏 我们使用了info.plist的以下标志,以便应用程序可以在后台运行: 1所需的背景模式: 应用程序从网络下载内容 应用程序注册位置更新 2所需的设备功能:
- 应用程序从网络下载内容
- 应用程序注册位置更新
- armv7
原因: 2.16:多任务应用程序只能将后台服务用于其预期用途:VoIP、音频播放、位置、任务完成、本地通知等。 -----2.16----- 我们发现您的应用程序使用后台模式,但不包括需要该模式持续运行的功能。此行为不符合应用商店审查指南 我们注意到您的应用程序在Info.plist中的UIBackgroundModes键中声明了对位置的支持,但不包括需要持久位置的功能 在应用程序处于后台时,可以添加需要持续使用实时位置更新的功能,或者从UIBackgroundModes键中删除“位置”设置。如果您的应用程序不需要持久、实时的位置更新,我们建议使用重大更改位置服务或区域监视位置服务 有关这些选项的更多信息,请参阅《位置感知编程指南》中的“启动重大更改位置服务”和“监控基于形状的区域”部分 如果您选择添加使用位置背景模式的功能,请在应用程序说明中包含以下电池使用免责声明: “继续在后台运行GPS会显著缩短电池寿命。”
任何人都可以建议我
提前感谢。首先,您需要从
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);
}
一旦用户进入某个区域,您是否需要获取其确切位置?如果没有,您只需将该区域的中心坐标发送给服务器,并要求其计算新区域。您好,Gad,您能否建议我info.plist的更改以及如何在后台模式下重置围栏。您好,Nikh,我也有同样的问题,您如何解决,我在后台使用位置服务,你能帮我看看这条线吗。如果你仍然困惑,那么请让我问一下,这样我会让你更清楚地理解。