iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
Mobile Development

Flutter - 複製貼上到開發套件之旅系列 第 23

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

  • 分享至 

  • xImage
  •  

前言

因為小弟有一些專案需求需要使用到 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


上一篇
【第二二天 - Flutter GitHub Search 範例+RxDart+搜尋快取】
下一篇
【第二四天 - Flutter iBeacon 官方範例講解(下)】
系列文
Flutter - 複製貼上到開發套件之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言