ibeacon 技術記錄
ibeacon
是蘋果公司在ios7
釋出的一款硬體,可以感知ibeacon
的位置。ibeacon
只是一個硬體裝置,具體我們不過多的聊了,因為我是做軟體,更關心程式碼怎麼寫。
使用ibeacon
的一些代理方法,必須要開啟定位許可權。
- 開啟定位許可權,在plist檔案中加入 plist -> source code 新增一下程式碼
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>允許</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>允許</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>允許</string>
在appdelegate
中程式碼清單如下:
CLAuthorizationStatus state = [CLLocationManager authorizationStatus];
switch (state) {
case kCLAuthorizationStatusNotDetermined:
{
// 使用者沒有做出選擇
if ([self.locationManger respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[self.locationManger requestAlwaysAuthorization];
}
}
break;
case kCLAuthorizationStatusRestricted:
{
// 沒有獲得使用者授權
}
break;
case kCLAuthorizationStatusDenied:
{
// 使用者明確禁止了
}
break;
case kCLAuthorizationStatusAuthorizedAlways:
{
// 使用者選擇總是執行訪問位置
}
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
{
// 使用者選擇執行期間訪問位置
}
break;
default:
break;
}
位置許可權獲取了。我們開始建立一個region 程式碼清單如下
- (CLBeaconRegion *)beaconRegion
{
if (!_beaconRegion) {
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"00000000-1111-2222-3333-444444444444"];
_beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"region"];
// 使用者離開ibeacon區域,會走退出的代理方法
// 感覺 YES 和NO 都不會影響----
_beaconRegion.notifyOnExit = YES;
_beaconRegion.notifyOnEntry = YES;
// 設定成Yes,每次螢幕點亮,都會呼叫locationManager:didDetermineState:forRegion:
_beaconRegion.notifyEntryStateOnDisplay = YES;
}
return _beaconRegion;
}
建立region 有一下幾個方法
initWithProximityUUID:identifier:
initWithProximityUUID:major:identifier:
initWithProximityUUID:major:minor:identifier:
uuid
、major
、minor
都是ibeacon
的一些屬性。。硬體工程師都會告訴你的。identifier
就是region
的標誌,目的是區分不同的region
兩種監聽方式:
startMonitoringForRegion:能監聽使用者的離開和進入,前臺後臺都能
startMonitoringForRegion :能監聽使用者距離ibeacon的距離等一些資訊,不能在後臺監聽
代理方法
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
// 離開
NSLog(@"離開");
LocalPush *localNotification = [[LocalPush alloc] init];
localNotification.title = @"測試";
localNotification.body = @"離開了";
localNotification.soundName = nil;
localNotification.delayTimeInterval = 0.0;
[localNotification pushLocalNotification];
}
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
// 進入
NSLog(@"進入");
LocalPush *localNotification = [[LocalPush alloc] init];
localNotification.title = @"測試";
localNotification.body = @"進入了";
localNotification.soundName = nil;
localNotification.delayTimeInterval = 0.0;
[localNotification pushLocalNotification];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"失敗");
}
- (void)locationManager:(CLLocationManager *)manager
monitoringDidFailForRegion:(nullable CLRegion *)region
withError:(NSError *)error
{
NSLog(@"monitoringDidFail");
}
// 在後臺和APP被kill .. 設定了notifyEntryStateOnDisplay = yes ,每次點亮螢幕都會被呼叫
- (void)locationManager:(CLLocationManager *)manager
didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if(state == CLRegionStateInside) {
NSLog(@"locationManager didDetermineState INSIDE for %@", region.identifier);
}
else if(state == CLRegionStateOutside) {
NSLog(@"locationManager didDetermineState OUTSIDE for %@", region.identifier);
}
else {
NSLog(@"locationManager didDetermineState OTHER for %@", region.identifier);
}
}
// 沒一秒執行一次
- (void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region
{
for (CLBeacon *beacon in beacons) {
NSLog(@" rssi is :%ld",(long)beacon.rssi);
NSLog(@" beacon proximity :%ld",(long)beacon.proximity);
NSLog(@" accuracy : %f",beacon.accuracy);
NSLog(@" proximityUUID : %@",beacon.proximityUUID.UUIDString);
NSLog(@" major :%ld",(long)beacon.major.integerValue);
NSLog(@" minor :%ld",(long)beacon.minor.integerValue);
}
}
總結注意點:
1、必須要開啟藍芽服務 (理解錯誤了,不需要開啟藍芽)
2、必須要開啟定位服務,如果想後臺和被kill的狀態下,必須是完全允許定位,而不是使用期間允許定位
3、只能監聽20個region
密碼: j5rp
相關文章
- 技術點滴記錄
- 技術問題記錄
- 蘋果iBeacon技術無限可能的四大情景蘋果
- web技術分享| WebRTC記錄音影片流Web
- 技術語錄
- 往期技術直播錄屏資訊記錄到線上文件裡
- 《人工智慧教育技術學》收穫記錄1人工智慧
- 技術專題之-技術概述的目錄
- 前端筆試題面試題記錄(上)| 掘金技術徵文前端筆試面試題
- 2015InfoQ軟體大會技術記錄
- 瀏覽器錄屏技術:探索網頁內容的視覺記錄之道瀏覽器網頁視覺
- 區塊鏈:陌生人信任共同記錄事件的技術區塊鏈事件
- 記錄我杭州 Android 面試的經歷 | 掘金技術徵文Android面試
- CSS技術筆記CSS筆記
- 道喜技術日記
- 技術交流小記
- Android 聲網音視訊體驗記錄|掘金技術徵文Android
- WebRTC錄音功能 | 掘金技術徵文Web
- 提升技術的記錄方式
- iOS 中 iBeacon 開發iOS
- 首次公開!2018雙11技術數字全記錄
- 需求分析過程中 專案裡可能需要的技術點記錄
- apache kafka技術分享系列(目錄索引)ApacheKafka索引
- Flutter之聲網Agore實現音訊體驗記錄 | 掘金技術徵文FlutterGo音訊
- vue專案技術小記Vue
- 技術分享:記憶體管理記憶體
- 記憶體技術詞彙表記憶體
- CUUG筆記 儲存技術筆記
- 技術江湖--講座筆記筆記
- web技術支援| Web 客戶端實現錄音、錄影Web客戶端
- 叢集ARM伺服器技術規格-記錄我們的研發生活伺服器
- 記錄一次參加D2前端技術論壇的杭州之行前端
- 機器閱讀理解打破人類記錄,解讀阿里iDST SLQA 技術阿里
- SAP on Exadata 專案正式上線後技術回訪歸來,特此記錄。。
- 記錄一次nodejs爬取《17吉他》所有吉他譜(只探討技術)NodeJS
- 看技術書籍堅持不下來的,看這裡,記錄增量學習法
- 記錄面試中一些回答不夠好的題(Vue 居多) | 掘金技術徵文面試Vue
- Java核心技術筆記 繼承Java筆記繼承