FSQLocationBroker 1.3.3

FSQLocationBroker 1.3.3

测试测试过的
语言 Obj-CObjective C
许可 自定义
发布最新版本2018年1月

Brian DorfmanSam GrossbergEric Bueno维护。



  • Brian Dorfman、Cameron Mulhern、Adam Alix、Anoop Ranganath、Mitchell Livingston 和 Eric Bueno 撰写

应用集中化的位置管理器。

概览

FSQLocationBroker位于应用其他类和CoreLocation的CLLocationManager之间,为您提供了一个集中化管理应用位置服务的地方。代理使用一组位置订阅者来确定从系统中请求数服务的列表,并将数据适当地转发。

此仓库还包括FSQSingleLocationSubscriber类,它是一个帮助程序,用于与代理一起在只需要获取单个位置的常见情况中工作。

这两个类在其头文件(应通过Xcode的文档弹出窗口自动解析和可用)中进行了详细文档记载,但此文件包括它们特性的简要概述。

注意:此仓库包含一个测试项目,但仅用于构建测试 - 当前此仓库中不包括示例应用程序。

设置

手动安装

您也可以直接将此项目中的四个objc文件添加到项目中,无论是通过复制还是使用git子模块。

应用扩展

默认情况下,FSQLocationBroker使用UIApplication来判断您的应用是否在后台运行。如果您想在应用扩展中使用此类,则必须禁用此功能,因为UIApplication不可用(代理将始终假定您正在前台运行)。

如果您使用Carthage,只需让您的扩展使用并链接到标准版本以外的 FSQLocationBroker_AppExtension.framework

如果您使用不同的安装方法,您必须确保在构建应用扩展时定义了 FSQ_IS_APP_EXTENSION 预处理器宏。

注意:由于CoreLocation框架的版本更有限,FSQLocationBroker目前无法在watchOS 2.0应用程序中使用。

自定义子类

如果您想在自己的应用程序中使用自定义的FSQLocationBroker子类,您应该在应用程序生命周期早期设置您子类的类,在创建代理单例之前(如在应用程序委托的application:didFinishLaunchingWithOptions:中)。这将导致FSQLocationBroker的shared类方法返回您子类的一个实例而不是返回它自己。请确保您在基类上调用setSharedClass:而不是在实际子类上。

使用位置代理

要在您的类中获取位置数据,根据需要实现FSQLocationSubscriber或FSQRegionMonitoringSubscriber协议,并将您的类添加到代理的订阅者列表中。现在,您应该在您的类中开始接收位置数据。

如果您想在后台运行时获取位置,您需要添加“位置更新”后台模式权限,并将location键添加到Info.plist的“所需后台模式”(UIBackgroundModes)中。

位置订阅者

如果您的类有兴趣从代理获取位置回调,它应该实现FSQLocationSubscriber协议,然后使用addLocationSubscriber:将其添加到订阅者列表中。

您的订阅者可以使用强掩码属性locationSubscriberOptions定义它对哪些类型的位置信息感兴趣。然后,代理将根据所有订阅者所需的内容从其CLLocationManager请求正确的服务。

区域监控订阅者

如果您的类对区域监控(地理围栏)感兴趣,它应该实现FSQRegionMonitoringSubscriber协议,然后使用addRegionMonitoringSubscriber:将其添加到订阅者列表中。

您的订阅者可以定义要监控的区域列表,代理将负责从系统请求这些区域。您的订阅者还应定义一个标识符字符串,并将其包含在区域的标识符中,这样代理在应用程序重启后可以将CLLocationManager重分配的区域重新分配给您的类(有关更多信息,请参阅头文件中的文档)。

代理方法和属性

您可以通过shared方法访问位置代理的共享指针单例。如果您想在您的应用程序中使用自定义的FSQLocationBroker子类,您应该首先通过调用基FSQLocationBroker上的setSharedClass:方法设置您子类的类。这将导致基实现[FSQLocationBroker shared]转发到您指定的类的shared方法,以避免创建多个单例。

您可以使用以下方法将位置或区域监控订阅者添加到代理。

- (void)addLocationSubscriber:(NSObject<FSQLocationSubscriber> *)locationSubscriber;
- (void)removeLocationSubscriber:(NSObject<FSQLocationSubscriber> *)locationSubscriber
- (void)addRegionMonitoringSubscriber:(NSObject<FSQRegionMonitoringSubscriber> *)regionSubscriber
- (void)removeRegionMonitoringSubscriber:(NSObject<FSQRegionMonitoringSubscriber> *)regionSubscriber

然后,您可以通过locationSubscribersregionSubscribers属性获取订阅者的列表。同一个类可以同时实现这两个订阅者协议,但它必须独立地将自己添加到两个订阅者列表中。

currentLocation属性返回CLLocationManager收到的最新位置。在大多数情况下,如果只想获得单一的位置,应该使用FSQSingleLocationSubscriber,而不是直接访问此属性。

有关更详细的文档,请参阅FSQLocationBroker.h中的注释。

FSQSingleLocationSubscriber

此订阅者类可用作获取单个位置时的助手。您可以将系统请求的精度、希望从返回位置获得的最大可接受精度、位置需要多新,以及尝试获取此位置的时间长度传递进来。它会负责将自己添加到代理、寻找并返回一个可接受的位置供您使用。

有关更深入的文档,请参阅FSQSingleLocationSubscriber.h中的注释。

贡献者

这些类最初由Foursquare Labs内部使用开发。

FSQLocationBroker最初由Anoop Ranganath编写(@anoopr),并由Adam Alix(@adamalix)做出重大贡献。目前由Brian Dorfman(@bdorfman)维护。

FSQSingleLocationSubscriber最初由Brian Dorfman编写,并由他维护。