欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在IOS中使用IBeacon

 更新時(shí)間:2021年04月13日 14:49:44   作者:iOS雪碧  
這篇文章主要介紹了如何在IOS中使用IBeacon,想了解IBeacon的同學(xué),一定要看一下

什么是iBeacon?

iBeacon 是蘋(píng)果公司2013年9月發(fā)布的移動(dòng)設(shè)備用OS(iOS7)上配備的新功能。其工作方式是,配備有低功耗藍(lán)牙(BLE)通信功能的設(shè)備使用BLE技術(shù)向周?chē)l(fā)送自己特有的 ID,接收到該 ID 的應(yīng)用軟件會(huì)根據(jù)該 ID 采取一些行動(dòng)。

從個(gè)人的角度看: iBeacon向四面八方不停地廣播信號(hào),就像是往平靜的水面上扔了一塊石子,泛起層層漣漪(俗稱(chēng)水波),波峰相當(dāng)于 iBeacon 的RSSI(接受信號(hào)強(qiáng)度指示),越靠近中心點(diǎn)的地方波峰越高(RSSI 越大),這個(gè)波峰的大小(RSSI 的值)受到扔石子時(shí)用力大小(發(fā)射功率)和水質(zhì)(周?chē)h(huán)境因子)的影響,離中心點(diǎn)越遠(yuǎn)水波越趨向于平靜,超過(guò)了一定值,水波會(huì)消失于無(wú)形,也就是說(shuō) iBeacon 向外廣播的距離是有范圍的,超過(guò)了這個(gè)范圍,將接受不到 iBeacon 的信號(hào)。

從iOS開(kāi)發(fā)者的角度看: iBeacon 在 CoreLocation 框架中抽象為CLBeacon類(lèi), 該類(lèi)有6個(gè)屬性,分別是:

  • 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。
  • proximity,遠(yuǎn)近范圍的,一個(gè)枚舉值。
  • typedef NS_ENUM(NSInteger, CLProximity) {
    	CLProximityUnknown,// 無(wú)效
    	CLProximityImmediate,//在幾厘米內(nèi)
    	CLProximityNear,//在幾米內(nèi)
    	CLProximityFar//超過(guò) 10 米以外,不過(guò)在測(cè)試中超不過(guò)10米就是far
    }
    
  • accuracy,與iBeacon的距離。
  • rssi,信號(hào)輕度為負(fù)值,越接近0信號(hào)越強(qiáng),等于0時(shí)無(wú)法獲取信號(hào)強(qiáng)度。

Tip:proximityUUID,majorminor 這三個(gè)屬性組成 iBeacon 的唯一標(biāo)識(shí)符。

只要進(jìn)入iBeacon的范圍,就能喚醒 App(大約10秒鐘),即使在程序被殺掉的情況下。必要時(shí),可以使用UIApplication類(lèi)的- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler;方法,請(qǐng)求更多的后臺(tái)執(zhí)行時(shí)間。

iBeacon的用途:我們可以用iBeacon可以進(jìn)行室內(nèi)定位(車(chē)庫(kù),商場(chǎng)),智能打卡,提醒(離開(kāi)某物體的時(shí)候,比如離開(kāi)家)。

iBeacon 與 BLE 的區(qū)別

iOS 中 iBeacon 是基于地理位置的微定位技術(shù),雖然借助手機(jī)藍(lán)牙進(jìn)行接收Majro、Minor,但是他們?cè)陂_(kāi)發(fā)工程中沒(méi)有任何關(guān)系。

iBeacon使用蘋(píng)果提供CoreLocation庫(kù),然而在 BLE 在開(kāi)發(fā)過(guò)程中使用CoreBluetooth庫(kù)。從上面提供的庫(kù)來(lái)看就很清楚了,特別是在 iOS8.0 之后的時(shí)候如果想使用iBeacon,必須讓用戶點(diǎn)擊是否允許XXapp使用地理位置。如果在第一次使用 iOS App 掃描iBeacon的時(shí)候沒(méi)有提示這句話,是不可能接收到iBeacon的信號(hào)(除非iOS 8.0之下)。如果是 BLE 則的開(kāi)發(fā)過(guò)程中之需要提示用戶打開(kāi)藍(lán)牙,并不要求其他的地理位置任何信息。

iBeacon 在 iOS 中的運(yùn)用

權(quán)限請(qǐng)求

info.plist中添加NSLocationAlwaysAndWhenInUseUsageDescription,NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription,請(qǐng)求地理位置權(quán)限。

開(kāi)啟Background Modes

相關(guān)代碼

import <CoreLocation/CoreLocation.h>。

