iBeacon使用

来源:互联网 发布:北欧神话 知乎 编辑:程序博客网 时间:2024/06/15 05:15

iBeacon

iBeacon是什么?

维基百科:iBeacon是苹果公司提出的”一种可以让附近手持电子设备检测到的一种新的低功耗、低成本信号传送器”的一套可用于室内定位系统的协议。这种技术可以使一个智能手机或其他装置在一个iBeacon基站的感应范围内执行相应的命令。

百度百科:iBeacon是苹果公司2013年9月发布的移动设备OS(iOS7)上配备的新功能。其工作方式是,配备有低功耗蓝牙(BLE)通信功能的设备使用BLE技术向周围发送自己特有的ID,接收到该ID的应用软件会根据该ID采取一些行动。

使用场景:

推送感知场景的信息

当用户移动到他们感兴趣的区域时,iBeacons 可以用来给他们推送信息。博物馆就是一个典型的例子,设想在每一个展品的位置放置一个 iBeacons 设备,当用户走近展品的时候,手机应用自动展示看到展品的更多信息会有多棒! 这就需要手机应用侦听发射器来了解有哪些发射器接近哪些展品,通过这样的匹配,发射器将定位用户在博物馆中的位置并让应用做出合理的响应。

定位追踪

作为推送感知场景的信息概念的扩展,你也可以使用 iBeacons 作为一种追踪用户的方式。设想在一个博物馆或者杂货店的建筑中遍布 iBeacons ,随着用户的移动,由他们通过发射器的顺序,你可以侦测出他们的移动轨迹。这允许你追踪用户的行踪,并且总结出最普遍的行进路线和行进模式。

从开发者角度的思考:

iBeacon向四面八方不停地广播信号,就像是往平静的水面上扔了一块石子,泛起层层涟漪(俗称水波),波峰相当于iBeacon的RSSI(接受信号强度指示),越靠近中心点的地方波峰越高(RSSI越大),这个波峰的大小(RSSI的值)受到扔石子时用力大小(发射功率)和水质(周围环境因子)的影响,离中心点越远水波越趋向于平静,超过了一定值,水波会消失于无形,也就是说iBeacon向外广播的距离是有范围的,超过了这个范围,将接受不到iBeacon的信号。

总体来看,iBeacon中有两个角色:发射者 :各个硬件设备;接受者:智能终端(手机),发射者通过BLE 的广告通信通道,以一定时间间隔向外广播数据包(一般是每秒两三次),接收者可以通过终端提供的功能来接收,达到信息的交互.
每个信号中至少携带了三个主要信息:UUID, Major, Minor,这三个信号组成了一个 iBeacon 的唯一标识符.

如何接收iBeacon?

作为iOS开发者,这里有一个先天优势,每一台iPhone设备都可以作为``发射者,所以我们需要准备两台iPhone手机,其中一台手机去AppStore下载AirBeacon应用,用于发射iBeacon广播信号(发射者),另外一台用于接收调试

实际场景肯定不是用iPhone设备作为发射,一般都有很多第三方的硬件厂商做这个,比较主流的生产商包括 Estimote 、 Aruba 和 Radius Networks .如果你正在打算使用 iBeacons ,上边的任何一家都会是个不错的选择。

iOS中相关API和使用方法,大致代码

  1. 需要打开GPS定位和蓝牙,在Info.plist 增加 Privacy - Location Always Usage Description
  2. iBeacon 的 API 是在 CoreLocation, 但iBeacon 必须要打开蓝牙,如果需要判断蓝牙,需要用到 CoreBluetooth 框架.
  3. Monitoring和 Ranging 是两种监测方式,可以一起用,但是需要区分业务需求,两种一起用会有小坑.

1.CLLocationManager

locationManager = CLLocationManager.init() // 遵循代理locationManager?.delegate = self // 请求用户授权定位locationManager?.requestAlwaysAuthorization()   

2.CLBeaconRegion 的创建

//唯一标示,其实有三个,包括major,minorlet ZWUUID:UUID = UUID(uuidString: "7E66DA30-0A96-4DB5-A15B-066CE9032E70")!beaconRegin = CLBeaconRegion(proximityUUID: ZWUUID, major: 6, minor: 3, identifier: "ZWIBeacon")//通知退出和进入beaconRegin?.notifyOnExit = truebeaconRegin?.notifyOnEntry = true//补充说明://仅使用proximityUUID来初始化区域,major,minor值将作为通配符。只要是区域内的iBeacon的proximityUUID与此proximityUUID相同,不管major, minor是什么值,都能被检测到。        CLBeaconRegion(proximityUUID:identifier:)//使用proximityUUID和major来初始化区域,minor值将作为通配符。区域内的iBeacon的proximityUUID和major与此proximityUUID和major相同时,不论minor为何值,都能被检测到。        CLBeaconRegion(proximityUUID:major:identifier:)//使用proximityUUID, major, minor来初始化,只能检测到区域内相同proximityUUID, major, minor的iBeacon设备。        CLBeaconRegion(proximityUUID:major: minor:identifier:)

