我的应用需要用户当前位置向他显示指向Google地图中特定位置的路线
以下是在网络视图上显示位置的代码 -
[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]]]];
该应用使用 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription
宣布支持.plist中的位置if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
[locationManager requestAlwaysAuthorization];
}
[locationManager startUpdatingLocation];
Apple拒绝了该应用,原因如下
2.16详细信息
您的应用声明在UIBackgroundModes键中声明了对位置的支持 您的Info.plist文件,但仍然没有声明任何功能 需要持久的位置。声明支持位置的应用程序 Info.plist文件中的UIBackgroundModes键必须具有功能 这需要持久的位置。
具体来说,我们注意到Directions功能不需要 持久的位置信息,因为它不包括 转弯导航。
任何帮助将不胜感激,在此先感谢。
答案 0 :(得分:9)
您只需从info.plist
中的UIBackgroundModes
键中删除位置支持
因为当您的应用处于后台时想要获取位置时,您只能使用UIBackgroundModes
作为位置。
在NSLocationAlwaysUsageDescription
和NSLocationWhenInUseUsageDescription
的应用声明中就足够了。
答案 1 :(得分:4)
基于:
看起来他们说你不应该需要位置信息,除非应用程序实际上是活动的。由于位置信息用于向用户显示他们需要进入的方向,当你的应用程序脱颖而出时,应该能够简单地调整(当然有一点延迟)。
UIBackgroundModes (Array - iOS)指定应用提供特定的后台服务,并且必须允许它在后台继续运行。
这些密钥应该谨慎使用,并且只能由提供指定服务的应用程序使用。如果存在在后台运行的替代方案,则应使用这些替代方案。
例如,应用可以使用重要的位置更改界面来接收位置事件,而不是注册为后台位置应用。
这是我的分析,虽然同样可能的是,审稿人那天早上刚与其他重要人物争吵,并且只是反复无常:-) Nah,只是在开玩笑,但有时似乎外人认为这些决定我们说,他们所做的不完全一致。
答案 2 :(得分:1)
没有必要请求后台模式来请求用户的当前位置。
如果您不需要在后台使用用户的位置,我建议您使用 NSLocationWhenInUseUsageDescription 。用户在看到 NSLocationAlwaysUsageDescription 时更倾向于拒绝用户位置授权,因为他们认为减少了设备的电池