初始化locationManagerbeaconRegion。

- (CLLocationManager *)locationManager {
    if (!_locationManager) {
        _locationManager = [[CLLocationManager alloc] init];
        _locationManager.delegate = self;
    }
    return _locationManager;
}

- (CLBeaconRegion *)beaconRegion {
    if (!_beaconRegion) {
        _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:Beacon_Device_UUID] identifier:@"test"];
        _beaconRegion.notifyEntryStateOnDisplay = YES;
    }
    return _beaconRegion;
}

CLBeaconRegion類(lèi),提供了3個(gè)初始化方法:

//監(jiān)聽(tīng)該UUID下的所有Beacon設(shè)備
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID identifier:(NSString *)identifier;

//監(jiān)聽(tīng)該UUID,major下的所有Beacon設(shè)備
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major identifier:(NSString *)identifier;

//監(jiān)聽(tīng)唯一的Beacon設(shè)備
- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major minor:(CLBeaconMinorValue)minor identifier:(NSString *)identifier;

在開(kāi)始監(jiān)控之前,我們需要使用isMonitoringAvailableForClass判斷設(shè)備是否支持,是否允許訪問(wèn)地理位置。

BOOL availableMonitor = [CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]];

if (availableMonitor) {
    CLAuthorizationStatus authorizationStatus = [CLLocationManager authorizationStatus];
    switch (authorizationStatus) {
        case kCLAuthorizationStatusNotDetermined:
            [self.locationManager requestAlwaysAuthorization];
        break;
        case kCLAuthorizationStatusRestricted:
        case kCLAuthorizationStatusDenied:
            NSLog(@"受限制或者拒絕");
        break;
        case kCLAuthorizationStatusAuthorizedAlways:
        case kCLAuthorizationStatusAuthorizedWhenInUse:{
            [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
            [self.locationManager startMonitoringForRegion:self.beaconRegion];
        }
        break;
    }
} else {
    NSLog(@"該設(shè)備不支持 CLBeaconRegion 區(qū)域檢測(cè)");
}

監(jiān)聽(tīng)方式

可用兩種方式檢測(cè)區(qū)域MonitoringRanging方式

Monitoring:可以用來(lái)在設(shè)備進(jìn)入/退出某個(gè)地理區(qū)域時(shí)獲得通知, 使用這種方法可以在應(yīng)用程序的后臺(tái)運(yùn)行時(shí)檢測(cè) iBeacon,但是只能同時(shí)檢測(cè) 20 個(gè) region 區(qū)域,并且不能夠推測(cè)設(shè)備與 iBeacon 的距離。

// 開(kāi)始檢測(cè)區(qū)域
[self.locationManager startMonitoringForRegion:beaconRegion]; 

// 停止檢測(cè)區(qū)域
[self.locationManager stopMonitoringForRegion:beaconRegion]; 

// Monitoring成功對(duì)應(yīng)回調(diào)函數(shù)
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region;

// 設(shè)備進(jìn)入該區(qū)域時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;

// 設(shè)備退出該區(qū)域時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;

// Monitoring有錯(cuò)誤產(chǎn)生時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(nullable CLRegion *)region withError:(NSError *)error;

Ranging:可以用來(lái)檢測(cè)某區(qū)域內(nèi)的所有 iBeacons。

// 開(kāi)始檢測(cè)區(qū)域
[self.locationManager startRangingBeaconsInRegion:beaconRegion];

// 停止檢測(cè)區(qū)域
[self.locationManager stopRangingBeaconsInRegion:beaconRegion];

// Ranging成功對(duì)應(yīng)回調(diào)函數(shù)
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region 

// Ranging有錯(cuò)誤產(chǎn)生時(shí)的回調(diào)
- (void)locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region withError:(NSError *)error

進(jìn)程 kill 之后,進(jìn)入 iBeacon 區(qū)域的回調(diào)

// 當(dāng)程序被殺掉之后,進(jìn)入ibeacon區(qū)域,或者在程序運(yùn)行時(shí)鎖屏/解鎖 會(huì)回調(diào)此函數(shù)
- (void)locationManager:(CLLocationManager *)manager
      didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

爭(zhēng)取更多的后臺(tái)時(shí)間

必要時(shí),可以使用UIApplication類(lèi)的- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler;方法,請(qǐng)求更多的后臺(tái)執(zhí)行時(shí)間。

[用 iPhone 手機(jī)模擬 iBeacon]

任何支持使用藍(lán)牙低功耗共享數(shù)據(jù)的 iOS 設(shè)備都可以用作 iBeacon。

import <CoreBluetooth/CoreBluetooth.h><CoreLocation/CoreLocation.h>

terminal中使用uuidgen命令,生成一個(gè) UUID 063FA845-F091-4129-937D-2A189A86D844。

其實(shí)利用BLE來(lái)模擬 beacon 設(shè)備發(fā)送信號(hào),很簡(jiǎn)單。

相關(guān)代碼

初始化peripheralManager

self.peripheralManager= [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];

發(fā)送信號(hào)

NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:self.UUIDTextField.text];
//創(chuàng)建beacon區(qū)域
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID major:self.majorTextField.text.integerValue minor:self.minorTextField.text.integerValue identifier:@"test"];
NSDictionary *beaconPeripheraData = [beaconRegion peripheralDataWithMeasuredPower:nil];

