欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何在IOS中使用IBeacon

程序员文章站 2022-04-25 14:14:29
什么是ibeacon?ibeacon 是苹果公司2013年9月发布的移动设备用os(ios7)上配备的新功能。其工作方式是,配备有低功耗蓝牙(ble)通信功能的设备使用ble技术向周围发送自己特有的...

什么是ibeacon?

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

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

从ios开发者的角度看: ibeacon 在 corelocation 框架中抽象为clbeacon类, 该类有6个属性,分别是:

  • proximityuuid,是一个 nsuuid,用来标识公司。每个公司、组织使用的 ibeacon 应该拥有同样的 proximityuuid
  • major,主要值,用来识别一组相关联的 beacon,例如在连锁超市的场景中,每个分店的 beacon 应该拥有同样的 major
  • minor,次要值,则用来区分某个特定的 beacon。
  • proximity,远近范围的,一个枚举值。
  • accuracy,与ibeacon的距离。
  • rssi,信号轻度为负值,越接近0信号越强,等于0时无法获取信号强度。

tip:proximityuuidmajorminor 这三个属性组成 ibeacon 的唯一标识符。

只要进入ibeacon的范围,就能唤醒 app(大约10秒钟),即使在程序被杀掉的情况下。必要时,可以使用uiapplication类的- (uibackgroundtaskidentifier)beginbackgroundtaskwithexpirationhandler:(void (^)(void))handler;方法,请求更多的后台执行时间。

ibeacon的用途:我们可以用ibeacon可以进行室内定位(车库,商场),智能打卡,提醒(离开某物体的时候,比如离开家)。

ibeacon 与 ble 的区别

ios 中 ibeacon 是基于地理位置的微定位技术,虽然借助手机蓝牙进行接收majrominor,但是他们在开发工程中没有任何关系。

ibeacon使用苹果提供corelocation库,然而在 ble 在开发过程中使用corebluetooth库。从上面提供的库来看就很清楚了,特别是在 ios8.0 之后的时候如果想使用ibeacon,必须让用户点击是否允许xxapp使用地理位置。如果在第一次使用 ios app 扫描ibeacon的时候没有提示这句话,是不可能接收到ibeacon的信号(除非ios 8.0之下)。如果是 ble 则的开发过程中之需要提示用户打开蓝牙,并不要求其他的地理位置任何信息。

ibeacon 在 ios 中的运用

权限请求

info.plist中添加nslocationalwaysandwheninuseusagedescription,nslocationwheninuseusagedescriptionnslocationalwaysusagedescription,请求地理位置权限。

开启background modes

相关代码

import <corelocation/corelocation.h>

初始化locationmanagerbeaconregion

clbeaconregion类,提供了3个初始化方法:

在开始监控之前,我们需要使用ismonitoringavailableforclass判断设备是否支持,是否允许访问地理位置。

监听方式

可用两种方式检测区域monitoringranging方式

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

ranging:可以用来检测某区域内的所有 ibeacons。

进程 kill 之后,进入 ibeacon 区域的回调

争取更多的后台时间

必要时,可以使用uiapplication类的- (uibackgroundtaskidentifier)beginbackgroundtaskwithexpirationhandler:(void (^)(void))handler;方法,请求更多的后台执行时间。

[用 iphone 手机模拟 ibeacon]

任何支持使用蓝牙低功耗共享数据的 ios 设备都可以用作 ibeacon

import <corebluetooth/corebluetooth.h><corelocation/corelocation.h>

terminal中使用uuidgen命令,生成一个 uuid 063fa845-f091-4129-937d-2a189a86d844

其实利用ble来模拟 beacon 设备发送信号,很简单。

相关代码

初始化peripheralmanager

发送信号

停止广播

注意点

  • 需要访问地理位置权限。
  • 设备需要开启蓝牙。
  • 利用 ios 设备模拟 beacon信号,home 出去之后是不能发送信号的。

以上就是如何在ios中使用ibeacon的详细内容,更多关于ios中ibeacon的资料请关注其它相关文章!

相关标签: IOS IBeacon