1. 程式人生 > >IBEACON官方文件翻譯一

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。

你也可以推遲通知使用者已經進入某區域直到使用者點亮裝置的螢幕。要這麼做,只需要簡單的在註冊beacon區域時設定beacon區域的notifyEntryStateOnDisplay 值為YES並且設定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基站的相關內容。