Tag: 位置

“让它比Nike +更好”-如何过滤位置(在iOS Vol.5中跟踪高精度位置)

在最后三个会话中,我们在示例代码中添加了背景跟踪引擎+地图绘制。 使用示例应用程序进行短期运行会使您感到它已经像Runtastic这样的正常运行应用程序一样工作。 但是,您可能会遇到一些应用无法正常运行的情况。 尤其是在跑步时.. 在多云的天气下 在被高楼大厦包围的小巷里 在一个有许多树木的森林或公园里 为了在这种情况下使您的应用像Nike +一样更准确地工作,您需要将应用日志设置为“仅限好位置” 。 在这篇博客文章中,我将解释如何制作各种过滤器以仅记录良好的位置。 记录准确的位置不仅可以帮助应用程序不仅在地图上绘制漂亮的路径,而且还可以从这些位置计算出准确的距离或速度。 在当前示例中,我们只是将新位置记录到didUpdateLocation回调中的locationDataArray中。 首先,我们将其替换为对filterAndAddLocation()的调用,如下所示。 左侧轨道(不带过滤器)已在标有蓝色圆圈的区域周围记录了几个不正确的位置。 正确的轨道没有不正确的位置,路径看起来更平滑。 比耐克+更好 我使用过滤器测试了示例应用程序,并将其与Nike +的性能进行了比较。 我在iPhone上同时打开了示例应用程序和Nike +,然后跑了2–3公里。 在标有蓝色圆圈的区域,我们的跟踪算法显示出更好的性能。 后来有一天,我在涩谷的街道上奔跑。 Nike +和我们的示例应用程序的跟踪路径如下。 这两个试验还不足以称为实验,但是我上面解释的过滤器似乎使我们的应用程序具有与Nike +相同甚至更好的性能。 更好的跟踪引擎 还有一些空间可以使此跟踪引擎变得更好。 如果您在iPhone放在背包里的大雨天里奔跑在森林中,则可能看不到您的应用程序跟踪任何内容。 如果您看到这种情况,则说明您的过滤条件可能太严格了。 使跟踪引擎更强大的最后几个步骤是使您的过滤器适应环境。 我不会对此做更深入的介绍,但是这里有一些提示 从平均水平精度知道条件 从位置回调之间的时间间隔了解条件 知道天气 迎接挑战,使您的引擎变得更大!

用于iOS / macOS开发的拖动手势识别器(具有初始位置)

