iOS应用程序因使用背景位置模式进行地理围栏而被拒绝

时间:2014-09-23 10:39:10

标签: ios location geofencing

由于以下原因,Apple最近拒绝了我的应用。

以下是功能说明:

  1. 我们需要跟踪从服务器收到的区域中的用户进入和退出
  2. 如果用户进入某个已定义的区域,我们也会调用Web服务并准备新的地理围栏。我们将这种类型的围栏定义为重置围栏。
  3. 所以也有可能,有些时间app处于后台模式,用户可能会进入重置围栏区域,因此我们需要调用web服务并在后台设置新的围栏。
  4. 我们使用了info.plist的以下标志,因此app可以在后台运行:

    1所需的背景模式:

    • 应用程序从网络下载内容
    • 应用程序注册位置更新

    2所需的设备功能:

    • ARMv7的

    其他信息: 应用程序支持iOS 5.0到iOS 8


    原因:

    2.16:多任务应用程序只能将后台服务用于其预期目的:VoIP,音频播放,位置,任务完成,本地通知等。 ----- 2.16 -----

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

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

    在应用程序处于后台时添加需要持续使用实时位置更新的功能或从UIBackgroundModes键中删除“location”设置是合适的。如果您的应用程序不需要持久的实时位置更新,我们建议您使用重要更改位置服务或区域监控位置服务。

    有关这些选项的更多信息,请参阅位置感知编程指南中的“启动重要更改位置服务”和“监控基于形状的区域”部分。

    如果您选择添加使用位置背景模式的功能,请在您的应用说明中包含以下电池使用免责声明:

    “继续使用GPS在后台运行会大大缩短电池寿命。”


    任何人请建议我

    1. 在我的情况下,我应该使用哪些info.plist设置?
    2. 我应该在代码中检查哪些其他更改。 ?
    3. 提前致谢。

1 个答案:

答案 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);
}