当前位置: 首页 > news >正文

全球设计网站有哪些网站开发使用软件有哪些

全球设计网站有哪些,网站开发使用软件有哪些,百货商城自助下单网站,企业网站建设 租用服务器引言 在现代移动应用开发中,位置服务已经成为不可或缺的一部分。无论是地图导航、社交分享,还是基于位置的个性化推荐,位置数据都为用户提供了更加丰富和智能的体验。然而,随着用户隐私保护的不断加强,iOS对位置权限的…

引言

在现代移动应用开发中,位置服务已经成为不可或缺的一部分。无论是地图导航、社交分享,还是基于位置的个性化推荐,位置数据都为用户提供了更加丰富和智能的体验。然而,随着用户隐私保护的不断加强,iOS对位置权限的管控也变得越来越严格。这使得开发者在使用位置服务时需要更加谨慎,合理地选择合适的权限请求,确保符合隐私政策的同时提供良好的用户体验。

在本篇博客中,我们将深入探讨如何在iOS中选择合适的定位权限,并介绍如何实现一下几种常见的定位需求:

  • 如何选择合适的定位权限。
  • 如何进行单次定位获取。
  • 如何实现持续定位。
  • 如何进行逆地理编码,获取具体的地理信息。

希望通过本篇博客,能够帮助大家更好地理解iOS中的定位服务,并在实际开发中得心应手地运用它们。

权限配置

在iOS开发中所有的权限申请都需要再Info.pilst文件中进行声明,并填写描述来说明为什么你的应用要访问用户的这个权限。这些描述信息回在用户请求权限时显示给他们,帮助他们理解应用申请权限的意图,关于定位权限Info.plist文件给我们提供了很多选项,接下来我们就一一来解释一下:

1. Privacy - Location Always and When in Use Usage Description

  • 字段名称:NSLocationAlwaysAndWhenInUseUsageDescription
  • 权限用途:这个描述字段用于当你的应用需要请求“始终定位”权限时,解释为什么需要在前台和后台都访问位置权限。
  • 显示位置:当我们发起locationAlwaysAndWhenInUse的权限请求时,系统会自动展示这段描述给用户。

2. Privacy - Location Always Usage Description

  • 字段名称:NSLocationAlwaysUsageDescription
  • 权限用途:这个描述字段也用于“始终定位”权限的申请。
  • 显示位置:当应用请求locationAlways权限时,就会显示我们在该字段中设置的描述,主要用于请求后台定位权限。

3. Privacy - Locaion Default Accuracy Reduced

  • 字段名称:NSLocationDefaultAccuracyReducedUsageDescription
  • 权限用途:这个描述字段是用于减少定位精度时显示的提示,主要为了告知用户应用正在使用较低精度的定位,也就是粗略的位置信息。
  • 显示位置:当应用的权限被限定为“粗略定位”(locationAccuracyReduced)时,这个描述会被展示。用户可以选择仅允许粗略位置权限来保护隐私。

4.Privacy - Location Temporary Usage Description

  • 字段名称:NSLocationTemporaryUsageDescription
  • 权限用途:这个描述字段是用于临时的定位权限请求。例如,某些场景应用可能会请求一次性 的定位权限,或者在某些特定的操作中需要访问用户的临时权限。
  • 显示位置:当应用只需要临时使用位置是,iOS会显示此描述,通常适用于单次定位。

5. Privacy - Lcation Usage Description

  • 字段名称:NSLocationUsageDescription
  • 权限用途:这是一个比较通用的定位权限描述字段,可以用于任何请求位置权限的场景。它用于描述应用需要位置权限的基本原因,通常情况下我们会将其用在“使用期间定位”权限(locationWhenUse)。
  • 显示位置:当应用请求locationWhenUse权限时,会提示此描述。