3.可用两种方式检测区域 Monitoring或Ranging方式

Monitoring方式: 可以用来在设备进入/退出某个地理区域时获得通知, 使用这种方法可以在应用程序的后台运行时检测iBeacon,但是只能同时检测20个region区域,并且不能够推测设备与iBeacon的距离。

    locationManager?.startMonitoring(for: beaconRegin!)    locationManager?.stopMonitoring(for: beaconRegin!)    // 设备进入该区域时的回调    func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {    }    // 设备退出该区域时的回调    func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {    }    // 有错误产生时的回调    func locationManager(_ manager: CLLocationManager, monitoringDidFailFor region: CLRegion?, withError error: Error) {    }

Ranging方式: 可以用来检测某区域内的所有iBeacons。

    locationManager?.startRangingBeacons(in: beaconRegin!)    locationManager?.stopRangingBeacons(in: beaconRegin!)     // 检测到区域内的iBeacons时回调此函数,差不多1s刷新一次,这个方法会返回一个 CLBeacon 的数组,根据 CLBeacon 的 proximity 属性就可以判断设备和 beacon 之间的距离,     // proximity 属性有四个可能的值,unknown、immediate、near 和 far, 另外 CLBeacon 还有 accuracy 和 rssi 两个属性能提供更详细的距离数据    func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {    }    // 有错误时候的回调    func locationManager(_ manager: CLLocationManager, rangingBeaconsDidFailFor region: CLBeaconRegion, withError error: Error) {    }

注意:如果搜索不到设备广播,看看是不是因为UUID等唯一标示是不是不一样

更多想法讨论


  1. 距离是否准确

网上有许多围绕每次 ranging event(指的就是范围模式的 didRangeBeacons 回调) 所返回的 CLLocationAccuracy 值的讨论。人们常把这个值当作手机与发射器的实际距离值。以我的经验来看,你当然可以把这个值当作实际的距离,但它并不总是那么准确。苹果文档建议你首先利用 CLProxity 枚举值来初步判定设备距离的远近,然后再用 CLLocationAccuracy 的值来区分其中接近度相近的值。

  • 监听超过 20 个设备

    正像我前边介绍的那样,你现在只能监听 20 个 iBeacons ,如果你需要监听超过 20 个设备,你将需要在应用运行的过程中更改监听的设置,一种实现方案是用图表来展示你的 iBeacons 网络,在网络中定义最顶层的 iBeacons 以及如果这些彼此接近的情况下能够连接到的边界。这样你就可以快速的查找到最接近的 20 个 iBeacons 并监听他们。这需要很多的工作,但是定义一个这样的拓扑是一种实现 20 个 iBeacons 限制的方式。


  • 参考文档

    iBeacon详细介绍以及坑点

    iOS 中 iBeacon 总结

    [译]iOS 开发中使用 Swift 进行 iBeacons 交互指南

    阅读全文
    '); })();
    0 0
    原创粉丝点击
    热门IT博客
    热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 圣宝宠物 圣宝实业有限公司 圣的宝 圣宝度伦游泳池 炼宝证圣 圣宝多功能mp3收音机 熙元圣宝 光元圣宝 中科圣宝荷 圣宝科技有限公司 圣宝插卡收音机 圣宝度伦logo 圣宝插卡音箱 圣宝牌清障车 圣宝小音响 圣巴托洛缪岛 胜得堡 邪帝圣宠之神医萌后 大清之圣宠太子妃 圣宠 绝世圣宠 上海圣宠宠物美容学校 圣宠宠物美容培训学校 圣宠宠物美容学校 圣宠王妃执手一笔 圣宠难却 无忧草丫 派多格和圣宠哪个好 圣宠宠物店 超级神宠进化系统 斗战圣猴 开宠物店需要什么 宠物连锁店排行 开宠物店需要多少钱 如何开宠物店 宠物店的 人鱼巨星实力宠猫 齐天呆圣 三圣寺 混沌圣尊 圣尊 极道圣尊 无上圣尊 洪荒圣尊