React Native Beacon 功能開發

什麼是低功耗藍芽

低功耗藍芽是藍芽 4.0 後因應物聯網(IOT)趨勢所發展出的藍芽技術,技術特點是使用很低的能源消耗點對點的傳輸少量的資料,一般用在運動追蹤裝置、智能手錶、健康追蹤、家庭自動化…等等,低功耗藍芽一般分為兩種裝置:

  1. Peripheral Device(外圍裝置): 一般為智慧型穿戴裝置
  2. Central Device(中心裝置): 一般是智慧型手機,一般為訊號的接收方

低功耗藍牙工作原理

外圍裝置在未被連接時會不斷對外廣播(Advertisements), 中心裝置在接收到廣播內容後可以自行決定要不要連接

https://res.craft.do/user/preview/267d214d-cb69-5be2-33d2-48f3d5be02b7/doc/002570EB-B204-4FB7-ADC8-4AA0228599B0/7437B4E1-64D7-4922-8B81-569C216F683E_1

What is BLE? (2020) | Bluetooth Low Energy | Learn Technology in 5 Minutes

什麼是 Beacon

利用 ble 外圍裝置的廣播特性,廣播特定格式訊息的低功耗藍芽裝置,可以讓中心裝置在聽到此種廣播訊息時執行相對應指令,ex: 推播廣告,跳出資訊彈窗等,目前市場主流的 Beacon 協議有 iBeacon(Apple), Eddystone(Google), AltBeacon(Open Source), 三者中最熱門的則是 iBeacon

Beacon 使用案例

https://res.craft.do/user/preview/267d214d-cb69-5be2-33d2-48f3d5be02b7/doc/002570EB-B204-4FB7-ADC8-4AA0228599B0/44ED414D-2431-4F69-A174-CECEE6B458BC_1

關於 iBeacon

iBeacon 為 Apple 在 2013 WWDC 上發布的 BLE 的應用技術,其將 BLE 廣播資料格式定為

https://res.craft.do/user/preview/267d214d-cb69-5be2-33d2-48f3d5be02b7/doc/002570EB-B204-4FB7-ADC8-4AA0228599B0/9FCD9237-AAD1-49E8-B90B-E12961ABC9FD_1

範例:

https://res.craft.do/user/preview/267d214d-cb69-5be2-33d2-48f3d5be02b7/doc/002570EB-B204-4FB7-ADC8-4AA0228599B0/730A1806-51EA-4887-94B3-6DC386BDB8D7_1

同一家公司使用一個UUID,依照城市不同用不同的Major value,依照商品不同用不同的Minor Value

名詞解釋

  • Region: Apple 將 beacon 信號範圍認定為一個 Geofence(虛擬的地理圍欄或區塊), 由上述的 uuid, major, minor 和 identifier (這個 region 的名稱 ex: 2 樓辦公室)來定義, 定義 uuid 和 identifier 是必填,major 和 minor 可以依照需求選填, 一個 App 最多一次同時偵測 20 個 Region
  • Ranging: 裝置在偵測與 beacon 距離的行為,只能在 App 前景使用
    • 觸發 eventName: didRangeBeacons
    • 所需權限:Location When In Use Usage
  • Monitoring: 監測手機是否進到 Region 或離開 Region,能在前景、背景、未打開 App 的情境下使用
    • 觸發 eventName: didEnterRegion, didExitRegion
    • 所需權限:Location Always Usage
    • 注意:iOS 預設背景偵測只會有幾秒的時間來處理

Android 是否也支援 iBeacon

是的,iBeacon 只是一種 BLE 廣播的資料格式,Android 可以偵測此格式的資料後,讓 App 做對應處理,目前已有 Android Library 讓 Android 可以像 iOS 一樣進行 Ranging 和 Monitoring

Android 需要地點權限來偵測 beacon, 若未開啟會掃不到

新增以下 permission 在 AndroidManifest.xml

//  old version of Android
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
// SDK 29+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

React-Native 相關的套件

react-native-beacons-manager 是維護年份相對較近的套件,但目前已經 3 年左右沒有再發布新版本,目前是使用 github 上最新的 git commit 點來做安裝

"devDependencies": {
"react-native-beacons-manager": "git://github.com/MacKentoch/react-native-beacons-manager.git#d118c87",
},

目前實測當 App 在前景時 Ranging 和 Monitoring 都能夠正常運作

參考文件與影片

藍芽

Beacon

iBeacon Apple Docs

FAQ

  • 可以改 Beacon 的 UUID 嗎?

可以,但是需要經由廠商提供的 App 或 SDK

Question reference: Stack Overflow , Apple Developer Forums

如何在 React Native 專案新增 iOS Widgets Python 檔案讀寫(File I/O)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×