用于 Apple iOS 的 Estimote SDK
目录
重要提醒 如果您的首要目标是检测和交互您附近的 Estimote Beacon,让我们向您介绍全新的 iOS 近距传感器 SDK。
简介
我们的 SDK 提供了一系列的实用和面向客户端的功能,将节省您的时间并比以往任何时候都更容易地进行 iBeacon 开发。它完全基于苹果的 Core Location 和 Core Bluetooth 技术,并且 100% 兼容 iBeacon。
除了Estimote SDK以外,我们还包含了许多示例,以向您展示如何在实际场景中使用我们的SDK。您还应该查看我们的实用应用程序,该应用程序可以在App Store中找到。
要了解更多信息,请阅读我们网站上的API部分。您可以查看SDK文档,或访问我们的开发者门户,以获取有关iBeacon和Estimote工具的常见问题的答案。
安装
Estimote SDK 4.0作为一个框架供您使用。要设置,您只需要将单个EstimoteSDK.framework文件包含到您的项目中,即可开始使用。
-
将EstimoteSDK.framework文件拖放到您的Xcode项目中。它会自动显示在项目导航器中,并在项目设置中添加到“链接的框架和库”部分。
-
Estimote SDK依赖于Apple的CoreLocation和CoreBluetooth框架,以及SystemConfiguration框架来处理Estimote Cloud API请求,因此您也应该将它们包含到您的项目中。当您将它们添加到项目设置中时,应该看起来如图所示。
- 这就完成了,恭喜,祝您愉快地 hack 出色!
技术概述
SDK需要iOS 9+。Estimote SDK的功能分为两部分:客户端和工具。
客户端
客户端部分专门用于在公开分发的应用程序中使用Estimote Beacon或Nearables集成。它可以帮助您在应用程序中处理Apple iBeacon对象,并增加诸如过滤、范围对象限制或合并多个区域中的信标等功能。
以下是最重要的组件的描述
ESTBeaconManager
- Core Location的CLLocationManager类的一个简单包装器。它提供了API来对iBeacon设备进行范围和监控,并具有一些额外的选项,如排序或过滤。它与纯粹的CLBeacon对象一起工作。ESTSecureBeaconManager
- 专门用于与使用Estimote Secure UUID的设备一起工作的CLLocationManager包装器。类似于ESTBeaconManager,它允许您对保护性设备进行范围和监控,并估计它们的接近度。ESTNearableManager
- 处理nearables的起点。它允许您用给定的类型或标识符对贴纸进行范围和监控,类似于对iBeacon的处理方式。ESTEddystoneManager
- 与Eddystones交互的入口点。允许发现由信标广播的Eddystone数据包。ESTDeviceManager
- 使用它来获取设备传感器(如温度)在Estimote遥测数据包中的当前值。
遥测
当EstimoteTLM数据包启用时(参看ESTSettingsEstimoteTLMEnable
类),信标广播Estimote遥测数据包。它们包含由信标传感器读出的当前值。遥测数据包包括以下读数:
- 运动传感器(3轴加速度等)[接近和定位信标]
- 温度传感器 [接近和定位信标]
- 环境光线传感器 [仅定位信标]
- 磁力计传感器 [仅定位信标]
- GPIO端口 [仅定位信标]
用法
// remember to hold a strong reference to the device manager for as long as you
// want to receive the telemetry notifications
// e.g., make it a class property, and not a local variable, so that it won't get
// prematurely deallocated
let deviceManager = ESTDeviceManager()
// ...
let temperatureNotification = ESTTelemetryNotificationTemperature { (temperature) in
print("Current temperature: \(temperature.temperatureInCelsius) C")
}
deviceManager.registerForTelemetryNotification(temperatureNotification)
请务必查看SDK参考中的其他ESTTelemetryNotification
类(例如,ESTTelemetryNotificationMotion
)
实用工具
实用工具是为了支持管理Estimote信标和近可触的应用的。它提供信标连接和配置方法,您可以通过它轻松更改如接近UUID、主ID、副ID、功率模式等设置。它还允许您轻松执行通过空中的固件更新。它主要与Core Bluetooth框架合作。
在SDK 4中连接到设备
连接到设备可以让您更改其设置(广播功率、广告间隔等)。您必须是Estimote云中的信标所有者;尝试连接到未链接到您的Estimote账户的设备将失败。
连接数据包由ESTDeviceConnectable
子类表示
ESTDeviceLocationBeacon
代表Estimote定位信标(硬件版本"F")和下一代接近信标(硬件版本"G")……是的,我们知道使用ESTDeviceLocationBeacon
来连接您的下一代接近信标有点奇怪,但是您必须在这一点上相信我们^_^ESTDeviceNearable
代表Estimote近可触。
连接到设备需要以下步骤
-
创建
ESTDeviceManager
,确保您的类符合ESTDeviceManagerDelegate
协议。 -
通过调用带有过滤器对象的
startDiscoveryWithFilter:
开始发现过程。过滤器可以是ESTDeviceFilterLocationBeacon
或ESTDeviceFilterNearable
。 -
方法
deviceManager:didDiscoverDevices:
提供了与过滤器匹配的设备。 -
确保您的类符合
ESTDeviceConnectableDelegate
协议,并在发现的ESTDeviceConnectable
对象上调用connect
。现在,SDK 会验证设备是否通过 AppID + AppToken 对指定了账户,授权用户,在蓝牙级别上进行连接,并且在从云中获取值并将它们写入设备的同时同步设置。
为了连接第一代 Estimote Proximity Beacon(硬件版本 "D"),请使用 SDK 3 API。
设置
在 4.0 SDK 中,每个设备设置都由一个 ESTSettingBase
子类表示。读取/写入设置有两种方式 - 便利 API 和 高级 API。
这些类是基本类型(包括基本数据类型和对象)的包装,例如 无符号整数
或 NSString
。
ESTSetting*
类封装提供验证的值。ESTBeaconOperation*
类指定用于将设置读取/写入到设备的详细信息。
便利 API
要简单地更改设备设置,您可以使用 便利 API 树。每个设备都有一个,以下是一个 ESTDeviceLocationBeacon
设置树的示例
device
|- settings
|- iBeacon
|- proximityUUID
|- major
|- minor
...
|- estimote
|- enable
|- power
...
|- deviceInfo
|- color
|- name
...
...
要读取/写入设备设置值,请在树的叶子节点上调用 readValueWithCompletion:
或 writeValue:completion:
方法。
使用示例
我有一个 Estimote 位置信标,我想开启 iBeacon 数据包,将其 Major 值更改为 500,并读取其接近 UUID。
[device.settings.iBeacon.enable writeValue:YES completion:^(ESTSettingIBeaconEnable *enableSetting, NSError *error) {
NSLog(@"iBeacon packet enabled");
}];
[device.settings.iBeacon.major writeValue:500 completion:^(ESTSettingIBeaconMajor *majorSetting, NSError *error) {
NSLog(@"Major set to 500");
}];
[device.settings.iBeacon.proximityUUID readValueWithCompletion:^(ESTSettingIBeaconProximityUUID *uuidSetting, NSError *error) {
NSLog(@"Proximity UUID is %@", [uuidSetting getValue]);
}];
高级 API
为了同时快速处理多个设置,您可以使用 高级 API。每个设置都有其设置的类和操作类的对应关系。
- 设置类是
ESTSettingBase
的子类,并且它们的名称是通过连接ESTSetting
+ 指定组名 + 指定短名称(例如 ESTSettingIBeaconMajor)构成的。它们是设置值的包装(包括基本数据类型和对象类型),同时也提供值验证。 - 操作类是
ESTSettingOperation
的子类,并且它们的名称是通过连接ESTBeaconOperation
(如果是存储在设备内存中的设置,例如 iBeacon 大小)或ESTCloudOperation
(如果是仅存储在云中的设置,例如设备信息名称)+ 指定组名 + 指定短名称(例如 ESTBeaconOperationIBeaconMajor 或 ESTCloudOperationDeviceInfoName)构成的。
使用示例
我有一个Estimote位置信标,我想打开iBeacon数据包,将其Major值更改为200,读取其Proximity UUID,执行许多其他操作,并且想尽可能快地完成这些操作。
ESTSettingIBeaconEnable *enableSetting = [[ESTSettingIBeaconEnable alloc] initWithValue:YES];
ESTBeaconOperationIBeaconEnable *enableOperation = [ESTBeaconOperationIBeaconEnable writeOperationWithSetting:enableSetting completion:^(ESTSettingIBeaconEnable *setting, NSError *error)
NSLog(@"iBeacon packet enabled");
}];
unsigned short major = 200;
ESTSettingIBeaconMajor *majorSetting = [[ESTSettingIBeaconMajor alloc] initWithValue:major];
ESTBeaconOperationIBeaconMajor *majorOperation = [ESTBeaconOperationIBeaconMajor writeOperationWithSetting:majorSetting completion:^(ESTSettingIBeaconMajor *setting, NSError *error) {
NSLog(@"Major set to 200");
}];
ESTBeaconOperationIBeaconProximityUUID *uuidOperation = [ESTBeaconOperationIBeaconProximityUUID readValueWithCompletion:^(ESTSettingIBeaconProximityUUID *setting, NSError *error) {
NSLog(@"Proximity UUID is %@", [uuidSetting getValue]);
}];
...
[device.settings performOperations:enableOperation, majorOperation, uuidOperation, ..., nil];
批量更新器
要对表示为ESTDeviceLocationBeacon
类的设备执行批量更新操作,您应使用ESTLocationBeaconBulkUpdater
类。与ESTBulkUpdater
不同的是,它不是设计为单例使用的。ESTLocationBeaconBulkUpdater
需要一个ESTLocationBeaconBulkUpdaterConfiguration
对象数组来启动。ESTLocationBeaconBulkUpdaterConfiguration
包括要修改设置的设备标识符和描述在强API部分的ESTSettingOperation
数组。所有批量更新事件都将传递到分配为其代理的对象,该对象应遵守ESTLocationBeaconBulkUpdaterDelegate
协议。
使用示例
我有一组我的位置信标的标识符,这些信标应该打开iBeacon数据包,并将其major值设置为200。
NSMutableArray *bulkUpdateConfigurations = [NSMutableArray new];
NSArray *identifiers = @[@"identifier1", @"identifier2", @"identifier3"];
for (NSString *identifier in identifiers) {
ESTSettingIBeaconEnable *enableSetting = [[ESTSettingIBeaconEnable alloc] initWithValue:YES];
ESTBeaconOperationIBeaconEnable *enableOperation = [ESTBeaconOperationIBeaconEnable writeOperationWithSetting:enableSetting completion:^(ESTSettingIBeaconEnable *iBeaconEnableSetting, NSError *error) {
}];
unsigned short major = 200;
ESTSettingIBeaconMajor *majorSetting = [[ESTSettingIBeaconMajor alloc] initWithValue:major];
ESTBeaconOperationIBeaconMajor *majorOperation = [ESTBeaconOperationIBeaconMajor writeOperationWithSetting:majorSetting completion:^(ESTSettingIBeaconMajor *major, NSError *error) {
}];
ESTLocationBeaconBulkUpdateConfiguration *configuration = [[ESTLocationBeaconBulkUpdateConfiguration alloc] initWithDeviceIdentifier:identifier settingsOperations:@[enableOperation, majorOperation]];
[bulkUpdateConfigurations addObject:configuration];
}
[self.bulkUpdater startWithUpdateConfigurations:[NSArray arrayWithArray:bulkUpdateConfigurations]];
变更日志
要查看Estimote SDK近期版本的更改,请参阅变更日志。