基于BrightBeaconSDK的iBeacon开发总结
来源:互联网 发布:java监听器原理 编辑:程序博客网 时间:2024/05/16 15:04
/*本文所包含代码部分均为Objective-C*/
一.开发中所用到的几个类的介绍
1. BRTBeacon:这是继承自CLBeacon的类,代表一个Beacon设备,通常不需要由我们直接创建,只需要操作如startRaging等方法返回的已经实例化好的对象即可。
1) 几个重要的property:
NSNumber* distance:根据rssi估算出来的Beacon与手机的距离,单位为m
NSNumber* major:Beacon身份标识,可随意更改,逻辑上表示一个较小的空间,如某个房间
NSNumber* minor:Beacon身份标识,可随意更改,逻辑上表示一个中等的空间,如某层楼
NSUUID* proximityUUID:Beacon身份标识,可随意更改,逻辑表示一个大型空间或集群,如表示某个商场,某栋大楼
2.BRTBeaconManager:本质上是一个工具类,通常我们不必直接使用这个工具类,提供了多种方法用于Beacon相关操作
1)几个重要的API:
registerApp: :在使用sdk之前必须调用的方法,一般在AppDelegate中调用,注册AppKey
startRangingBeaconsInRegion: :搜索某个Region内的Beacon
startMonitoringForRegion::监听手机的位置相对于一个或多个Region对象的状态,只要获得权限,支持后台监听
3.BRTBeaconSDK:也是一个工具类,几乎我们所有的操作都使用这个类,提供了很多基于block思想,由事件触发的接口
1)几个重要的API:
+(void)regiesterApp:(NSString *)appKey:在使用SDK之前必须调用的方法,一般在AppDegate中调用,注册AppKey
+(id)regionHander:(id)handler:设置monitoring回调类,默认为AppDelegate,如果需要专门建立一个回调类,这个类必须与AppDelegate随同启动,不然无法回调,这个API的技术细节目前尚未测试
+(void)startRangingWithUuids:(NSArray*)uuids onCompletion:(RangingBrightBeaconsCompletionBlock)completion
:扫描UUID∈uuids数组的Beacon,每秒回调一次CompletionBlock内的代码,不支持后台调用
+(void)startRangingBeaconsInRegions:(NSArray *)regionsonCompletion: :(RangingBrightBeaconsCompletionBlock) completion
:扫描regions里面包含的region内的beaon设备,每秒回调一次CompletionBlock中的代码,不支持后台调用
+(void)startMonitoringForRegions:(NSArray *)regions
:监听手机相对于region∈regions数组的状态,状态改变会进入regionHandler内部的回调函数(>iOS7),以下为其回调函数,可以在后台回调,需要打开后台应用程序刷新
-(void)beaconManager:(BRTBeaconManager )manager didEnterRegion:(BRTBeaconRegion)region: 触发条件不明朗,估计是rssi值达到某个阈值触发
-(void)beaconManager:(BRTBeaconManager )manager didExitRegion:(BRTBeaconRegion)region:触发条件为3分钟没有收到region对应的beacon信号
-(void)beaconManager:(BRTBeaconManager )managerdidDetermineState:(CLRegionState)state forRegion:(BRTBeaconRegion )region: rssi值改变时就会触发
二.不同场景的开发思路
1.打开app的情况下,实现基于感知beacon的实时提醒及推送等
这个是最基本也是最简单的应用, 直接在AppDelegate或ViewController中,调用startRangingBeaconsInRegions:或startRangingWithUuids:在回调block中根据接收到的Beacon数组进行相关提醒及推送操作,这个方案具有极高的实时性(1秒扫描一次),适合如寻宝,扫描周边商店之类的需求。
example:
// DYHSafariViewController.m
// DragonBall
// Created by Dai Yunhao on 4/27/15.
@interface DYHSafariViewController()<UITableViewDelegate… >
@property (nonatomic,strong)NSArray* beacons;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
. . .
[self startFindBeacons];
}
-(void)startFindBeacons
{
[BRTBeaconSDK startRangingBeaconsInRegions:nilonCompletion:^(NSArray *beacons, BRTBeaconRegion*region, NSError *error) {
self.beacons = beacons;
/* 你需要进行的操作代码可以写在这个位置*/
}];
}
2. 打开app,或者将app置于后台,甚至kill掉app的情况下,实现基于beacon感知的异步提醒或推送
区域感知是beacon的重要功能,如博物馆推送,大型会议,商店推送,都需要用到这个功能。要实现完整的这套功能,我们主要使用startMonitoringForRegions这个API和他的三个回调函数来实现,思路如下:
1) 调用startRangingBeaconsInRegions或startRangingBeaconsWithUuids搜索到你需要监听的目标beacon,用目标beacon的uuid构造region,并监听region,这段代码我写在AppDelegate中,但其实可以根据需求在其他地方开始执行
//
// AppDelegate.m
// SmartOffice
//
// Created by Dai, Yunhao on15/5/20.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
[self.windowmakeKeyAndVisible];
. . .
[self startSearchBeacon];
return YES;
}
- (void)startSearchBeacon
{
//使用这个API,UUID需要自定义,避免同UUID的其他beacon带来的影响
[BRTBeaconSDKstartRangingWithUuids:@[[[NSUUID alloc]initWithUUIDString:DEFAULT_UUID]]onCompletion:^(NSArray*beacons, BRTBeaconRegion *region, NSError *error) {
if (!error) {
//遍历回调的beacons数组,找出符合条件的beacon
for (BRTBeacon* beaconin beacons) {
if ([beacon.minorintegerValue] == 4) {
if(beacon.proximityUUID) {
//代码执行到这里,已经找到了目标beacon,接下来我们只需要构造一个region,对region进行监听即可
BRTBeaconRegion *region = [[BRTBeaconRegionalloc] initWithProximityUUID:beacon.proximityUUID identifier:@" your_region_id"];
region.notifyOnExit = YES;
region.notifyOnEnter= YES;
region.notifyEntryStateOnDisplay = YES;
//开始监听region
[BRTBeaconSDK startMonitoringForRegions:@[region]];
}
}else{
NSLog(@"%@",error);
}
}];
}
2) 同样是在AppDelegate.m中,我们实现MonitoringForRegions的三个回调
-(void)beaconManager:(BRTBeaconManager*)manager
didDetermineState:(CLRegionState)state
forRegion:(BRTBeaconRegion*)region{
/*rssi变化时你需要做的操作写在这里*/
/*该API灵敏度:极高*/
}
-(void)beaconManager:(BRTBeaconManager*)manager
didExitRegion:(BRTBeaconRegion*)region
{
/*离开region时你需要做的操作写在这里*/
/*该API灵敏度:极低*/
}
-(void)beaconManager:(BRTBeaconManager*)manager
didEnterRegion:(BRTBeaconRegion*)region
{
/*进入region时你需要做的操作写在这里*/
/*该API灵敏度:中*/
}
3) 最后,我们需要使我们的app获得无限后台运行权限,有多种方法可以实现这个功能,这里就不再赘述,可以参考stackoverflow
- 基于BrightBeaconSDK的iBeacon开发总结
- 基于iBeacon技术的智慧婚姻登记解决方案
- 基于iBeacon的智慧旅游解决方案
- 基于iBeacon技术的智慧商场解决方案
- 基于iBeacon技术的婚庆行业解决方案
- 基于iBeacon技术的智慧停车解决方案
- 基于iBeacon技术的智慧餐饮解决方案
- Apple 基于蓝牙的iBeacon技术
- iBeacon开发
- 【蓝牙】关于iBeacon相关的文章总结
- 开发使用 iBeacon 的 iOS 7 应用
- 开发使用 iBeacon 的 iOS 7 应用
- 开发使用 iBeacon 的 iOS 7 应用
- 开发使用 iBeacon 的 iOS 7 应用
- Android 开发中 iBeacon的使用
- iOS开发 关于iBeacon的一些记录
- 开发使用 iBeacon 的 iOS 7 应用
- Android 开发中 iBeacon的使用
- 扩展MARA 添加Z字段BAPI_TE_MARA
- 18 4Sum
- sigaction信号处理
- ios学习路线
- MongoDB3.0发布--新特性
- 基于BrightBeaconSDK的iBeacon开发总结
- REST无状态的理解
- Java-发送邮件(附件、图片)---(五)实例
- html5入门(基于HTML4)
- Nginx源代码分析之accept(十)
- c++ .net winform 应用程序调用dll(gSOAP调用WebService)获取天气
- SPOJ 1825 Free tour II
- Search for a Range
- Android UI性能优化实战 识别绘制中的性能问题