Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于使用geofence的后台位置模式,iOS应用程序被拒绝_Ios_Location_Geofencing - Fatal编程技术网

由于使用geofence的后台位置模式,iOS应用程序被拒绝

由于使用geofence的后台位置模式,iOS应用程序被拒绝,ios,location,geofencing,Ios,Location,Geofencing,最近苹果拒绝了我的应用程序,原因如下 以下是功能说明: 我们需要在从服务器接收的区域中跟踪用户的进入和退出 如果用户进入某个已定义的区域,我们也将调用web服务并准备新的地理围栏集。我们将此类围栏定义为重置围栏 所以这也是可能的,有一段时间应用程序处于后台模式,用户可能会进入重置围栏区域,所以我们需要调用web服务并在后台设置新围栏 我们使用了info.plist的以下标志,以便应用程序可以在后台运行: 1所需的背景模式: 应用程序从网络下载内容 应用程序注册位置更新 2所需的设备功能:

最近苹果拒绝了我的应用程序,原因如下

以下是功能说明:

  • 我们需要在从服务器接收的区域中跟踪用户的进入和退出
  • 如果用户进入某个已定义的区域,我们也将调用web服务并准备新的地理围栏集。我们将此类围栏定义为重置围栏
  • 所以这也是可能的,有一段时间应用程序处于后台模式,用户可能会进入重置围栏区域,所以我们需要调用web服务并在后台设置新围栏
  • 我们使用了info.plist的以下标志,以便应用程序可以在后台运行:

    1所需的背景模式:

    • 应用程序从网络下载内容
    • 应用程序注册位置更新
    2所需的设备功能:

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


    原因:

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

    我们发现您的应用程序使用后台模式,但不包括需要该模式持续运行的功能。此行为不符合应用商店审查指南

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

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

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

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

    “继续在后台运行GPS会显著缩短电池寿命。”


    任何人都可以建议我

  • 在我的情况下,我应该使用什么info.plist设置
  • 我应该在代码中签入哪些其他更改
    提前感谢。

    首先,您需要从
    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,我也有同样的问题,您如何解决,我在后台使用位置服务,你能帮我看看这条线吗。如果你仍然困惑,那么请让我问一下,这样我会让你更清楚地理解。