EstimoteSDK 5.0.0-alpha.5

EstimoteSDK 5.0.0-alpha.5

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2017年11月

由以下人员维护:Wiktor GworekMarcin KlimekGrzegorz Krukiewicz GacekJohn Cieslik-BridgenLukasz PikorFilip ChwastowskiEstimote SDKAlexander JudaPrzemyslaw BlasiakPiotr KrawiecLukasz Kostka



EstimoteSDK 5.0.0-alpha.5

  • Estimote, Inc

用于 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文件包含到您的项目中,即可开始使用。

  1. 将EstimoteSDK.framework文件拖放到您的Xcode项目中。它会自动显示在项目导航器中,并在项目设置中添加到“链接的框架和库”部分。

  2. Estimote SDK依赖于Apple的CoreLocation和CoreBluetooth框架,以及SystemConfiguration框架来处理Estimote Cloud API请求,因此您也应该将它们包含到您的项目中。当您将它们添加到项目设置中时,应该看起来如图所示。

Build Phases

  1. 这就完成了,恭喜,祝您愉快地 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近可触。

连接到设备需要以下步骤

  1. 创建ESTDeviceManager,确保您的类符合ESTDeviceManagerDelegate协议。

  2. 通过调用带有过滤器对象的 startDiscoveryWithFilter: 开始发现过程。过滤器可以是 ESTDeviceFilterLocationBeaconESTDeviceFilterNearable

  3. 方法 deviceManager:didDiscoverDevices: 提供了与过滤器匹配的设备。

  4. 确保您的类符合 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近期版本的更改,请参阅变更日志