众所周知,在计算机上使用鼠标时,按下鼠标按钮会发生拖动操作,然后移动设备,最后释放按钮。 这是连续且精确的操作。 在iOS中,我们使用了(不太精确的)触摸,但是有时我们确实希望在开始,移动以及最终结束触摸时对拖动操作做出类似的反应。 UIPanGestureRecognizer本身可以很好地识别此类拖动操作,只是当其达到开始状态时,用户已经稍微移动了触摸,并且我们不再知道初始位置-没有locationInViewWhenTouchesBegan属性-而我们需要它来准确计算坐标增量以响应拖动操作。 (以一种预期的方式,因为我们不希望在第一次触摸开始时立即开始平移操作,因为我们正在等待用户是否真正想平移或执行其他操作。) 更新:虽然这很烦人,但它也是NSPanGestureRecognizer在macOS Cocoa开发中与鼠标事件一起工作的方式,只是很难看到那里的行为。 要解决该问题,您需要开始用鼠标从元素可拖动区域的限制向该元素外部的空间拖动。 为了解决这个问题(至少在今天),我们需要自己专门化识别器类,在实际开始触摸时读取并保留视图中的位置,并改用专门化。 请注意下面的内容,我们为此目的如何定义一个初始位置视图属性。 (不过,如果要在框架之外使用它们,则需要将类和属性公开 。) 导入UIKit.UIGestureRecognizerSubclass class DraggingPanGestureRecognizer:UIPanGestureRecognizer { var locationInViewWhenDraggingStarted = CGPoint.zero 覆盖func touchesBegan(_ touches:设置,事件:UIEvent){ super.touchesBegan(touches,with:event) locationInViewWhenDragStarted =位置(在:视图中) } } 最后,这是显示如何使用新服务的客户端代码: @IBAction函数泛(_识别器:DraggingPanGestureRecognizer){ 切换识别器状态{ 案例。开始: 让点= ogniser.locationInViewWhenDraggingStarted beginDragging ( 位于 :点) 情况已更改: 让点= identifier.location(在:ognitor.view) ContinueDragging ( 到 :point) … } } 和/或,如果您需要类似的实现来进行macOS开发(例如),即从NSPanGestureRecognizer继承,这里我们再做一次(但请注意,客户端代码与上面的代码完全相同,因此在下面不再赘述): 导入AppKit类DraggingPanGestureRecognizer: NSPanGestureRecognizer { var locationInViewWhenDraggingStarted = […]

位置经理包装

位置管理器是一种包装器,可以以更简单的方式使用CLLocationManager(iOS框架使用GPS)并摆脱所有这些委托和错误处理。 位置管理器同时提供了一次性定位和实时跟踪的功能。 特征: 易于使用。 提供事先的错误处理。 根据设备电池百分比调整位置精度。 如何使用: 不要忘记添加“ NSLocationWhenInUseUsageDescription”键和“ NSLocationAlwaysAndWhenInUseUsageDescription”键到您的Info.plist文件中。 (Xcode在Info.plist编辑器中将这些键显示为“隐私-使用时位置用法说明”和“隐私-始终和使用时位置用法说明”。) 1.一次获取位置信息: let locationManager = LocationManager(withAccuracy: LMLocationAccuracy.bestForNavigation) locationManager.getCurrentLocation { (response) in switch response { case .failure(let locationError): switch locationError { case .authorizationFailed(let description): print(description) case .locationUpdationFailed(let description): print(description) } case .success(let location): print(“location is :”, location) self.lbllat.text = “\(location.coordinate.latitude)” self.lblLong.text = “\(location.coordinate.longitude)” } } 2.对于实时跟踪: […]

iOS 11定位技术的新增功能

在许多iOS应用程序中,访问用户的位置是一项重要功能。 在最近的iOS 11更新中,访问位置的方法已进行了一些更改。 让我详细介绍有关在iOS 10以及更新iOS 11之前和之后访问位置的方式的详细信息。 iOS 10及更低版本 开发人员可以使用以下方式访问位置: 1.“使用时”访问 2.“始终”访问 1.“使用时”访问 当应用程序当前处于活动状态时,开发人员将使用“使用时”访问权限。 在某些情况下,当应用程序处于后台时,该应用程序需要跟踪位置,但是“使用时”访问仍然足够。 在后一种情况下,状态栏下方会显示一个蓝色栏,表示该应用正在跟踪您的位置。 Info.plist文件中使用NSLocationWhenInUseUsageDescription键描述了为什么应用程序需要访问该位置。 在设置应用程序中,用户可以在选项“ 从不 ”和“ 使用应用程序时 ”之间进行选择。 2.“始终”访问 开发人员将“始终”访问权限用于需要跟踪您的位置的应用,即使您的应用未处于活动状态也是如此。 API就像重大更改API,它会在用户移动到特定距离时发出通知,而区域监视API会在用户移动或离开特定位置时发出通知。 Info.plist文件中使用NSLocationAlwaysUsageDescription键描述了为什么需要始终访问应用程序的原因。 在位置许可设置中,将显示“ 从不 ”和“ 始终 ”。 从iOS 11 使用上述“使用时”访问权限的那些应用程序没有重大变化。 但是根据苹果公司的报告,有21%的应用程序使用“始终”访问。 这些应用可能必须重新考虑所做的更改才能完美运行。 在开发适用于iOS 11的应用时,无论您要求的许可类型如何,都应提供NSLocationWhenInUseUsageDescription 。 如果需要“始终”访问,则应在info.plist中另外提供NSLocationAlwaysandWhenInUseUsageDescription键。 因此,从现在开始,说明应包含用户在相应模式下可以使用的功能。 注意:但是, 需要 “ NSLocationAlwaysUsageDescription ”才能支持iOS 10及以下版本的向后兼容性。 三种访问位置的方法: 1.“使用时”访问 2.“始终”访问 3.先“使用时”访问,然后再“始终”访问 1.“使用时”访问 它在iOS 11上的工作方式也与以前相同。 2.“始终”访问 现在,在这种情况下,以前会向用户提示“允许”或“不允许”。 […]

如何使用Mapkit View / Swift 4获取和显示位置

大家好,在本文中,我将告诉您如何使用iOS应用程序Swift 4的mapkit视图获取和显示位置。 首先,不要忘记“ import MapKit ” 之后,您需要将Mapkitview放入UIView并以IBOutlet的形式连接到控制器类,如下所示; @IBOutlet弱var mapKitView:MKMapView! 我们有两个不同的变量来确定位置,分别称为lat和lng。 例如,伊斯坦布尔的Lat和LNG; lat = 41.015137 lng = 28.979530 公共静态变量lat:Double = 41.015137 公共静态变量lng:Double = 28.979530 然后,您需要使用CLLocationManager在您的viewcontroller类中,定义如下。 var locationManager:CLLocationManager! 在您的视图中,您确实需要同步mapkit委托自己的类。 覆盖func viewDidLoad(){super.viewDidLoad(){ self.mapKitView.delegate =自我 } 现在,由于使用mapkit视图函数,我们必须为UIViewController类添加扩展。 扩展UIViewController:CLLocationManagerDelegate,MKMapViewDelegate { func locationManager(_管理器:CLLocationManager,didUpdateLocations位置:[CLLocation]){ 让userLocation:CLLocation = location [0]作为CLLocation 让中心= CLLocationCoordinate2D(纬度:UIViewController.lat,经度:UIViewController.lng) let region = MKCoordinateRegion(center:center,span:MKCoordinateSpan(latitudeDelta:0.01,longitudeDelta:0.01))self.mapKitView.setRegion(region,animation:true)//在用户当前位置放置图钉 让myAnnotation:MKPointAnnotation = MKPointAnnotation()myAnnotation.coordinate = CLLocationCoordinate2DMake(UIViewController.lat,UIViewController.lng); myAnnotation.title =“伊斯坦布尔位置” mapKitView.addAnnotation(myAnnotation)} […]

iOS应用中的位置权限(始终或在使用时)

定位服务一直是Apple向开发人员提供的功能最强大的框架/ API之一,因此,您可以找到我们经常使用的大多数(如果不是全部)应用中正在使用的定位服务。 核心位置框架为开发人员提供了多种跟踪用户位置的方法,今天我们将讨论两种最常见的方法-要求“使用时”和“始终”请求位置访问。 顾名思义,“使用中”授权可让您的应用在前台或活动状态下访问您的位置,而“始终”授权可让您的应用访问其位置(即使在后台)。 在不过多讨论细节的情况下,让我们谈谈如何在应用程序中请求这些权限。 根据您的要求,您必须在info.plist文件中包括以下密钥: 对于“始终”授权,包括-NSLocationAlwaysUsageDescription” 对于“使用时”授权,请包括-“ NSLocationWhenInUseUsageDescription” 这些键的值应为文本字符串,解释为什么首先需要这些权限,并且在请求权限时显示的警报中会向用户显示相同的文本字符串。 如果您未能在info.plist文件中添加适当的密钥,则不会向用户显示位置提示。 如果我的应用程序可以同时访问前台和后台位置,为什么不总是使用该选项? 就像有人正确地说的那样,强大的能力带来了巨大的责任,只有在为您的应用程序添加确定的价值时,才应请求“始终”授权。 请求“始终”授权不仅会引起隐私问题,而且在后台访问用户的位置也会影响设备的电池。 Uber最近在最近的更新中将授权从“使用时”更改为“始终”,这导致用户和技术社区的强烈反对。 优步表示,需要在后台访问位置,以改善接送服务,客户支持和安全目的。 用户唯一可用的选项是允许“始终”访问,或者在应用程序内收到以下提示,从而消除了他们作为Uber用户最喜欢该应用程序的“易用性” 。 那么,作为开发人员,我还有哪些其他选择? 如果我希望“始终”访问权限在我的应用程序中提供某些丰富功能,但同时又考虑到用户的隐私或电池使用情况,同时又为用户提供了“使用中”权限的选项,并且仍为他们提供使用权限,该怎么办?很棒的用户体验。 是否可以让您的用户在“始终”或“在使用中”授权之间进行选择? 幸运的是,您愿意! 第一步是在info.plist文件中添加“ NSLocationWhenInUseUsageDescription ”和“ NSLocationAlwaysUsageDescription ”键。 要记住的是,仅向用户显示一次授权提示,因此您应该继续询问“始终”授权: CoreLocationManager()。requestAlwaysAuthorization 如果用户为您提供了在后台访问位置的权限,您应该会感到非常高兴,但是不幸的是,如果用户不允许,您总是可以提示用户进入设备的隐私设置并将授权更改为“使用时”。 您可以使用“ UIApplicationOpenSettingsURLString”将用户直接导航到设置应用内的应用设置屏幕。 最后,作为开发人员,我们应该构建能够为用户提供丰富直观体验的应用程序,但同时也将其隐私问题放在首位,我希望Uber团队能够理解这一点!

Xcode中的位置模拟

假设您的客户在另一个国家,并且应用程序应该使用位置服务,那么唯一的方法就是模拟位置。 Apple使我们能够在应用程序中模拟位置。 该仿真对设备和仿真器均适用。 要模拟位置,请转到目标 → 编辑方案。 然后在“ 运行”方案下,选择“ 选项”选项卡。 如下图所示,应该启用“ 允许位置模拟”复选框。 然后,您可以从下拉菜单中选择默认位置。 现在,连接设备,然后构建并运行该应用程序(在模拟器中也可以相同的方式工作。)。 假设您从下拉列表中选择了印度孟买,则该应用程序实际上在印度。 调用定位方法后,CLLocationManager将返回您印度孟买的位置。 假设您要模拟位置的国家/地区不在下拉列表中,则可以使用一些在线网站创建一个.gpx文件(GPS交换格式),并将其添加到Xcode中(只是Google如何创建gpx文件) )。 您可以在上图的下拉列表底部看到“ 将GPX文件添加到项目中”选项。 要创建GPX文件,您可以转到 http://gpx-poi.com/并只需填写所需数据。 您不必添加所有与gps相关的数据。 我只希望国家代码为VN ,名称为越南。 因此,添加这两个字段→创建→下载。 注意 :也可以在xcode中创建.gpx文件。 转到文件 → newfile,然后选择gpx文件。 这只是一个包含键和值的xml文件。 只需添加名称,符号(用于国家符号)等标签即可。 xml标记示例(用于国家/地区符号): VN 将GPX文件添加到xcode,现在,您可以在列表中看到新添加的位置名称。 在您的应用程序委托应用程序中放置一个断点:didFinishLaunchingWithOptions:。 运行应用程序,并触发断点时,您将在调试区域的跳转栏中看到“定位服务”图标。 选择您的位置,然后运行该应用程序,位置服务现在将在GPX文件中的模拟位置中运行。 重要说明:在设备上模拟位置时,位置服务已被劫持,直到您在关闭位置模拟的情况下部署应用程序为止。 否则,设备中的所有应用程序实际上都将位于模拟位置。 玩得开心 。 模拟愉快! 如果您喜欢阅读这篇文章,请分享并推荐它,以便其他人可以找到💚💚💚💚💚💚!!!!

教程如何模拟iOS设备上的位置。

在编写此说明时,我是由iOS大师Andrii Rogulin指导的。 谢谢兄弟,这将有助于许多质量检查人员。 转到帐户,然后单击“下载工具”。 应该有一些重定向到App Store,以下载XCode。 等待直到安装了XCode。 运行XCode。 将您的iOS设备连接到安装了Xcode的计算机。 点击“创建一个新的Xcode项目” 选择“单视图应用” 填写“产品名称”,然后单击“下一步” 选择应在其中创建项目的位置。 最后,您应该会看到类似于此屏幕 在选项卡中,遵循:XCode->首选项->帐户->“ +”->“ Apple ID”->登录到您的帐户。 选择团队 按“>”,构建过程应开始。 在构建结束时,您的iOS设备将被重定向到空白页,您可以从中切换到地图应用程序。 要更改地图上显示的iOS设备的当前位置,请执行以下操作 3.选择其中一个位置后,地图将重新加载并显示所选位置。 现在您可以进行一些位置相关的测试。 附注:要获得更多位置,请点击此处: GPX Generator –轻松生成GPX文件! 通过单击Google Maps轻松快速地创建GPX文件! 使用生成的代码文件来模拟在您的…… gpxgenerator.com 上的行走

修改权限模式警报,以指定应用为何请求访问用户位置的原因。

准则5.1.1-法律-隐私-数据收集和存储 我们注意到您的应用请求用户同意访问其位置,但未在权限模式警报中阐明此功能的使用。 请查看附件的屏幕截图以获取详细信息。 要解决此问题,请修改权限模式警报,以指定应用为何请求访问用户位置的原因。 在构建本机应用程序时,有时我们不能仅基于UI / Data的应用程序工作,我们可能会要求它们允许您访问其位置或个人数据。 用户必须授予应用访问个人信息的权限,包括当前位置,日历,联系信息,提醒和照片。 您是否遇到过以上图像中提到的问题? 这是由于在询问运行时权限时解释不正确。 那么,如何解决此问题? 在这里,我提到了一些在短时间内修复的基本方法。 说明您的应用程序为什么需要信息(如果信息不明显)。 仅在您的应用明确需要时才请求个人数据。 为使您的应用正常运行而需要许可。 最后,正确编写说明后,问题将得到解决。 以下是有关照片,联系方式和位置许可的一些正确说明。 照片许可:应用程序想要访问您的照片库,以便上传您的个人资料照片。 未经您的许可,不会共享您的照片。 联系人权限: App希望访问您的联系人,以让您选择可以发送安全短信的朋友。 位置许可: Tootle希望使用您的当前位置在应用程序上显示它,还可以用于指示和估算您的旅行时间。 它是安全且私密的。