测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | 自定义 |
发布上次发布 | 2017年11月 |
由Agnieszka Kaczmarczyk,Wiktor Gworek,Grzegorz Krukiewicz-Gacek,Michal Sznajder,Mycek,Marek Syldatk,Marcin Klimek,Michal Stechly维护。
Estimote室内定位SDK可以允许基于实时信标的地图和室内定位。
我们知道,构建下一代具有上下文感知能力的手机应用不仅仅需要iBeacon™硬件。这就是我们构建了更智能的软件,它抽象出理解特定空间中接近度和位置难度的原因。
Estimote室内定位是一个高级的软件解决方案,它使得绘制任何地点变得非常容易且快速。一旦完成,您可以使用我们的SDK来实时地在自己的应用中可视化该空间内的近似位置。
室内定位创建了一个丰富的画布,可以在此基础上构建强大的新移动体验,从场所分析到接近度营销,无缝支付和个性化购物。
Estimote室内定位仅与Estimote信标一起工作。
了解更多
室内定位SDK允许通过构建器创建位置,并从位置获取位置更新。除了定位构建器之外,还有通过Estimote室内定位应用程序映射位置的选项。
映射过程很简单。首先,你需要映射形状。开始时,请绕着地点走,尽可能地靠近外围。记住将手机放在眼前以便正确映射位置。现在应用程序将建议信标数量和放置位置。将它们粘贴在墙壁上,处于胸高位置。完成过程后,再次绕着地点走一圈(再次将手机放在眼前)。在沿途的每个信标处停下来,以完成这次一次性配置过程。
YouTube上有@phillydev716制作的一个很好的视频教程,介绍了如何在您的应用程序中使用室内定位(请注意,该视频教程使用的是我们SDK的旧版本(v.1.6))。
SDK作为EstimoteIndoorSDK
在CocoaPods中可用。安装只需将以下行放入您的Podfile
中。
pod 'EstimoteIndoorSDK'
或者您可以手动添加SDK
将EstimoteIndooLocationSDK目录(包含libEstimoteIndoorLocationSDK.a、头文件和资源)拖放到Xcode项目中的项目中。确保选中了“如果需要则复制项目”复选框。
如果您在项目中尚未使用EstimoteSDK,请将EstimoteSDK框架添加到项目中。这是您的目录结构应如下所示
打开您的项目设置并转到“构建阶段”标签。在“链接到二进制库”部分中,点击"+"按钮,并添加以下由EstimoteIndoorLocationSDK需要的框架
当您已经在这个标签页上时,请双检查libEstimoteIndoorSDK.a
是否包含在“链接到二进制库”列表中。在步骤1中,当将EstimoteIndooLocationSDK目录复制到项目中时,这应该已经自动发生。如果不小心没有发生,请将项目导航器中的libEstimoteIndoorSDK.a
文件从拖放到列表中。
转到“构建设置”,找到“其他链接器标志”并添加-lc++
。另外,将启用位码
设置为NO
。
就是这样!到此为止,您的项目应该可以成功编译,您应该可以开始使用EstimoteIndoorLocationSDK了。
如果您正在编写Swift代码,还需要进行一个额外的步骤:向Swift添加Bridging头文件以暴露Objective-C头文件。
为此,首先将新文件添加到项目中——使其成为一个《头文件》,并命名为YourProjectName-Bridging-Header.h
。在此文件中,您需要导入以下EstimoteIndoorLocationSDK和EstimoteSDK头文件
#import "EILIndoorLocationManager.h"
#import "EILLocation.h"
#import "EILIndoorLocationView.h"
#import "EILLocationBuilder.h"
所有这些完成后,您的Bridging头文件可能看起来像这样
最后,在项目导航器中点击您的项目根项,并转到《构建设置》标签。确保选中所有
,然后查找《Objective-C Bridging Header》并将其设置为$(PROJECT_DIR)/YourProjectName/YourProjectName-Bridging-Header.h
。现在您可以开始了!
请注意,Estimote室内定位使用的是笛卡尔坐标系,这与iOS坐标系不同。
位置代表一个物理位置。这是一系列点构成的一个简单多边形。
位置有一个名为方向的属性,表示磁北和向量[0, 1]
的顺时针角度。以下图像为图形描述
在位置边界的线段上可以放置门、窗户等,称为线性对象。
设置新位置有两种方法。您可以使用 ESTIndoorLocationBuilder
,作为手动工具,或者使用Estimote App 并从云中获取位置。
您可以选择手动创建一个 EILLocation
。为此,可以使用 EILLocationBuilder 类。
为了构建一个新位置,您需要
位置形状由其边界点定义。例如,考虑由点 (0,0),(0,5),(5,5),(5,0) 定义的正方形,以及其相对于磁北的方向。
EILLocationBuilder *locationBuilder = [EILLocationBuilder new];
[locationBuilder setLocationBoundaryPoints:@[
[EILPoint pointWithX:0 y:0],
[EILPoint pointWithX:0 y:5],
[EILPoint pointWithX:5 y:5],
[EILPoint pointWithX:5 y:0]]];
[locationBuilder setLocationOrientation:0];
定义位置形状的点也定义了其边界段。它们按与点相同的顺序索引。在这个例子中,将会有以下4个段:[(0,0),(0,5)],[(0,5),(5,5)],[(5,5),(5,0)],[(5,0),(0,0)]。
接下来一步是将信标和门放置到位置中
[locationBuilder addBeaconIdentifiedByIdentifier:@"aabbccddeeff"
atBoundarySegmentIndex:0
inDistance:2
fromSide:EILLocationBuilderLeftSide];
使用 ESTIndoorLocationBuilder
,您也可以将信标放置在位置内部(添加带有标识符和位置的信标:添加带有标识符和位置的信标:添加带有标识符、位置和颜色的信标),这在室内位置应用中的映射工具中是不可能的。
注意,用于添加通过MAC地址识别的信标的方法现在已弃用。请使用通过标识符识别的方法。
使用 Estimote App,该过程包括以下步骤
EILLocation
实例如果您已经映射了一个位置,它将自动上传到您的 Estimote Cloud 账户。您可以在您的应用中从 Estimote Cloud 获取它(见章节:在云中管理位置)。
一旦您有了 EILLocation
的实例,您就可以开始监控并获取该位置的位置更新。
监控位置就是简单地确定用户是否目前在位置内部或外部。为了监控位置,首先您需要创建 EILIndoorLocationManager
的实例并开始监控该位置。
EILIndoorLocationManager *indoorLocationManager = [EILIndoorLocationManager new];
[indoorLocationManager startMonitoringForLocation:yourLocation];
要获取位置更新,您需要设置一个 代理
,该代理将接收更新。
indoorLocationManager.delegate = yourDelegate;
[indoorLocationManager startPositionUpdatesForLocation:yourLocation];
除了位置外,更新还提供了有关确定位置精度的信息,这些信息可以通过 EILPositionView 或 EILPositionNode 作为具有给定半径的圆形图标来可视化,其中实际的期望位置位于其中。
请注意,您只需要一个室内位置管理器来监控多个位置。然而,位置更新同时只能为一个位置提供。如果需要为新位置启用位置更新,首先需要停止位置更新
[indoorLocationManager stopPositionUpdates];
为了尽早获取室内位置状态更改和位置更新,您应该在早期启动室内位置管理器和监控室内位置。
EILIndoorLocationManager 位置更新可以通过两种不同的模式提供。这些模式在准确性、稳定性和响应性方面不同。根据模式,系统资源的使用可能有差异。
EILIndoorLocationManagerModeNormal
- EILIndoorLocationManager
的正常模式。以牺牲高系统资源使用为代价,提供最快速的定位更新。与轻量模式相比,这种模式可能稍微不稳定一些。正常模式需要指南针才能正常工作。为了获得最佳结果,用户应该手持手机,并保持纵向模式。EILIndoorLocationManagerModeLight
- EILIndoorLocationManager
的轻量模式。提供精确和稳健的定位更新。具有极低的系统资源使用率。这种模式最适合部署。这是 EILIndoorLocationManager
的默认模式。要更改模式,只需更改 EILIndoorLocationManager
对象的 mode
属性。
indoorLocationManager.mode = EILIndoorLocationManagerModeNormal;
如果位置更新正在发送,则会使位置更新有效重启并采用新模式。
如果您希望您的室内定位启用的应用在应用在后台运行时也能工作,您必须使用 EILBackgroundIndoorLocationManager
。它与 EILIndoorLocationManager
非常相似。您只需将以下代码添加到 AppDelegate.m 中:
EILBackgroundIndoorLocationManager *backgroundIndoorLocationManager = [EILBackgroundIndoorLocationManager new];
self.backgroundIndoorLocationManager = backgroundIndoorLocationManager;
为了在应用处于后台时提供定位,应用需要访问蓝牙。为此,您需要转到项目设置,找到“能力”标签,将“后台模式”设置为开启,并勾选“使用蓝牙低功耗配件”。
为了重启应用程序(如果被操作系统或用户终止),当用户进入位置时需要“始终使用”位置服务授权。
[self.backgroundIndoorLocationManager requestAlwaysAuthorization];
有关请求权限的最佳用户体验模式,请参阅以下链接:[如何请求用户允许使用位置](http://blog.estimote.com/post/144805191465/how-to-ask-users-for-permission-to-use-location)。您还需要转到项目设置,找到“能力”标签,将“后台模式”设置为开启并勾选“使用蓝牙低功耗配件”。
要获取位置更新,您需要设置一个将接收更新的 delegate
。
backgroundIndoorLocationManager.delegate = yourDelegate;
[backgroundIndoorLocationManager startPositionUpdatesForLocation:yourLocation];
要停止更新位置
[backgroundIndoorLocationManager stopPositionUpdates];
重要注意事项
startMonitoringForLocation
。要管理您的位置,可以使用允许与 Estimote 云进行通信的请求。
提供以下请求
EILRequestAddLocation
- 将新位置保存到 Estimote 云的请求EILRequestRemoveLocation
- 从 Estimote 云中删除新位置的请求EILRequestFetchLocation
- 获取由其标识符标识的位置的请求。位置必须是公开的或属于当前授权的用户EILRequestFetchPublicLocations
- 获取公共附近位置的请求EILRequestFetchLocations
- 从 Estimote 云中获取目前授权用户的位置的请求EILRequestModifyLocation
- 更改 Estimote 云中已存在的位置的请求Estimote Cloud中每个保存的位置都分配了唯一的字符串标识符,它对应于EILLocation
的identifier
属性。您可以在cloud.estimote.com上的“位置”屏幕上找到它,并且可以使用Indoor SDK与它一起使用,例如从Estimote Cloud获取存储的位置。以下是一个由标识符获取位置的示例:
EILRequestFetchLocation *request = [[EILRequestFetchLocation alloc] initWithLocationIdentifier:yourLocationIdentifier];
[request sendRequestWithCompletion:^(EILLocation *location, NSError *error) {
if (!error)
{
self.myLocation = location;
}
}];
请注意,为了使这些方法正常工作,您需要在Estimote Cloud中进行身份验证。为此,您必须首先调用- [ESTConfig setupAppID:andAppToken:]。
#import "EILIndoorLocationManager.h"
#import "ESTConfig.h"
[ESTConfig setupAppID:@"yourAppID" andAppToken:@"yourAppToken"];
您可以在Estimote Cloud的“应用”部分找到您的API App ID和API App Token。
您可以使用以下方法检查授权状态,该方法将返回一个BOOL值:
[ESTConfig isAuthorized]
要了解Estimote Indoor Location SDK最近版本中的更改内容,请参阅更新日志。