2014年1月28日 星期二

iOS 7 的 iBeacon 接收端

在 iBeacon 接收端,主要有 CLLocationManager、CLLocationManagerDelegate 及 CLBeaconRegion 三個類別執行工作。

CLBeaconRegion 用來表示「和某個應用程式批配的某個範圍」。由於一個範圍內可能有多個不同的接收端要收到不同的訊息,或是同一個接收端要在不同的範圍內接受同一個訊息,所以才需要把範圍和應用程式同時批配。用以識別範圍的方式是使用 NSUUID 物件,而識別應用程式則是以 identifier 作為區分。

region = [[CLBeaconRegion alloc]
                       initWithProximityUUID:@“UUID的值”
                       identifier:@“應用程式的識別字”];
region.notifyOnEntry = YES;  //當進入指定範圍時通知
region.notifyOnExit = YES;   //當離開指定範圍時通知
region.notifyEntryStateOnDisplay = NO;


CLLocationManager 是實際進行偵測的類別,它接受 CLBeaconRegion 的實體,在指定的範圍及應用程式識別的狀況下,接收者來自發送端送來的訊息。

manager = [CLLocationManager new];
[manager startMonitoringForRegion: region];
[manager startRangingBeaconsInRegion: region];


CLLocationManagerDelegate 定義了給 CLLocationManager 物件呼叫的種種 call-back 函式,這樣當 CLLocationManager 偵測到什麼之後,就透過送訊息給這些函式讓應用程式可能針對不同的狀況、資訊進行判斷、執行自身行為。

以下僅取幾個方法為例:

- (void)locationManager:(CLLocationManager *)manager
         didEnterRegion:(CLRegion *)region
{
    //進入範圍時通知
}

- (void)locationManager:(CLLocationManager *)manager
          didExitRegion:(CLRegion *)region
{
    //離開範圍時通知
}

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons
               inRegion:(CLBeaconRegion *)region
{
    // 在範圍內時會不斷被呼叫。
    // 從 beacons 參數中可以取得 CLBeacon 物件,可以從該中取得鄰近數值 (proximity) 、準確性數值 (accuracy),以及 RSSI 等數值。
}

沒有留言:

張貼留言