【第二三天 - Flutter iBeacon 官方范例讲解(上)】

前言

因为小弟有一些专案需求需要使用到 iBeacon,因此就有深入去了解 iBeacon 套件用法。

什麽事 iBeacon 呢?

iBeacon 是一个使用低功耗蓝芽(Bluetooth Low Energy、BLE)来进行室内定位,因搭配BLE,功耗极低十分省电。可以搭配具备 iBeacon 的发射器,可以提供智慧型手机侦测到他们大概的位置及距离。实际上,iBeacon 能让手机接收到附近商品的通知或任何店家想推播的讯息。

但因低功耗的关系,iBeacon 的讯号传输距离有限,最大标准传输距离可达 70 公尺左右,且容易受到障碍物的影响,会有接受讯号程度的差异。

以下为官方 iBeacon 文件,有兴趣的话欢迎阅读!
https://developer.apple.com/ibeacon/

iBeacon 发送器

我觉得想要了解一个发送器。就必须了解什麽是区域。
一个发射器需要 3 个参数

重要参数

  • proximityUUID
    • 一个区域的识别码(For iOS 不可为 null
  • major
    • 一个区域底下的小区域的识别码 (可选)
  • minor
    • 一个区域底下的小区域的小区域的识别码 (可选) |

次要参数

  • identifier | 一个区域的识别码 |
  • TX Power
    • 功率
  • minor
    • 一个区域底下的小区域的小区域的识别码
  • AdvertisingTxPowerLevel
    • 讯号等级,预设为低
  • AdvertisingMode
    • 广告模式,预设为低

这是发送器的物件。

  BeaconBroadcast({
    this.identifier = 'com.flutterBeacon',
    required this.proximityUUID,
    required this.major,
    required this.minor,
    this.txPower,
    this.advertisingMode = AdvertisingMode.low,
    this.advertisingTxPowerLevel = AdvertisingTxPowerLevel.high,
  })

要开始监测一个 iBeacon 区域,首先得定义这个区域到系统里。需要指定 proximityUUID、major、minor(proximityUUID 是必需的,major、minor 的值是可选的)。您还必须提供一个 identifier 字串,用来当做唯一标记 Beacon 区域 , 这样您就可以在代码中引用它。注意 proximityUUID 和 identifier 是无关的。

所以说,一个区域会有一个 proximityUUID、identifier。发送器只要 proximityUUID

接收器

每个 iBeacon 发送器发出的讯号内皆带着 proximityUUID、Major、Minor,三个重要的数值。
在实际应用中,proximityUUID 可以为一整栋百货公司,Major 代表不同楼层,Minor代表不同的柜位。因此,两颗 iBeacon若有一样的 proximityUUID,不同的Major值,代表是在同一栋百货公司内,但不同楼层;若有同样的 proximityUUID、Major值,但 Minor 不同,代表的是在同一楼层,但不同的柜位。

设定一个情境,我是一个大老板,有 2 个公司。每家公司有 5 层楼,一层楼有 4 个房间。
因此,我就可以设定 2 个 region,一个 region 有 5 个 major,一个 major 有 4 个不同的 minor

RangingResult 接收到的物件样子。

RangingResult:{"region":{"identifier":"Cubeacon","proximityUUID":"CB10023F-A318-3394-4199-A8730C7C1AEC"},"beacons":[{"proximityUUID":"CB10023F-A318-3394-4199-A8730C7C1AEC","major":0,"minor":0,"rssi":-40,"accuracy":0.09,"proximity":"immediate"}]}

当 IOS 设备收到 iBeacon 信号时,会有以下的资讯。

  • proximityUUID
    • 所属地地区的识别码
  • major
    • 恩..可以看上面描述
  • minor
    • 恩..可以看上面描述
  • rssi
    • 讯号强度
  • accuracy
    • 水平精度(距离)
  • proximity
    • 发射者到接收者的距离(不是数值,是个枚举)

其实,发射者也就是硬件向四周不停地广播信号,而信号就像是水波一样像四周扩散,越靠近中心点的水波越高也就是 rssi 信号越强,而一旦有东西阻隔,信号就会减弱甚至消失,而且一旦超过一定值,信号就会消失,这说明 iBeacon 的广播范围是有限的.

Monitoring

  • MonitoringEventType
    • 事件
  • monitoringState
    • inside,outside,unknown

MonitoringEventType

  • didEnterRegion
    • 当 a 中的至少一个信标Region可见时调用。
  • didExitRegion
    • 当 aRegion 中的信标不可见时调用。
  • didDetermineStateForRegion
    • 当 a 中的至少一个信标Region可见时,使用 INSIDE 的状态值调用。当 aRegion中的信标不可见时,使用 OUTSIDE 的状态值调用。

Ibeacon 需要注意到的权限

  • 定位
  • 蓝芽

Reference


<<:  Day29-Go gRPC(下)

>>:  Day 25: Macie 简介及操作

Consistency and Consensus (3-3) - Total Order Broadcast

[Day 19] Consistency and Consensus (3-3) - Total O...

Celebs worth

The most reliable blog for celebrity Net Worth Net...

Day14:14 - 购物车服务(2) - 前端 - 购物车总商品显示、加入购物车

Përshëndetje,我是Charlie! 在Day13当中我们完成了後端的购物车总商品显示、加...

连续 30 天 玩玩看 ProtoPie - Day 13

今天延续昨天的文字输入,我们来做更多尝试。 讲者把昨天 Text > Input 做出来的 I...

广播推送 - day24

目标 从左画面将讯息推送到右边画面,嗯! 就这样。 本示例从主画面推送讯息,其他开启本网的使用者无论...