iOS iBeacon开发笔记

2015.10.19

airlocate 本文摘抄加个人总结

=========

airlocate显示如何使用这个监控范围clbeaconregions。

代码还提供了一个例子,你如何能校准和配置iOS设备作为信标corebluetooth。

您可以配置一个iOS设备作为信标如下:

1)获得两个iOS设备配备蓝牙LE。一个将是目标设备,一个将是一个远程(校准)设备。

2)负载和启动这个应用程序在这两个设备上。

3)通过选择配置和打开启用的开关,将目标设备转为信标。

4)取校准装置,并将一米距离的目标设备移动。

5)在校准装置上通过选择校准校准过程。

6)从表格视图中选择目标设备。

7)校准过程将开始。你应该在这一过程中,在这个过程中,从一边到另一边的校准装置的波。

8)当校准过程完成后,它会显示一个校准的RSSI值在屏幕上。

9)在目标设备上,返回到配置屏幕并输入该值在测量功率下。

注:校准过程是可选的,但建议将微调范围为您的环境。

您可以配置一个iOS设备没有校准它不指定测量功率信标。

如果未指定测量功率,CoreLocation默认为预定值。

一旦你设置你的目标设备作为一个灯塔,你可以使用这个应用程序演示灯塔范围和监测。

要演示范围,选择远程设备。alrangingviewcontroller范围一套clbeaconregions。

要演示监控,选择远程设备监控。almonitoringviewcontroller允许您配置一个clbeaconregion监测。

版权所有(2013)苹果公司保留所有权利。

零.写在前面

关于测试:建议下载Estimote的app,作为基站,得到它的UUID,majon,minor参数。

关于设备:iBeacon 使用Bluetooth

LE技术,所以你必须要有一个内置有低功耗蓝牙的 iOS 设备以便与 iBeacon协同工作。目前这个列表里包含如下一些设备:

iPhone 4s 或更新的

第三代 iPad 或更新的

iPad mini 或更新的

第五代iPod touch 或更新的

系统版本7.0以上

测试结果:rssi信号轻度大概到-90,有效距离大概为30m。

用途:蓝牙BLE,定位,智能家居等。自己还做了个上班打卡的

app,只有进入有效范围内才能打卡成功。

UUID、主要、次要标识符

如果你不熟悉 iBeacon,你可能也不熟悉术语UUID、主要值(major

value)和次要值(minor value)。

一个 iBeacon除了是一个低功耗蓝牙设备之外什么也不是,它们以特定结构发布信息。这些特定的东西超出本教程的范围,但要明白的一件重要事情是 iOS之所以能够监控这些 iBeacon 就是基于UUID、主要值和次要值。

UUDID 是 Universally UniqueIdentifier(通用唯一标识符)的缩写,它实际上是一个随机字符串;B558CBDA-4472-4211-A350-FF1196FFE8C8就是一个例子。在 iBeacon 的讨论范围里,一个 UUID 通常用于表示你的顶层标识。作为开发者如果你生成一个 UUID并将其分配给你的 iBeacon 设备,那么当一个设备检测到你的 iBeacon 时,它就知道它是在和哪个 iBeacon通信。

主要值与次要值在 UUID 之上提供了稍多的粒度。这些值只是 16 位无符号整数,能够标识每个单独的 iBeacon

,甚至是具有同样 UUID 的哪些。

举个例子,如果你有多间百货公司,那么你所有的 iBeacon 发射器都可有同一个 UUID

,但每个店都有它自己的主要值,而里面的每个部门就会有它自己的次要值。你的应用能够对一个位于你在迈阿密、佛罗里达店的鞋类部们里的

iBeacon 做出响应。

一.iBeacon的使用

开始监听你的Ibeacon。

在iOS8里面苹果改变了地位的开启方式(iBeacon的使用是基于蓝牙和定位的),首先要在工程里的info.plist增加字段NSLocationAlwaysUsageDescription(这个是允许一直在后台运行的)

可能你会有些奇怪 iBeacon 会与 Core Location 相关,毕竟它是蓝牙设备,但考虑到 iBeacon

提供微定位信息对应 GPS 提供宏定位信息,也就不奇怪了。在将一个 iOS 设备当作一个iBeacon 而编程时,你就要利用 Core

Bluetooth 框架,而在监控 iBeacon 时,你只需同 Core Location 打交道。

当程序运行起来你会发现,设备左下角有你的程序 icon 图标

.h文件

#import

#import

@interface ViewController : UIViewController

@property (nonatomic, strong) NSArray

*beaconArr;//存放扫描到的iBeacon

@property (strong, nonatomic) CLBeaconRegion

*beacon1;//被扫描的iBeacon

@property (strong, nonatomic) CLLocationManager *

locationmanager;

@end

.m文件

#define BEACONUUID

@"12334566-7173-4889-9579-954995439125"//iBeacon的uuid可以换成自己设备的uuid

