苹果二进制文件被拒绝(2.16)

4

我的应用需要用户的当前位置,以向他显示前往谷歌地图中特定位置的方向

以下是在Web视图上显示位置的代码 -

[self.getDirectionsWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude,self.projectLatitude,self.projectLongitude]]]];

该应用程序在.plist文件中声明支持位置服务,使用 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        [locationManager requestAlwaysAuthorization];
    }
    [locationManager startUpdatingLocation];

苹果以以下原因拒绝了该应用:

2.16 详情

您的应用在 Info.plist 文件中的 UIBackgroundModes 键中声明支持位置,但仍未声明任何需要持久位置的特性。在 Info.plist 文件的 UIBackgroundModes 键中声明支持位置的应用必须具有需要持久位置的特性。

具体而言,我们注意到“路线”功能不需要持久位置信息,因为它不包括逐步导航。

如果需要帮助,请联系我们,谢谢。


1
我想他们的问题是为什么你需要在后台使用位置服务,因为你似乎只在前台使用它(对于审核团队来说)。 - Jef
使用[locationManager requestWhenInUseAuthorization]而不是[locationManager requestAlwaysAuthorization]可能会解决问题! - Jayprakash Dubey
3个回答

11

你只需从info.plist中的UIBackgroundModes键中删除位置支持即可。

当您希望在应用程序在后台运行时获取位置时,必须仅使用UIBackgroundModes来获取位置。

在您的应用程序声明中,NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription已足够。


4

基于:

  • 我的应用需要用户当前位置来向他显示特定位置在谷歌地图中的方向。
  • NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription。
  • 我们注意到,路线功能不需要持续的位置信息,因为它不包括逐步导航。

看起来他们在说明,除非应用程序实际处于活动状态,否则您不应该需要位置信息。由于位置信息用于向用户展示他们需要前往的方向,因此当您的应用程序进入前台时,您应该能够简单地调整(当然会有一些延迟)。

来自苹果文档:

UIBackgroundModes(数组 - iOS)指定应用程序提供特定的后台服务,并且必须在后台继续运行。

这些键应该被节制使用,只有提供指定服务的应用程序才能使用。如果存在在后台运行的替代方案,则应使用那些替代方案。

例如,应用程序可以使用显著位置更改接口来接收位置事件,而不是注册为后台位置应用程序。


虽然同样有可能是评论者今天早上和他们的另一半吵架了,所以做出这个决定有些反复无常 :-) 哈哈,只是开玩笑,但有时候对外人来说,他们做出的决定似乎不太一致。


1

不需要请求后台模式来获取用户的当前位置。

如果您不需要在后台使用用户的位置信息,我建议使用NSLocationWhenInUseUsageDescription。当用户看到NSLocationAlwaysUsageDescription时,他们更倾向于拒绝用户位置授权,因为他们认为这会减少设备的电池寿命。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接