iOS蓝牙开发学习笔记(六)作为Peripheral端的最佳方式

https://developer.apple.com/library/prerelease/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForSettingUpYourIOSDeviceAsAPeripheral/BestPracticesForSettingUpYourIOSDeviceAsAPeripheral.html#//apple_ref/doc/uid/TP40013257-CH5-SW1

Best Practices for Setting Up Your Local Device as a Peripheral

作为Peripheral端的最佳方式

与central端类似,蓝牙库让你能够实现peripheral角色的多方面的控制。本章节提供指引,并讲述如何使用。

Advertising Considerations

广播是实现peripheral建立连接的一个重要部分。

Respect the Limits of Advertising Data

注意广播数据的限制

在CBPeripheralManager 的startAdvertising: 方法中,通过dictionary参数传递peripheral的广播数据。创建广播字典时,时刻记住有哪些限制。

虽然广播包通常情况下可以有多种的信息,但你只能广播设备名称和services的uuid。也就是说,在你创建广播字典时,你只能设置这两个key: CBAdvertisementDataLocalNameKey and CBAdvertisementDataServiceUUIDsKey 。设置其他key将导致错误。

广播数据的空间也有限制。当应用在前台时,这两个key的值最多有28 字节可用。搜索时,如果这个空间用完,另外还有10个字节的响应数据可以用来标识设备名称。超出规定空间的service uuids将会被放到“Overflow”区域,在ios设备显示搜索他们时会被搜索到。当设备在后台时,local name不会被广播,同时所有的services uuids 都放入 overflow 区域。

注意:这个限制的数值不包括2字节的头部信息。详细格式信息参见Bluetooth 4.0 specification, Volume 3, Part C, Section 11.

为了使你的数据符合空间要求,请使用主要的services的uuid

Advertise Data Only When You Need To

只在需要的时候广播数据

广播数据会使用设备的无线电(当然了还有电池),所以只有在你希望被连的时候才广播数据。一旦连接上,这个设备就可以检索和交互数据了,而不需要你在广播数据了。因此,为了少使用无线电,增加应用响应性能,保护电池,请停止发送广播。使用stopAdvertising 方法停止,如下

 [myPeripheralManager stopAdvertising];
  • 1

Let the User Decide When to Advertise

让用户决定什么时候广播

往往只有用户才最知道什么时候需要发送广播。如果附近没有蓝牙设备,你发送广播也是没有意义的。既然应用本身不知道何时需要发送广播,那就提供接口让用户来决定。

Configuring Your Characteristics

配置characteristic

创建可变characteristic之后,我们修改其属性,值,和访问权限。这些设置决定连接的central如何访问和与之交互数据。虽然不同的属性和访问权限由各自app决定,但当你要完成下面两项任务时,这里提供相关指引: 
1,允许central订阅你的characteristics 
2,如果未配对,请保护敏感数据

Configure Your Characteristics to Support Notifications

设置characteristic,使之支持通知

在Subscribe to Characteristic Values That Change Often 中有描述,推荐在characteristic的值经常变化时,使用订阅的方式。如果可能的话,尽量让central端能够采用订阅的方式。

创建的时候,通过CBCharacteristicPropertyNotify 设置characteristic的属性,使之支持订阅

myCharacteristic = [[CBMutableCharacteristic alloc] initWithType:myCharacteristicUUID properties:CBCharacteristicPropertyRead | CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];
  • 1

这样,characteristic会是可读,可被订阅的。

Require a Paired Connection to Access Sensitive Data

要求配对连接才能访问敏感数据

实际情况下,你可能需要发送敏感数据。比如数据中有姓名,email地址等,你希望只有可信任的设备才能访问这些数据。

要保证只有可信任的设备才能访问敏感数据,可以通过设置合适的characteristic属性和访问权限。比如上面创建的例子,可做如下修改:

emailCharacteristic = [[CBMutableCharacteristic alloc] initWithType:emailCharacteristicUUID properties:CBCharacteristicPropertyRead| CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired];
  • 1

在这里characteristic被配置成只允许可信任设备访问和订阅他的值。当central想要连接和订阅这个characteristic的值时,蓝牙库就会尝试配对来建立安全连接。

配对过程完成后,peripheral就会认为这个central是一个可信任设备,并允许central访问其加密过的值。

你可能感兴趣的:(iOS蓝牙)