Best Practices for Setting Up Your Local Device as a Peripheral
和许多central端处理一样, Core Bluetooth framework给你控制实现peripheral的大多数方面的作用。本章提供了指导原则和最佳实践以一种负责任的方式来利用这种程度的控制。
Advertising Considerations
广播peripheral数据是搭建本地设备实现peripheral角色的一个重要组成部分。以下部分帮助你这样做在一个适当的方式。
Respect the Limits of Advertising Data
你广播你的peripheral 的数据通过传入一个广播数据字典在CBPeripheralManager 类的 startAdvertising: 方法,在Advertising Your Services 作为描述。当你创建一个广播字典,记住,什么是有限的,以及有多少,你可以做广播。
尽管广告包一般可以容纳各种 peripheral 设备的信息,你可能只广播设备的本地名称和任何你想要广播的服务的uuid。当你创建你的广播字典,您可以指定只有以下两个key: CBAdvertisementDataLocalNameKey 和 CBAdvertisementDataServiceUUIDsKey。如果指定其他任何key你收到一个错误。
也有限制,你可以使用多少空间广播数据时。当你的应用在前台,它可以使用28字节的空间在最初的广告数据为两个支持广播数据的任何组合key。如果使用这个空间,有一个额外的10个字节空间扫描响应,可以仅用于当地的名字。任何servis uuid不适合所分配的空间被添加到一个特殊的“溢出”区域;他们可以发现只有一个iOS设备显式扫描。当你的应用程序在后台,当地的名字是不广播和所有service uuid在溢出区。
Note:这些大小不包括2字节的请求头信息为每个新数据类型。广播的具体格式和响应数据在蓝牙4.0规范中定义的,卷3 C部分,部分11。
帮助你保持在这些空间约束、限制service uuid你广播那些标识你的主要的services。
Advertise Data Only When You Need To
由于广播peripheral数据使用本地设备的无线电(因此你的设备的电池),广播只有当你想要其他设备连接到你。一旦连接,这些设备可以直接探索和peripheral的数据交互,而不需要任何广告包。因此,减少无线使用,提高应用程序的性能,并保护你的设备的电池,停止广播不再需要促进任何蓝牙低能量的处理。停止广播在你当地的peripheral,只需调用CBPeripheralManager类的 stopAdvertising 方法,像这样
[myPeripheralManager stopAdvertising];
Let the User Decide When to Advertise
知道什么时候广播通常只有用户可以知道的东西。例如,它没有意义,你的app 广播 servies在你的设备当你知道没有任何其他蓝牙低耗能设备附近。因为你的应用常常是不知道附近有哪些其他设备,在您的应用程序提供用户界面(UI)的一种方式用户决定何时做广播。
Configuring Your Characteristics
当您创建一个可变的characteristic,设置其属性,值,和权限。这些设置确定怎么样连接central、访问并与characteristic的值交互。尽管您可能会决定配置characteristic不同的属性和权限根据应用程序的需要,以下部分时提供一些指导您需要执行以下两个任务:
- 允许连接central 订阅你的characteristics
- 保护敏感characteristic值由可访问未配对central.
Configure Your Characteristics to Support Notifications
作为描述在 Subscribe to Characteristic Values That Change Often,建议central订阅characteristic值(远程peripheral的service),经常更改。在可能的情况下,鼓励这种做法,通过允许连接central、订阅你的特征值。
当你创建一个可变的characteristic,配置它支持订阅通过设置characteristic的属性 使用 CBCharacteristicPropertyNotify 常量,像这样:
myCharacteristic = [[CBMutableCharacteristic alloc]
initWithType:myCharacteristicUUID
properties:CBCharacteristicPropertyRead | CBCharacteristicPropertyNotify
value:nil permissions:CBAttributePermissionsReadable];
在这个例子中,characteristics的值是可读 的,和它可以订阅通过一个连接的central。
Require a Paired Connection to Access Sensitive Data
根据用例,你可能想要发布一个服务有一个或多个需要安全的characteristic的值。例如,假设你想发布一个社会化媒体配置文件service。这个service可能有代表一个成员的个人信息characteristic的值,如名字、姓氏和电子邮件地址。很可能,你想只允许可信设备获取成员的电子邮件地址。
你可以确保只有受信任的设备访问敏感characteristic值通过设置适当的characteristic的属性和权限。继续上面的示例中,只允许受信任的设备来获取成员的电子邮件地址,设置适当的characteristic的属性和权限,如下:
emailCharacteristic = [[CBMutableCharacteristic alloc]
initWithType:emailCharacteristicUUID
properties:CBCharacteristicPropertyRead
| CBCharacteristicPropertyNotifyEncryptionRequired
value:nil permissions:CBAttributePermissionsReadEncryptionRequired];
在这个例子中,characteristic是配置为只允许可信设备读取或订阅它的值。当一个连接、远程central试图读取或订阅这一characteristic的值,Core Bluetooth试图配对你的本地periphera与central创建一个安全连接。
例如,如果central和peripheral iOS设备,设备接收警报提示其他设备想要配对。警报在central设备包含一个代码,您必须输入到一个文本字段在peripheral设备的警报完成配对过程。
配对过程完成后,外围认为已经配对central 一个可信设备并允许central 访问加密的characteristic值。