国产精品 亚洲 无码 在线,无码 制服 丝袜 国产 另类,成年女人粗暴毛片免费观看,国产激情电影综合在线看,国产在线永久视频,疯狂添女人下部视频免费,A级毛片高清免费视频,欧美日韩精品一区二区三区不卡,亚洲欧美精品伊人久久,亚洲精品国产情侣AV在线

技術(shù)解讀

iBeacon 初探

2014年03月15日

iBeacon 是蘋(píng)果公司在 iOS 7 中新推出的一種近場(chǎng)定位技術(shù),可以感知一個(gè)附近的 iBeacon 信標(biāo)的存在。

當(dāng)一個(gè) iBeacon 兼容設(shè)備進(jìn)入/退出一個(gè) iBeacon 信標(biāo)標(biāo)識(shí)的區(qū)域時(shí),iOS 和支持 iBeacon 的 app 就能得知這一信息,從而對(duì)用戶發(fā)出相應(yīng)的通知。

典型的應(yīng)用場(chǎng)景例如博物館實(shí)時(shí)推送附近展品的相關(guān)信息,商場(chǎng)內(nèi)即時(shí)通知客戶折扣信息等。蘋(píng)果在 Apple Store 中也部署了 iBeacon 來(lái)推送優(yōu)惠、活動(dòng)信息。

特點(diǎn)

iBeacon 基于低功耗藍(lán)牙技術(shù)(Bluetooth Low Energy, BLE)這一開(kāi)放標(biāo)準(zhǔn),因此也繼承了 BLE 的一些特點(diǎn)。

  • 范圍廣

    相比于 NFC 的數(shù)厘米的識(shí)別范圍,iBeacon 的識(shí)別范圍可以達(dá)到數(shù)十米,并且能夠估計(jì)距離的遠(yuǎn)近。

  • 兼容性

    iBeacon 是基于 BLE 做的一個(gè)簡(jiǎn)單封裝,因此大部分支持 BLE 的設(shè)備都可以兼容。 例如可以使用一個(gè)普通的藍(lán)牙芯片作為信標(biāo),使用 Android 設(shè)備檢測(cè)信標(biāo)的存在。

  • 低能耗

    不少 beacon 實(shí)現(xiàn)宣稱可以不依賴外部能源獨(dú)立運(yùn)行兩年。

使用場(chǎng)景

我們以一個(gè)連鎖商場(chǎng)的例子來(lái)講解 iBeacon 的一個(gè)流程。在一個(gè)連鎖商場(chǎng)中,店家需要在商場(chǎng)中的不同地方推送不同的優(yōu)惠信息,比如服裝和家居柜臺(tái)推送的消息就很有可能不同。

當(dāng)消費(fèi)者走進(jìn)某個(gè)商場(chǎng)時(shí),會(huì)掃描到一個(gè) beacon。這個(gè) beacon 有三個(gè)標(biāo)志符,proximityUUID 是一個(gè)整個(gè)公司(所有連鎖商場(chǎng))統(tǒng)一的值,可以用來(lái)標(biāo)識(shí)這個(gè)公司,major 值用來(lái)標(biāo)識(shí)特定的連鎖商場(chǎng),比如消費(fèi)者正在走進(jìn)的商場(chǎng),minor 值標(biāo)識(shí)了特定的一個(gè)位置的 beacon,例如定位到消費(fèi)者正在門(mén)口。

這時(shí)商場(chǎng)的 app 會(huì)被系統(tǒng)喚醒,app 可以運(yùn)行一個(gè)比較短的時(shí)間。在這段時(shí)間內(nèi),app 可以根據(jù) beacon 的屬性查詢到用戶的地理位置(通過(guò)查詢服務(wù)器或者本地?cái)?shù)據(jù)),例如在化妝品專柜,之后就可以通過(guò)一個(gè) local notification 推送化妝品的促銷(xiāo)信息。用戶可以點(diǎn)擊這次 local notification 來(lái)查看更詳細(xì)的信息,這樣一次促銷(xiāo)行為就完成了。

API

閑話少說(shuō),我們來(lái)看下 iBeacon 具體怎么使用:

Beacon 的表示

iBeacon 本質(zhì)上來(lái)說(shuō)是一個(gè)位置(區(qū)域)信息,所以 Apple 把 iBeacon 功能集成在了 Core Location 里面。

iBeacon 信標(biāo)在 Core Location 中表現(xiàn)為一個(gè) CLBeacon,它圈定的范圍則表現(xiàn)為 CLBeaconRegion,這是一個(gè) CLRegion 的子類。

