iOS8的定位和推送的访问都发生了变化,
下面是iOS7和iOS8申请定位权限时的不同:
iOS7:
?
?
iOS8:
?
我们知道苹果在iOS8上对定位进行了大幅度优化,可以支持室内定位,常去地点统计,楼层等。但是在iOS8上currentLocation是空的,导致定位失败了。
高德也定位失败(原因可能是未对iOS8做适配),或者不会调用到定位之后的delegate方法中,然后我查看了一下手机上对应用的定位权限界面,发现我的应用的访问用户的地理位置的权限是空的,之后查了相关信息,得到以下解决方案:
1.在AppDelegate中或者其它设置CLLocationManager的控制器中:
声明
@property(nonatomic,strong)CLLocationManager*locationManager;
实现中添加如下代码
[UIApplicationsharedApplication].idleTimerDisabled=TRUE;
???self.locationManager= [[CLLocationManageralloc]init];
???self.locationManager.delegate=self;
???self.locationManager.desiredAccuracy=kCLLocationAccuracyBest;
???if(IS_IOS8){
[???self.locationManagerrequestAlwaysAuthorization];
???//NSLocationAlwaysUsageDescription
??? [self.locationManagerrequestWhenInUseAuthorization];
???//NSLocationWhenInUseDescription
}
??? [self.locationManagerstartUpdatingLocation];
在AppDelegate是这样设置的:
@interface AppDelegate()<CLLocationManagerDelegate>
{
??? UINavigationController *_navController;
??? CLLocationManager????? *_locationmanager;
}
?
@end
?
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
??? [UIApplication sharedApplication].idleTimerDisabled = TRUE;
???
??? _locationmanager = [[CLLocationManager alloc] init];
??? [_locationmanager requestAlwaysAuthorization];??????? //NSLocationAlwaysUsageDescription
??? [_locationmanager requestWhenInUseAuthorization];???? //NSLocationWhenInUseDescription
??? _locationmanager.delegate = self;
}
2.并需要plist文件中进行设置:
设置方法:
?在 info.plist里加入:
??? NSLocationWhenInUseDescription,允许在前台获取GPS的描述
??? NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述
? 如下图:
?
添加以上内容之后即可以进行定位服务,下面的一些问题#解决方案#也是如此:
- iOS8 高德地图SDK MAMapView无法定位的问题(http://blog.csdn.net/johnzhjfly/article/details/39497751)
- iOS8 百度地图SDK MAMapView无法定位的问题
- iOS8 Location not?accessible
- iOS8 MKMapView 代理无效问题
- Access the user‘s location on Today Extension?
另外这是iOS8申请push权限也变了,其api也变了
?
请注意,在此不做赘述.
?
?