6. Privacy - Location When in Use Usage Description

  • 字段名称:NSLocationWhenInUseUsageDescription
  • 权限用途:用于请求“使用期间定位”权限的描述字符。
  • 显示位置:当应用请求locationWhenInUse权限时,这个字段的内容会展示给用户。

这些字段的主要作用就是让用户知道引用为什么要使用对应的权限。我们需要根据应用的需要来配置Info.plist文件。

请求定位

在iOS应用中发起定位需要使用CoreLocation框架下的CLLocationManager来进行,在使用CLLocationManager的对象进行定位之前,首先我们需要确保Info.plist文件中已经创建了我们需要申请权限的描述字段。否则控制台的log会提示你需要申请对应权限。

单次定位

如果你的应用不需要在后台进行定位,那么我们可以选择NSLocationWhenInUseUsageDescription字段,在使用期间进行定位。

我们创建一个名为MWLocationHelper的类,负责定位功能。首选需要引入CoreLocation框架,并创建一个CLLocationManager的实例,设置代理及定位精度等信息:

import CoreLocationpublic class MWLocationHelper: NSObject, CLLocationManagerDelegate {....public override init() {super.init()initLocationManager()}private func initLocationManager() {locationManager = CLLocationManager()locationManager.delegate = selflocationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeterslocationManager.distanceFilter = 100}....
}

当我们需要请求应用的位置信息时,比较通用的做法顺序是:

  1. 检查用户位置权限。
  2. 请求用户位置权限。
  3. 开启定位。

首先我们来检查用户的位置权限,如果用户已经授权,那么我们可以直接进行定位请求,如果用户尚未授权位置权限,我们可以发起权限请求。但是如果用户已经拒绝了权限的申请,我们则需要使用自定义的弹窗和内容来引导用户到设置页中修改权限。

    /// 开始定位public func startLocation() {self.checkLocationPermission()}/// 检查权限private func checkLocationPermission() {let status = CLLocationManager.authorizationStatus()switch status {case .notDetermined:// 如果还没请求过权限,则请求权限locationManager.requestWhenInUseAuthorization()case .restricted, .denied:// 如果被拒绝或受限,提示用户MWToast.showToast("请打开定位服务")MWLogHelper.info("请打开定位服务1",context: "MWLocationHelper")case .authorizedAlways, .authorizedWhenInUse:// 如果已经授权,则可以开始定位locationManager.requestLocation()@unknown default:break}}

CLLocationManagerDelegate协议有三个可选方法需要我们来实现,分别是权限发生变化的回调方法,定位成功的回调方法以及定位失败的回调方法。

当权限发生变更时,系统会自定调用下面方法,在该方法里,我们可以根据权限状态进行处理,如果用户已经授权,则直接开启定位,否则提示用户授权失败或者其它业务操作:

    /// 权限public func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {switch status {case .authorizedWhenInUse, .authorizedAlways:// 授权通过,开始更新位置locationManager.requestLocation()case .denied, .restricted:// 授权失败,提示用户MWToast.showToast("请打开定位服务")MWLogHelper.info("请打开定位服务2",context: "MWLocationHelper")default:break}}

当定位成功之后,会进入另外一个代理方法,我们可以在该方法中获取用户的位置信息如经度纬度,并通过代理或者闭包将数据回调出去。

    /// CLLocationManagerDelegatepublic func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {if let location = locations.last {let latitude = location.coordinate.latitudelet longitude = location.coordinate.longitudeself.longitude = longitudeself.latitude = latitudeMWLogHelper.info("定位成功 \(longitude) \(latitude)",context: "MWLocationHelper")// 主线程回调didUpdateLocation?(longitude, latitude)reverseGeocodeLocation(location: location)}}

如果定位失败则会进入另外一个方法,在这里我们可以进行提示或者其他业务操作:

    public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {MWToast.showToast("定位失败")MWLogHelper.info("定位失败",context: "MWLocationHelper")}

持续定位

