苹果二进制被拒绝(2.16)

我的应用程序要求用户当前的位置,以显示他在谷歌地图的特定位置的方向

以下是显示网页查看位置的代码 –

[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]]]]; 

该应用程序通过使用NSLocationAlwaysUsageDescriptionNSLocation声明支持.plist中的位置当使用使用说明

 if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [locationManager requestAlwaysAuthorization]; } [locationManager startUpdatingLocation]; 

苹果以下列原因拒绝了该应用程序

2.16详情

您的应用程序在Info.plist文件的UIBackgroundModes项中声明了对位置的支持,但是仍然没有声明任何需要持久位置的function。 在Info.plist文件的UIBackgroundModes项中声明对位置的支持的应用程序必须具有需要持久位置的function。

具体而言,我们注意到,“路线”function不需要持久的位置信息,因为它不包括转弯的导航。

任何帮助将不胜感激,在此先感谢。

您只需从info.plist中的UIBackgroundModes项中移除位置支持

因为当您的应用程序处于后台时,您只需要使用UIBackgroundModes获取位置。

在你的应用程序声明NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription就足够了。

基于:

  • 我的应用程序要求用户当前的位置,以显示他在谷歌地图的特定位置的方向
  • NSLocation 始终 UsageDescription和NSLocationWhenInUseUsageDescription
  • 我们注意到“路线”function并不需要持久的位置信息,因为它不包括转弯的导航

看起来他们说你不应该需要位置信息, 除非应用程序实际上是活动的。 由于位置信息用于向用户显示他们需要进入的方向,所以当应用程序出现时,您应该可以简单地进行调整(当然有一些延迟)。

从苹果的文档 :

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

这些密钥应该谨慎使用,只能通过提供指定服务的应用程序来使用。 在后台运行的替代scheme中,应该使用替代scheme。

例如,应用程序可以使用重要的位置更改界面来接收位置事件,而不是注册为背景位置应用程序。


这就是我的分析,虽然这个评论者在上午刚刚和他们的另外一个人发生了争论,而且刚刚变得反复无常:-)但是,这只是开玩笑,但是有时候外界人士认为他们做出的决定是,我们应该说,不完全一致。

没有必要请求后台模式来请求用户的当前位置。

如果你不需要在后台使用用户的位置,我会build议使用NSLocationWhenInUseUsageDescription 。 用户在看到NSLocationAlwaysUsageDescription时更倾向于拒绝用户位置授权,因为他们认为减less设备的电池