IBEACON官方文件翻譯一
Handling Boundary-Crossing Events for a Beacon Region
當用戶進入到註冊的beacon基站區域,location manager 會呼叫locationManager:didEnterRegion:作為它的回撥函式。類似的,當用戶不再處於任何已註冊過的beacon區域, location manager 會呼叫locationManager:didExitRegion: 作為它的回撥函式。注意,使用者必須穿越區域的邊緣才能觸發這些回撥。實際上,如果使用者已經在區域範圍內了, location manager 不會呼叫locationManager:didEnterRegion:方法。你可以通過實現這些委託方法來適當的提醒使用者或者展現location-specific UI。你可以通過設定beacon區域的notifyOnEntry 和notifyOnExit屬性(預設值是YES)來指定哪些穿過邊境事件(越界事件)需要通知你的app。例如,如果你只想當用戶離開某個區域範圍的時候得到通知,你可以設定該區域的notifyOnEntry值為NO。
Determining the Proximity of a Beacon Using Ranging
當用戶的裝置進入某個註冊過的beacon區域時,apps可以用CLLocationManager的startRangingBeaconsInRegion: 方法來確定該區域內的一個或多個beacon基站的相對距離,並且當距離發生變化時發出通知。(當試圖掃描某區域的beacon基站時,請務必先呼叫isRangingAvailable 方法。)對很多app來說,到beacon基站的相對距離是相當有用的。例如,某博物館在每個展位上放置了一個beacon基站,一個博物館特定的app可以根據到展位的相對位置來提供相應的資訊。location manager 呼叫locationManager:didRangeBeacons:inRegion: 作為它的回撥函式,無論是進入該區域,退出該區域,或者距離發生變化。該委託函式提供了一個元素為CLBeacon物件的陣列,代表著當前beacon範圍內掃描到的beacon基站。該陣列按裝置到基站的相對距離排序,最近的基站排列在前。你可以使用這些物件的資訊去確定使用者到各個基站的接近層度。CLBeacon物件的proximity屬性給出了一般意義上到基站的相對距離。
注:beacon掃描取決於檢測藍芽低功耗的無線電訊號的強度,並且這些訊號的精度衰減(或減少)受牆壁,門窗,以及其他物理物件影響。該訊號也受水的影響,代表人體本身也會影響這些訊號。規劃您的iBeacon部署時要注意這些因素是很重要的,因為他們會影響每個信標的proximity 值。如果需要的話,可以使用每個CLBeacon物件反饋的accuracy 和rssi 值來調整放置beacon基站的位置。
通過本節前面所述的博物館app的例子,以下程式碼展示瞭如何使用一個beacon基站的proximity屬性去確定使用者的裝置到基站的相對距離。該程式碼通過一個UI,提供了距離使用者最近的相關特定博物館展位的詳細資訊(由CLProximityNear常量定義)。
// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region {
if ([beacons count] > 0) {
CLBeacon *nearestExhibit = [beacons firstObject];
// Present the exhibit-specific UI only when
// the user is relatively close to the exhibit.
if (CLProximityNear == nearestExhibit.proximity) {
[self presentExhibitInfoWithMajorValue:nearestExhibit.major.integerValue]; }
else {
[self dismissExhibitInfo];
}
}
為了使你的應用程式顯示結果準確,請只當你的app在前臺執行時使用基站掃描。例如裝置在使用者的手裡並且裝置與基站之間只有較少障礙物。當用戶主動使用該裝置並進入基站訊號範圍時,在前臺執行也促進了更好的電池壽命管理。
注意:如果有多個基站裝置發射相同的proximityUUID,major和minor,它們可能會由於具有不同的相近度和精度而呼叫locationManager:didRangeBeacons:inRegion:方法。建議是,每個基站裝置配置唯一標識。此外,如果你掃描一臺被配置為beacon基站的iOS裝置,可能會在短時期內,locationManager:didRangeBeacons:inRegion:方法報告掃描到兩個裝置具有相同的proximityUUID,major和minor。這是因為iOS裝置的藍芽標識週期性變化暴露出來的隱私問題。基於原始藍芽識別符號的proximity 屬性會在標示符變化後2秒內變為CLProximityUnknown。在10秒內,該識別符號解決並且只反饋一個基站區域。
以上是關於監控和掃描beacon基站的翻譯,接下來會翻譯配置一個ios裝置為ibeacon基站的相關內容。