在ios 中ibeacon是基于地理位置的微定位技术(从这句话中可以得出 Introduced in iOS 7, iBeacon is an exciting technology enabling new location awareness possibilities for apps.),虽然借助手机蓝牙进行接收Majro、Minor,但是他们在开发工程中没有任何关系。
ibeacon使用苹果提供CoreLocation库 然而在BLE 在开发过程中使用CoreBluetooth库。从上面提供的库来看就很清楚了,特别是在IOS8之上的时候如果想使用ibeacon,必须让用户点击是否允许“XXapp使用地理位置”。如果 在第一次使用 ios app扫描ibeacon的时候没有提示这句话是不可能接收到ibeacon的信号(除非ios 8.0之下)。如果是BLE则的开发过程中之需要提示用户打开蓝牙,并不要求其他的地理位置任何信息。
ios 在ble、ibeacon 开发过程中与Android 的区别,第一:在ios 中所有的数据都是通过API获取的,也就是说在IOS中不会看到蓝牙模块的裸数据(在这里的裸数据就代表蓝牙模块发送的16进制的数据),只能拿到苹果公司提供的极个别的API中的数据。第二:ble、ibeacon各使用各自的API,他们之间没有任何对应关系。如果想使用ble就不可能获取到ibeacon的major、minor、uuid 等信息,如果使用ibeacon,没有办法发起链接请求获取服务。第三:在ios中ibeacon通信数据只有@property(readonly,nonatomic,strong)NSUUID*proximityUUID;@property(readonly,nonatomic,strong)NSNumber*major;@property(readonly,nonatomic,strong)NSNumber*minor;@property(readonly,nonatomic)CLProximityproximity;@property(readonly,nonatomic)CLLocationAccuracyaccuracy;@property(readonly,nonatomic)NSIntegerrssi;这个六个属性,其分别含义是“proximityUUIDmajor、minor表示ibeacon的uuid,major、minor;proximity就是 苹果提供的几个表示距离的属性CLProximityUnknown(没有数据),CLProximityImmediate(十厘米以内),CLProximityNear(一米以内),CLProximityFar(一米以外)”accuracy 表示大约的距离,是一个float类型数据。RSSI就是信号强度。以上是ibeacon的所有属性。
“在很多硬件人员的眼中认为,ibeacon和ble没有区别啊,我们都是在同一个模块上面开发的,只是发送的数据格式不一样,ibeacon应该和ble没有区别,ios可以获取数据按照我们给的通信协议进行解析就可以啊。”这个就犯了我刚才所说的一个错误,在ios 的开发过程中ibeacon 和ble是两个不同的东西,所有的数据都被苹果拦截了,只给开发者特定的api可以调用。虽然从硬件上面来看没有任何区别但是在开发过程中确实两个不同的东西。但是有很多的厂商又想让ble具有ibeacon的类似的功能,比如可以让app获取到major、minor这个又怎么办?让ios 的app获取ble 的MAC地址等等功能(说明一下,ios是不能直接获取ble的mac 地址的)?在这里(只是我个人的意见也是我在工作中得到的一些方法)是我的建议,一般很多 ble 正在发送发现广播的时候携带了“kCBAdvDataServiceData”信息,可以把ibeacon的major、minor放在kCBAdvDataServiceData 的数据区域,然后让app根据协议截取响应的信息。也可以放到其他的信息中,这要看公司的策略。
如果有一款 iOS ble 的巡检 App(非ibeacon的App)可以用BLE扫描出ibeacon的信息,他的App 肯定不是直接扫描ibeacon,这一点可以从两个方面进行验证 第一:是否使用用户的地理位置,第二:拿一个其他厂家的标准ibeacon,(ibeacon的uuid一定不要一样,因为ios 在扫描ibeacon的时候一定要指定需要扫描的uuid,换一个uuid app都不可能扫描到)。通过上面两点可以很好的判定app是巡检ble还是ibeacon。
总结上面所有的观点,如果想使用ios 的app巡检ble又能巡检ibeacon,一定要在蓝牙模块的广播数据中做文章。怎么做文章需要各厂商自己权衡。
上面所有观点都是针对ios 的开发,非android 的开发。如果有什么问题欢迎大家来讨论。如果有什么不对的地方希望大家喷出来。
下面是原文的连接:blog.sina.com.cn/s/blog_72dcaef90102wkc1.html