iOS8中的定位服务

My app that worked fine in iOS 7 doesn‘t work with the iOS 8 SDK.

CLLocationManager doesn‘t return a location, and I don‘t see my app under Settings > Location Services either. I did a Google search on the issue but nothing came up, what could be wrong?

我的应用在iOS7上运行得好好的,但是到了iOS8上就出问题了.

在iOS8中,CLLocationManager并没有返回一个地址,而且,我也没有在Settings>Location Services中找到该服务,在Google上也没查到类似的问题,请问到底哪里出问题了?

I ended up solving my own problem.

Apparently in iOS 8 SDK, requestAlwaysAuthorization (for background location) or requestWhenInUseAuthorization (location only when foreground) call on CLLocationManager is needed before starting location updates.

There also needs to be NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription key in Info.plist with a message to be displayed in the prompt. Adding these solved my problem.

Hope it helps someone else.

最后我解决了这个问题.

在iOS8的sdk中,你需要额外的requestAlwaysAuthorization(用作后台定位)以及requestWhenInUseAuthorization(用作前台定位),在调用CLLocationManager更新地址之前你都需要调用上述两个方法.你还需要在Info.plist文件中额外的添加NSLocationAlwaysUsageDescription以及NSLocationWhenInUseUsageDescription,这么做了之后才解决了我的问题.

According to the Apple docs:

https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/requestWhenInUseAuthorization

As of iOS 8, the presence of a NSLocationWhenInUseUsageDescription or a NSLocationAlwaysUsageDescription key value in your app‘s Info.plist file is required. It‘s then also necessary to request permission from the user prior to registering for location updates, either by calling [self.myLocationManager requestWhenInUseAuthorization] or [self.myLocationManager requestAlwaysAuthorization] depending on your need. The string you entered into the Info.plist will then be displayed in the ensuing dialog.

If the user grants permission, it‘s business as usual. If they deny permission, then the delegate is not informed of location updates.

根据苹果的官方文档:

https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/requestWhenInUseAuthorization

在iOS8上,你需要在你的plist文件中添加新的键值NSLocationWhenInUseUsageDescription或者NSLocationAlwaysUsageDescription.然后,每次定位的时候你都需要获取用户的授权信息,通过调用[self.myLocationManager requestWhenInUseAuthorization] 或者[self.myLocationManager requestAlwaysAuthorization],至于调用哪一个,这就根据你自己的需求了.那个你添加进plist文件中的键值信息会在确认的信息中有提示.

如果用户允许你定位,你可以像往常那样子使用定位功能.如果他们拒绝了,那么,这个定位的更新更能永远也不会被执行.

时间: 2024-10-12 15:35:24

iOS8中的定位服务的相关文章

iOS开发手记-iOS8中使用定位服务解决方案

问题描述: 在iOS8之前,app第一次开始定位服务时,系统会弹出一个提示框来让用户选择是否允许使用定位信息.但iOS8后,app将不会出现这个弹窗.第一次运行之后,在设置->隐私->定位服务中,你的app没有任何设置,既不是“永不”,也不是“始终”. 代码如下: #import "XYZFirstViewController.h" @interface XYZFirstViewController () - (IBAction)LocateButtonClick:(id)

iOS8 程序 系统设置-定位服务-崩溃问题

关于iOS8的定位问题这里我就不详细说了,只针对我遇到的问题来说明一下,不过也不用担心,我会为你推荐一篇文章. iOS8 系统定位问题:传送门 好了,下面开始说我遇到的问题, 经过一番调试,iOS8已经可以定位成功,但是我遇到了一个比较奇怪的问题. 在系统设置-->隐私-->定位服务中,点击其中自己的程序进行设置,然后系统设置就会直接崩溃. 然后我就参照上一篇文章进行对比,最后发现了一个可疑的地方. 正常情况下在 项目info.plist中 添加的两个字段是string类型的. 但是我设置的却

iOS8 无法设置定位服务

针对iOS8系统,需要在plist文件中添加这两个参数 NSLocationAlwaysUsageDescription = YES NSLocationWhenInUseUsageDescription = YES

iOS开发 定位服务与地图

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

定位服务

前言: 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边:类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.在产品研发中有两个专业术语需要大家知道:一是LBS(Location Based Service)基于定位的服务,二是So

安卓中实现定位功能

大家好,今天我们讲一下比较热门的定位服务,闲话少叙直奔主题.因为是使用高德地图所以首先咱们就得先在高德开发平台上注册一个账号,具体注册流程在这里就不一一赘诉了,下面就讲一下再注册成功之后如何申请key,要申请key就得需要发布版NAS1码与测试版NAS1码以及工程的包地址,下面就讲一下如何获取NAS1码. 第一步:申请NAS1 1.若是想获得发布版的NAS1码,就得先把你的工程打包,打包成功后你就会获得一个以.jsk为后缀名的文件,打包的时候你会设置一个密码,一会用到这个文件的储存路径以及你设置

iOS开发-定位服务和地理围栏

一.获得用户的位置使用CoreLocation框架.1.如果你的应用基于位置来正确运行,你应该在你的Info.plist中包括UIRequiredDeviceCapabilities键.App Store使用这个信息来阻止没有定位的设备下载该应用.UIRequiredDeviceCapabilities键对应一个字符串数组,包括:1)location-services字符串--如果你请求一般的定位服务2)gps--如果你请求GPS级的精度如果你的应用需要定位,但是没有定位也能正常运行,就不要包含

iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)

最近在写一个LBS的项目的时候,因为考虑到适配iOS8,就将项目迁移到Xcode6.0.1上,出现了不能正常获取定位服务权限的问题. self.manger = [[CLLocationManager alloc]init]; self.manger.distanceFilter = kCLDistanceFilterNone; // meters self.manger.delegate = self; [self.manger requestAlwaysAuthorization]; sel

在iOS8下使用CLLocationManager定位服务需要系统授权

最近在ios8.0使用CLLocationManager定位服务,发现老不能定位,查看设置菜单中的项也是处于未知状态.想起之前都有一个弹出框提示用户是否允许定位,这次一直没有出现了.原来ios8.0下的定位服务需要申请授权了. 具体代码如下: 1 if ([CLLocationManager locationServicesEnabled]) { 2 3 self.locationManager = [[CLLocationManager alloc] init]; 4 5 _locationM