如果需要持续定位,我们需要使用startUpdatingLocation方法进行定位,也就是将locationManager.requestLocation()替换为locationManager.startUpdatingLocation()。

   /// 权限public func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {switch status {case .authorizedWhenInUse, .authorizedAlways:// 授权通过,开始更新位置locationManager.startUpdatingLocation()case .denied, .restricted:// 授权失败,提示用户MWToast.showToast("请打开定位服务")MWLogHelper.info("请打开定位服务2",context: "MWLocationHelper")default:break}}

但是需要注意,持续定位不需要时,我们需要手动停止位置更新,调用stopUpdatingLocation()方法:

    public func stopLocation() {locationManager.stopUpdatingLocation()}

逆地理编码

但是要你的应用想获取到位置的详细信息,比如具体的城市,街道等等,我们需要通过经纬度进行逆地理编码,然后将数据回调出去:

    /// 逆地理编码public func reverseGeocodeLocation(location: CLLocation) {let geocoder = CLGeocoder()geocoder.reverseGeocodeLocation(location) { placemarks, error inif let error = error {self.didFailWithError?(error)return}if let placemark = placemarks?.first {let city = placemark.localitylet cityCode = placemark.administrativeArea // 如果你有具体的城市编码需求self.city = cityself.cityCode = Int(cityCode ?? "")DispatchQueue.main.async {self.didUpdateLocation?(self.longitude ?? 0, self.latitude ?? 0)}MWLogHelper.info("逆地里编码 \(city ?? "") \(cityCode ?? "")",context: "MWLocationHelper")}}}

结语

随着iOS对隐私保护和定位权限管理的不断加强,开发者在使用位置服务时需要更加谨慎和细致。选择合适的权限类型,不仅可以保障用户隐私,也能确保应用功能的顺利运行。通过本篇博客,我们深入探讨了如何在iOS中请求和管理定位权限,如何实现单次和持续定位获取,以及如何进行逆地理编码,帮助你在实际开发中应对各种定位需求。

希望这篇文章能够为你的iOS定位开发之路提供有价值的参考。如果你有任何问题或进一步的疑问,欢迎在评论区与我们交流,我们将一起探索更多关于iOS开发的精彩内容。

http://www.yayakq.cn/news/318030/

相关文章:

  • 建设网站的重要意义怎么在网上做广告
  • 上海移动网站开发wordpress 禁止加载js
  • 温州中小企业网站制作页面设计按钮
  • 山东省住房和城乡建设挺网站西安网页设计工作室
  • 公司域名更改 网站怎么做提示民族文化网站建设的作用
  • 四川建设部网站官网长宁房产网站建设
  • 简洁中文网站模板七零三八零四温州论坛
  • 易语言怎么做视频网站推广的主要目的是什么
  • 杭州网站推广威海建设集团官方网站
  • 公司手机网站模板手机端开发工具
  • 买域名了怎么做网站代理网络阅卷
  • 制作网站数据库江油市建设局网站
  • 西安建设高端网站网群企业网站管理系统
  • jsp网站开发网上订餐系统网页设计怎样做一个网页
  • 做营销的网站建设有哪几个平台做网站
  • 网站移动终端建设广州建网站兴田德润团队
  • 济宁 网站建设wordpress模块咋编辑
  • 北京建设工程网站珠海网站建设珠海易推网
  • 有网页源码怎么做网站做课件好用的网站
  • 一流的微商城网站建设东台网站建设
  • 长沙电商网站前端开发培训机构时间安排
  • 教做面点的网站网站建设简述
  • 代运营网站建设网站的建设好处
  • linux wordpress 建站教程赣州注册公司
  • 成都双语网站开发wordpress回复评论邮件中没有连接
  • 如何建设与维护网站企业建设网站网站建设公司
  • 北京网站制作报价韩国最牛的设计网站
  • 支持wap网站的系统海南网站制作
  • 企业网站前端模板下载江苏城乡建设
  • Wordpress模板服务重庆seo网站哪家好