if(beaconPeripheraData) {
    [self.peripheralManager startAdvertising:beaconPeripheraData];;//開(kāi)始廣播
}

停止廣播

[self.peripheralManager stopAdvertising];

注意點(diǎn)

  • 需要訪問(wèn)地理位置權(quán)限。
  • 設(shè)備需要開(kāi)啟藍(lán)牙。
  • 利用 iOS 設(shè)備模擬 beacon信號(hào),Home 出去之后是不能發(fā)送信號(hào)的。

以上就是如何在IOS中使用IBeacon的詳細(xì)內(nèi)容,更多關(guān)于IOS中IBeacon的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • iOS中5種圖片縮略技術(shù)及性能的深入探討

    iOS中5種圖片縮略技術(shù)及性能的深入探討

    縮略圖是各位iOS開(kāi)發(fā)者們?cè)谌粘9ぷ髦薪?jīng)常會(huì)遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于iOS中5種圖片縮略技術(shù)及性能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • iOS實(shí)現(xiàn)對(duì)不同分辨率設(shè)備的字號(hào)大小適配方法

    iOS實(shí)現(xiàn)對(duì)不同分辨率設(shè)備的字號(hào)大小適配方法

    下面小編就為大家分享一篇iOS實(shí)現(xiàn)對(duì)不同分辨率設(shè)備的字號(hào)大小適配方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • iOS實(shí)現(xiàn)百度地圖定位簽到功能

    iOS實(shí)現(xiàn)百度地圖定位簽到功能

    這篇文章主要給大家介紹了iOS實(shí)現(xiàn)百度地圖定位簽到功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • iOS讓軟鍵盤(pán)消失的簡(jiǎn)單方法

    iOS讓軟鍵盤(pán)消失的簡(jiǎn)單方法

    一些文本輸入控件等待輸入時(shí)會(huì)彈出軟鍵盤(pán),我們可以設(shè)置這些控件的Did End On Exit之類(lèi)的回調(diào)方法以在用戶點(diǎn)擊軟鍵盤(pán)上的done或return之列的按鍵時(shí)收起鍵盤(pán)
    2016-02-02
  • IOS NSNotification 鍵盤(pán)遮擋問(wèn)題的解決辦法

    IOS NSNotification 鍵盤(pán)遮擋問(wèn)題的解決辦法

    這篇文章主要介紹了IOS NSNotification 鍵盤(pán)遮擋問(wèn)題的解決辦法的相關(guān)資料,希望通過(guò)本文能幫助到大家,解決這樣的問(wèn)題,需要的朋友可以參考下
    2017-09-09
  • 用iOS模擬器安裝App的方法

    用iOS模擬器安裝App的方法

    下面小編就為大家分享一篇用iOS模擬器安裝App的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • iOS swift 總結(jié)NavigationController出現(xiàn)問(wèn)題及解決方法

    iOS swift 總結(jié)NavigationController出現(xiàn)問(wèn)題及解決方法

    這篇文章主要介紹了iOS swift 總結(jié)NavigationController出現(xiàn)問(wèn)題及解決方法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • iOS上下拉刷新控件MJRefresh使用方法詳解

    iOS上下拉刷新控件MJRefresh使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了iOS上下拉刷新控件MJRefresh的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 詳解iOS的數(shù)據(jù)存儲(chǔ)

    詳解iOS的數(shù)據(jù)存儲(chǔ)

    本文介紹iOS中常用的應(yīng)用數(shù)據(jù)存儲(chǔ)方式及其詳細(xì)用法,內(nèi)容很全面和詳細(xì),對(duì)大家在IOS開(kāi)發(fā)中很有幫助,下面一起來(lái)看看。
    2016-08-08
  • iOS打電話、發(fā)短信、發(fā)郵件實(shí)例代碼

    iOS打電話、發(fā)短信、發(fā)郵件實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了iOS打電話、發(fā)短信、發(fā)郵件實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論