CLBeaconRegion 主要用三個(gè)屬性來(lái)標(biāo)識(shí)一個(gè) iBeacon,proximityUUID、major 和 minor。

proximityUUID 是一個(gè) NSUUID,用來(lái)標(biāo)識(shí)公司,每個(gè)公司、組織使用的 iBeacon 應(yīng)該擁有同樣的 proximityUUID

major 用來(lái)識(shí)別一組相關(guān)聯(lián)的 beacon,例如在連鎖超市的場(chǎng)景中,每個(gè)分店的 beacon 應(yīng)該擁有同樣的 major。

minor 則用來(lái)區(qū)分某個(gè)特定的 beacon。

這些屬性如果不指定(即 nil),匹配的時(shí)候就會(huì)忽略這個(gè)屬性。例如只指定 proximityUUID 的 CLBeaconRegion 可以匹配某公司的所有 beacons。

Monitoring

Apple 在 iOS 4 中增加了地理圍欄 API,可以用來(lái)在設(shè)備進(jìn)入/退出某個(gè)地理區(qū)域時(shí)獲得通知,這些 API 包括 -startMonitoringForRegion:-locationManager:didEnterRegion:、-locationManager:didExitRegion: 等。 CLBeaconRegion 作為 CLRegion 的子類也可以復(fù)用這些 API,這種檢測(cè) iBeacon 的方式叫做 monitoring。

使用這種方法可以在程序在后臺(tái)運(yùn)行時(shí)檢測(cè) iBeacon,但是只能同時(shí)檢測(cè) 20 個(gè) region,也不能推測(cè)設(shè)備與 beacon 的距離。

Ranging

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

通過(guò) CLLocationManager 的 -startRangingBeaconsInRegion: 方法可以開(kāi)始檢測(cè)特定的 iBeacon。

當(dāng)檢測(cè)到 beacon 的時(shí)候,CLLocationManager 的 delegate 方法 -locationManager:didRangeBeacons:inRegion: 會(huì)被調(diào)用,通知調(diào)用者現(xiàn)在被檢測(cè)到的 beacons。 這個(gè)方法會(huì)返回一個(gè) CLBeacon 的數(shù)組,根據(jù) CLBeacon 的 proximity 屬性就可以判斷設(shè)備和 beacon 之間的距離。

proximity 屬性有四個(gè)可能的值,unknown、immediate、near 和 far。 另外 CLBeacon 還有 accuracy 和 rssi 兩個(gè)屬性能提供更詳細(xì)的距離數(shù)據(jù)。

使用 iOS 設(shè)備作為 iBeacon

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

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

需要注意的是,廣播 iBeacon 信息的時(shí)候 app 必須在前臺(tái)運(yùn)行。

行為

iBeacon 的 API 并不十分復(fù)雜,但他的行為比較難弄清楚,特別是當(dāng)應(yīng)用運(yùn)行在后臺(tái)時(shí),檢測(cè)到 beacon 的時(shí)間延遲會(huì)讓開(kāi)發(fā)者難以推測(cè)。在做了一些實(shí)驗(yàn)和合理的推測(cè)后,我們得出了一些結(jié)論:

  • 檢測(cè)到 beacon 的時(shí)間跟設(shè)備進(jìn)行藍(lán)牙掃描的時(shí)間間隔有關(guān),每當(dāng)設(shè)備進(jìn)行掃描的時(shí)候,就能發(fā)現(xiàn) iBeacon region 的變化。
  • 在 ranging 打開(kāi)的情況下,設(shè)備會(huì)每秒鐘做一次掃描,也就是說(shuō)狀態(tài)更新最多延遲一秒。
  • 程序在后臺(tái)運(yùn)行,并且 monitoring 打開(kāi)的時(shí)候,設(shè)備可能每隔數(shù)分鐘做一次掃描。iOS 7 的響應(yīng)速度較慢,iOS 7.1 有比較大的改善。
  • 如果存在設(shè)置 notifyEntryStateOnDisplay=YES 的 beacon,iOS 會(huì)在屏幕點(diǎn)亮的時(shí)候(鎖屏狀態(tài)下按下 home 鍵,或者因?yàn)槭盏酵扑忘c(diǎn)亮等)進(jìn)行一次掃描。
  • 設(shè)備重啟并不影響 iBeacon 后臺(tái)檢測(cè)的執(zhí)行。
  • iOS 7 中,在多任務(wù)界面中殺掉程序會(huì)終止 iBeacon 檢測(cè)的執(zhí)行,iOS 7.1 上改變了這一行為,被殺掉的 app 還可以繼續(xù)進(jìn)行 iBeacon 檢測(cè)。

參考

Top