日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

iBeacon 初探

發布時間:2023/12/3 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 iBeacon 初探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iBeacon 是蘋果公司在 iOS 7 中新推出的一種近場定位技術,可以感知一個附近的 iBeacon 信標的存在。

當一個 iBeacon 兼容設備進入/退出一個 iBeacon 信標標識的區域時,iOS 和支持 iBeacon 的 app 就能得知這一信息,從而對用戶發出相應的通知。

典型的應用場景例如博物館實時推送附近展品的相關信息,商場內即時通知客戶折扣信息等。蘋果在 Apple Store 中也部署了 iBeacon 來推送優惠、活動信息。

特點

iBeacon 基于低功耗藍牙技術(Bluetooth Low Energy, BLE)這一開放標準,因此也繼承了 BLE 的一些特點。

  • 范圍廣

    相比于 NFC 的數厘米的識別范圍,iBeacon 的識別范圍可以達到數十米,并且能夠估計距離的遠近。

  • 兼容性

    iBeacon 是基于 BLE 做的一個簡單封裝,因此大部分支持 BLE 的設備都可以兼容。 例如可以使用一個普通的藍牙芯片作為信標,使用 Android 設備檢測信標的存在。

  • 低能耗

    不少 beacon 實現宣稱可以不依賴外部能源獨立運行兩年。

使用場景

我們以一個連鎖商場的例子來講解 iBeacon 的一個流程。在一個連鎖商場中,店家需要在商場中的不同地方推送不同的優惠信息,比如服裝和家居柜臺推送的消息就很有可能不同。

當消費者走進某個商場時,會掃描到一個 beacon。這個 beacon 有三個標志符,proximityUUID 是一個整個公司(所有連鎖商場)統一的值,可以用來標識這個公司,major 值用來標識特定的連鎖商場,比如消費者正在走進的商場,minor 值標識了特定的一個位置的 beacon,例如定位到消費者正在門口。

這時商場的 app 會被系統喚醒,app 可以運行一個比較短的時間。在這段時間內,app 可以根據 beacon 的屬性查詢到用戶的地理位置(通過查詢服務器或者本地數據),例如在化妝品專柜,之后就可以通過一個 local notification 推送化妝品的促銷信息。用戶可以點擊這次 local notification 來查看更詳細的信息,這樣一次促銷行為就完成了。

API

閑話少說,我們來看下 iBeacon 具體怎么使用:

Beacon 的表示

iBeacon 本質上來說是一個位置(區域)信息,所以 Apple 把 iBeacon 功能集成在了 Core Location 里面。

iBeacon 信標在 Core Location 中表現為一個 CLBeacon,它圈定的范圍則表現為 CLBeaconRegion,這是一個 CLRegion 的子類。

CLBeaconRegion 主要用三個屬性來標識一個 iBeacon,proximityUUID、majorminor

proximityUUID 是一個 NSUUID,用來標識公司,每個公司、組織使用的 iBeacon 應該擁有同樣的 proximityUUID。

major 用來識別一組相關聯的 beacon,例如在連鎖超市的場景中,每個分店的 beacon 應該擁有同樣的 major

minor 則用來區分某個特定的 beacon。

這些屬性如果不指定(即 nil),匹配的時候就會忽略這個屬性。例如只指定 proximityUUIDCLBeaconRegion 可以匹配某公司的所有 beacons。

Monitoring

Apple 在 iOS 4 中增加了地理圍欄 API,可以用來在設備進入/退出某個地理區域時獲得通知,這些 API 包括 -startMonitoringForRegion:、-locationManager:didEnterRegion:-locationManager:didExitRegion: 等。 CLBeaconRegion 作為 CLRegion 的子類也可以復用這些 API,這種檢測 iBeacon 的方式叫做 monitoring。

使用這種方法可以在程序在后臺運行時檢測 iBeacon,但是只能同時檢測 20 個 region,也不能推測設備與 beacon 的距離。

Ranging

除了使用地理圍欄 API 的方式,Apple 還在 iOS 7 中新增加了 iBeacon 專用的檢測方式,也就是 ranging。

通過 CLLocationManager-startRangingBeaconsInRegion: 方法可以開始檢測特定的 iBeacon。

當檢測到 beacon 的時候,CLLocationManager 的 delegate 方法 -locationManager:didRangeBeacons:inRegion: 會被調用,通知調用者現在被檢測到的 beacons。 這個方法會返回一個 CLBeacon 的數組,根據 CLBeaconproximity 屬性就可以判斷設備和 beacon 之間的距離。

proximity 屬性有四個可能的值,unknown、immediate、near 和 far。 另外 CLBeacon 還有 accuracyrssi 兩個屬性能提供更詳細的距離數據。

使用 iOS 設備作為 iBeacon

我們可以使用 Core Bluetooth 框架來廣播特定的 payload 來讓 iOS 設備成為一個 iBeacon。 這個 payload 可以由 CLBeaconRegion-peripheralDataWithMeasuredPower: 方法來獲取。

之后交給 CBPeripheralManager 廣播出去就可以了。

需要注意的是,廣播 iBeacon 信息的時候 app 必須在前臺運行。

行為

iBeacon 的 API 并不十分復雜,但他的行為比較難弄清楚,特別是當應用運行在后臺時,檢測到 beacon 的時間延遲會讓開發者難以推測。在做了一些實驗和合理的推測后,我們得出了一些結論:

  • 檢測到 beacon 的時間跟設備進行藍牙掃描的時間間隔有關,每當設備進行掃描的時候,就能發現 iBeacon region 的變化。
  • 在 ranging 打開的情況下,設備會每秒鐘做一次掃描,也就是說狀態更新最多延遲一秒。
  • 程序在后臺運行,并且 monitoring 打開的時候,設備可能每隔數分鐘做一次掃描。iOS 7 的響應速度較慢,iOS 7.1 有比較大的改善。
  • 如果存在設置 notifyEntryStateOnDisplay=YES 的 beacon,iOS 會在屏幕點亮的時候(鎖屏狀態下按下 home 鍵,或者因為收到推送點亮等)進行一次掃描。
  • 設備重啟并不影響 iBeacon 后臺檢測的執行。
  • iOS 7 中,在多任務界面中殺掉程序會終止 iBeacon 檢測的執行,iOS 7.1 上改變了這一行為,被殺掉的 app 還可以繼續進行 iBeacon 檢測。

參考

  • AirLocate,蘋果官方的 sample code,包含了 iBeacon 的大部分用法。
  • HiBeacons,另一個 demo。
  • iBeacon Monitoring in the Background and Foreground,實驗證實了 iBeacon 的一些行為。

總結

以上是生活随笔為你收集整理的iBeacon 初探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。