基于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) 调用startRangingBeaconsInRegionsstartRangingBeaconsWithUuids搜索到你需要监听的目标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

 

 

 

 

 

                               

                               

                                

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百度网盘下载速度慢怎么办 负债累累没有钱没有资源怎么办 好福利密码忘了怎么办 手机无法申请百度网盘怎么办 魅族手机运行慢怎么办 阿里小宝卡流量用完了怎么办 阿里宝卡流量用完了怎么办 百度网盘本地空间不足怎么办 百度网盘空间不足怎么办 百度网盘容量不够怎么办 百度网盘内存不够怎么办 百度网盘储存空间不足怎么办 百度网盘手机号注销了怎么办 手机系统升级后照片没了怎么办 换手机照片没了怎么办 苹果手机icloud满了怎么办 百度网盘密码忘记怎么办 手机卡不用了支付宝账号怎么办 手机校园网不弹出登录界面怎么办 百度云需要邮箱验证怎么办 网页百度网盘不播放视频怎么办 手机qq邮箱中转站容量不足怎么办 qq邮箱容量满了怎么办 手机邮箱中转站容量不足怎么办 微信号登陆要好友验证怎么办 邮箱账号名忘了怎么办 苹果六话筒坏了怎么办 iphone后置摄像头坏了怎么办 苹果8听歌声音小怎么办 酷狗音乐没了怎么办 手机听歌音量小怎么办 苹果手机酷狗音乐打不开怎么办 电脑酷狗音乐打不开怎么办 酷狗音乐无法运行播放怎么办? 酷狗音乐停止运行怎么办 米6蓝牙声音小怎么办 手里酷狗id丢了怎么办 连麦声音不好听怎么办 微信语音声音很难听怎么办 微信聊天语音没有声音怎么办 微信发语音声音不好听怎么办