- (void)viewDidLoad {

[super viewDidLoad];

self.tableView = [[UITableView alloc]

initWithFrame:CGRectMake(0, 20, 320, 568)];

self.tableView.delegate = self;

self.tableView.dataSource = self;

[self.view addSubview:self.tableView];

self.beaconArr = [[NSArray alloc] init];

self.locationmanager = [[CLLocationManager alloc]

init];//初始化

self.locationmanager.delegate = self;

self.beacon1 = [[CLBeaconRegion alloc]

initWithProximityUUID:[[NSUUID alloc]

initWithUUIDString:BEACONUUID]

identifier:@"media"];//初始化监测的iBeacon信息

[self.locationmanagerrequestAlwaysAuthorization];//设置location是一直允许

}

- (void)locationManager:(CLLocationManager *)managerdidChangeAuthorizationStatus:(CLAuthorizationStatus)status{

if (status == kCLAuthorizationStatusAuthorizedAlways) {

[self.locationmanagerstartMonitoringForRegion:self.beacon1];//开始MonitoringiBeacon

}

}

{

//发现有iBeacon进入监测范围

-(void)locationManager:(CLLocationManager *)manager

didEnterRegion:(CLRegion *)region{

[self.locationmanagerstartRangingBeaconsInRegion:self.beacon1];//开始RegionBeacons

}

//找的iBeacon后扫描它的信息

- (void)locationManager:(CLLocationManager *)manager

didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion

*)region{

//如果存在不是我们要监测的iBeacon那就停止扫描他

if (![[region.proximityUUID UUIDString]

isEqualToString:BEACONUUID]){

[self.locationmanager stopMonitoringForRegion:region];

[self.locationmanager stopRangingBeaconsInRegion:region];

}

//打印所有iBeacon的信息

for (CLBeacon* beacon in beacons) {

NSLog(@"rssi is :%ld",beacon.rssi);

NSLog(@"beacon.proximity %ld",beacon.proximity);

......

}

self.beaconArr = beacons;

[self.tableView reloadData];

}

- (NSInteger)tableView:(UITableView *)tableView

numberOfRowsInSection:(NSInteger)section

{

return self.beaconArr.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *ident = @"cell";

UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:ident];

if (!cell) {

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:ident];

}

CLBeacon *beacon = [self.beaconArr

objectAtIndex:indexPath.row];

cell.textLabel.text = [beacon.proximityUUID UUIDString];

NSString *str;

switch (beacon.proximity) {

case CLProximityNear:

str = @"近";

break;

case CLProximityImmediate:

str = @"超近";

break;

case CLProximityFar:

str = @"远";

break;

case CLProximityUnknown:

str = @"不见了";

break;

default:

break;

}

cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ %ld

%@ %@",str,beacon.rssi,beacon.major,beacon.minor];

return cell;

}

//一些错误处理,因为你正在同非常具体的硬件特性打交道,你需要知道任何原因导致的监控和测距失败

- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {NSLog(@"Failed monitoring region:%@", error);}- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {NSLog(@"Location manager failed:%@", error);

}

二.ibeacon的参数

uuid唯一标识此类iBeacon。

proximity远近范围的,有Near(在几米内),Immediate(在几厘米内),Far(超过 10

米以外,不过在测试中超不过10米就是far),Unknown(无效)

major和minor组合后区分同一类型下的iBeacon。

accuracy和iBeacon的距离

rssi信号轻度为负值,越接近0信号越强,等于0时无法获取信号强度

三.通知

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {if ([regionisKindOfClass:[CLBeaconRegionclass]]) {        UILocalNotification *notification = [[UILocalNotificationalloc]init];        notification.alertBody =@"Are you forgetting something?";        notification.soundName =@"Default";        [[UIApplicationsharedApplication]presentLocalNotificationNow:notification];    }}

你的位置管理器将在你离开某个区域时调用上面的方法,这就是这个应用有用的时刻。你不需要在你接近你的电脑包时被告知,只需在你离开它太远时通知你。

此处你检查区域是否是一个CLBeaconRegion,因为如果你同时也在执行地理定位区域监视的话,它还可能是一个CLCircularRegion。然后你就发送一个本地通知,附带一个消息“Are you forgetting something?” 。

编译并运行你的应用;离开某个你的注册的 iBeacon,然后一旦你离开得足够远,你就会看到通知弹出来。

参考地址:https://github.com/nixzhu/dev-blog/blob/master/2014-04-23-ios7-ibeacons-tutorial.md

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • @end 与之前一样,你需要初始化位置管理器并设置它们的 delegate 。 在 application:did...
    LiWeiJ阅读 2,121评论 0 0
  • iBeacon使用的是BLE技术,具体而言,利用的是BLE中名为“通告帧”(Advertising)的广播帧。通告...
    Courage_SC阅读 2,926评论 2 7
  • 更新下 把我之前写的demo找到了放到git上面了地址 最近时间一直在研究ibeacon所以把自己遇到的一些问题写...
    沙瓦迪卡阅读 21,305评论 53 55
  • 1. iBeacon是什么? 维基百科:iBeacon是苹果公司提出的"一种可以让附近手持电子设备检测到的一种新的...
    丨n水瓶座菜虫灬阅读 4,363评论 5 9
  • iBeacon在iOS 7之后的版本中有内置库,直接引入就可以使用 #import<CoreLocation/Co...
    ___Lynn阅读 1,993评论 0 0