# 豆包智能服务的端能力 API: iBeacon

iBeacon 搜索和结果读取能力。

[返回目录](./groups.md) | [返回速查](./quick-reference.md)

## 速查

| API | 说明 |
| --- | --- |
| [startBeaconDiscovery](#startbeacondiscovery) | 开始搜索附近的 iBeacon。 |
| [stopBeaconDiscovery](#stopbeacondiscovery) | 停止搜索附近的 iBeacon。 |
| [getBeacons](#getbeacons) | 获取已搜索到的 iBeacon 列表。 |

## API 详情

<a id="startbeacondiscovery"></a>
### startBeaconDiscovery()

# startBeaconDiscovery

开始搜索附近的 iBeacon。

## 扫码预览
![扫码预览 startBeaconDiscovery](https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=doubao%3A%2F%2Fdoubao_apps%3Fapp_id%3Ddb_1McM5Ni%26path%3D%252Fpages%252Fapi%252Fdevice%252Fbeacon%252Findex)

## 使用限制

> [!WARNING]
> **Android**：Android 不读取该字段，蓝牙不可用时仍会失败；Android 调用方设置该参数不会生效。

## 支持版本

前端库版本不低于 `0.0.25`。

## 支持平台

<table>
<thead>
<tr><th>平台</th><th>支持情况</th></tr>
</thead>
<tbody>
<tr><td>Android</td><td>支持</td></tr>
<tr><td>iOS</td><td>支持</td></tr>
<tr><td>PC</td><td>不支持</td></tr>
<tr><td>HarmonyOS</td><td>不支持</td></tr>
</tbody>
</table>

## 接入准备

### 权限要求

<table>
<thead>
<tr><th>类型</th><th>标识</th><th>是否必须</th><th>平台</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td>系统权限</td><td>定位权限</td><td>必须</td><td>Android、iOS</td><td>需要定位权限以搜索 iBeacon</td></tr>
<tr><td>系统权限</td><td>蓝牙权限</td><td>必须</td><td>Android、iOS</td><td>需要蓝牙权限以搜索 iBeacon</td></tr>
</tbody>
</table>

### 授权行为

- 调用会主动申请定位和蓝牙权限。用户拒绝后再次调用会直接失败，需引导用户在系统设置中开启定位和蓝牙权限后重试。

### 前置条件

- 确保设备蓝牙已开启，并授予定位和蓝牙权限

## 使用说明

需配对调用 stopBeaconDiscovery。

- 使用限制：Android 会忽略 `ignoreBluetoothAvailable`，蓝牙不可用时仍会失败；不再需要时调用 `stopBeaconDiscovery`

## 调用方式

### 异步 API

```typescript
startBeaconDiscovery(params: StartBeaconDiscoveryParams): Promise<object>
```

## 入参

<table>
<thead>
<tr><th>名称</th><th>类型</th><th>必填</th><th>默认值</th><th>约束</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td><code>ignoreBluetoothAvailable</code></td><td><code>boolean</code></td><td>否</td><td><code>false</code></td><td>仅 iOS 生效，Android 忽略该字段</td><td>iOS 下是否忽略蓝牙可用性校验。Android：Android 不读取该字段，蓝牙不可用时仍会失败。</td></tr>
<tr><td><code>uuids</code></td><td><code>string[]</code></td><td>是</td><td>-</td><td>-</td><td>要搜索的 iBeacon UUID 列表。</td></tr>
</tbody>
</table>

## 调用示例

```typescript
import { startBeaconDiscovery } from '@doubao-dev/framework/api';

await startBeaconDiscovery({ uuids: ['FDA50693-A4E2-4FB1-AFCF-C6EB07647825'] });
```

## 成功返回

无返回字段。

### 返回示例

```json
{}
```

## 错误处理

错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。

### 失败示例

```json
{
  "errNo": 104,
  "errMsg": "invalid parameter"
}
```

### 错误码

<table>
<thead>
<tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
</thead>
<tbody>
<tr><td><code>104</code></td><td><code>invalid parameter</code></td><td>Android、iOS</td><td>uuids 为空</td><td>传入至少一个合法的 iBeacon UUID</td></tr>
<tr><td><code>106</code></td><td><code>system permission denied</code></td><td>Android、iOS</td><td>定位或蓝牙权限未授予</td><td>在系统设置中授予定位和蓝牙权限后重试</td></tr>
<tr><td><code>116</code></td><td><code>resource not found</code></td><td>Android、iOS</td><td>蓝牙不可用或已关闭</td><td>开启蓝牙后重试</td></tr>
<tr><td><code>103</code></td><td><code>feature not support</code></td><td>iOS</td><td>当前设备不支持 iBeacon 搜索</td><td>更换支持 iBeacon 的设备</td></tr>
</tbody>
</table>

#### 通用错误码

<table>
<thead>
<tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
</thead>
<tbody>
<tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android、iOS</td></tr>
</tbody>
</table>

## 平台差异

- **iOS**：支持通过 `ignoreBluetoothAvailable` 跳过蓝牙可用性校验

<a id="stopbeacondiscovery"></a>
### stopBeaconDiscovery()

# stopBeaconDiscovery

停止搜索附近的 iBeacon。

## 扫码预览
![扫码预览 stopBeaconDiscovery](https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=doubao%3A%2F%2Fdoubao_apps%3Fapp_id%3Ddb_1McM5Ni%26path%3D%252Fpages%252Fapi%252Fdevice%252Fbeacon%252Findex)

## 支持版本

前端库版本不低于 `0.0.25`。

## 支持平台

<table>
<thead>
<tr><th>平台</th><th>支持情况</th></tr>
</thead>
<tbody>
<tr><td>Android</td><td>支持</td></tr>
<tr><td>iOS</td><td>支持</td></tr>
<tr><td>PC</td><td>不支持</td></tr>
<tr><td>HarmonyOS</td><td>不支持</td></tr>
</tbody>
</table>

## 接入准备

### 权限要求

<table>
<thead>
<tr><th>类型</th><th>标识</th><th>是否必须</th><th>平台</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td>系统权限</td><td>定位权限</td><td>按条件</td><td>Android</td><td>Android 停止搜索时会校验定位权限</td></tr>
<tr><td>系统权限</td><td>蓝牙权限</td><td>按条件</td><td>Android</td><td>Android 停止搜索时会校验蓝牙权限</td></tr>
</tbody>
</table>

### 授权行为

- **Android**：停止搜索时会校验定位和蓝牙权限，权限缺失时调用可能失败；在系统设置中授予对应权限后可正常调用。

### 前置条件

- 无额外前置条件；通常在 `startBeaconDiscovery` 后调用

## 使用说明

- 使用限制：iOS 恒返回成功，Android 权限缺失时可能失败

## 调用方式

### 异步 API

```typescript
stopBeaconDiscovery(params?: object): Promise<object>
```

## 入参

无。

## 调用示例

```typescript
import { stopBeaconDiscovery } from '@doubao-dev/framework/api';

await stopBeaconDiscovery();
```

## 成功返回

无返回字段。

### 返回示例

```json
{}
```

## 错误处理

错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。

### 失败示例

```json
{
  "errNo": 106,
  "errMsg": "system permission denied"
}
```

### 错误码

<table>
<thead>
<tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
</thead>
<tbody>
<tr><td><code>106</code></td><td><code>system permission denied</code></td><td>Android</td><td>定位或蓝牙权限未授予</td><td>在系统设置中授予定位和蓝牙权限后重试</td></tr>
</tbody>
</table>

#### 通用错误码

<table>
<thead>
<tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
</thead>
<tbody>
<tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android</td></tr>
</tbody>
</table>

## 平台差异

- **iOS**：停止搜索恒返回成功，不校验权限

<a id="getbeacons"></a>
### getBeacons()

# getBeacons

获取已搜索到的 iBeacon 列表。

## 扫码预览
![扫码预览 getBeacons](https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=doubao%3A%2F%2Fdoubao_apps%3Fapp_id%3Ddb_1McM5Ni%26path%3D%252Fpages%252Fapi%252Fdevice%252Fbeacon%252Findex)

## 支持版本

前端库版本不低于 `0.0.25`。

## 支持平台

<table>
<thead>
<tr><th>平台</th><th>支持情况</th></tr>
</thead>
<tbody>
<tr><td>Android</td><td>支持</td></tr>
<tr><td>iOS</td><td>支持</td></tr>
<tr><td>PC</td><td>不支持</td></tr>
<tr><td>HarmonyOS</td><td>不支持</td></tr>
</tbody>
</table>

## 接入准备

### 权限要求

<table>
<thead>
<tr><th>类型</th><th>标识</th><th>是否必须</th><th>平台</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td>系统权限</td><td>定位权限</td><td>按条件</td><td>Android</td><td>Android 获取列表时会校验定位权限</td></tr>
<tr><td>系统权限</td><td>蓝牙权限</td><td>按条件</td><td>Android</td><td>Android 获取列表时会校验蓝牙权限</td></tr>
</tbody>
</table>

### 授权行为

- **Android**：获取列表时会校验定位和蓝牙权限，权限缺失时调用可能失败；在系统设置中授予对应权限后可正常调用。

### 前置条件

- 无额外前置条件；通常在 `startBeaconDiscovery` 后调用

## 使用说明

- 使用限制：iOS 恒返回成功，Android 权限缺失时可能失败

## 调用方式

### 异步 API

```typescript
getBeacons(params?: object): Promise<GetBeaconsResult>
```

## 入参

无。

## 调用示例

```typescript
import { getBeacons } from '@doubao-dev/framework/api';

const { beacons } = await getBeacons();

console.log(beacons);
```

## 成功返回

<table>
<thead>
<tr><th>名称</th><th>类型</th><th>必返</th><th>说明</th></tr>
</thead>
<tbody>
<tr><td><code>beacons</code></td><td><code>BeaconInfo[]</code></td><td>是</td><td>当前搜到的 iBeacon 列表。</td></tr>
<tr><td><code>beacons[].accuracy</code></td><td><code>number</code></td><td>是</td><td>距离，单位米。</td></tr>
<tr><td><code>beacons[].major</code></td><td><code>number</code></td><td>是</td><td>主 ID。</td></tr>
<tr><td><code>beacons[].minor</code></td><td><code>number</code></td><td>是</td><td>次 ID。</td></tr>
<tr><td><code>beacons[].proximity</code></td><td><code>BeaconProximity</code></td><td>是</td><td>距离等级。</td></tr>
<tr><td><code>beacons[].rssi</code></td><td><code>number</code></td><td>是</td><td>RSSI 信号强度，单位 dBm。</td></tr>
<tr><td><code>beacons[].uuid</code></td><td><code>string</code></td><td>是</td><td>Beacon UUID。</td></tr>
</tbody>
</table>

### 返回示例

```json
{
  "beacons": [
    {
      "uuid": "FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
      "major": 10001,
      "minor": 19641,
      "proximity": 1,
      "accuracy": 0.52,
      "rssi": -59
    }
  ]
}
```

## 错误处理

错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。

### 失败示例

```json
{
  "errNo": 106,
  "errMsg": "system permission denied"
}
```

### 错误码

<table>
<thead>
<tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
</thead>
<tbody>
<tr><td><code>106</code></td><td><code>system permission denied</code></td><td>Android</td><td>定位或蓝牙权限未授予</td><td>在系统设置中授予定位和蓝牙权限后重试</td></tr>
</tbody>
</table>

#### 通用错误码

<table>
<thead>
<tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
</thead>
<tbody>
<tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android</td></tr>
</tbody>
</table>

## 平台差异

- **iOS**：获取列表恒返回成功，不校验权限

## 相关类型

<a id="startbeacondiscoveryparams"></a>
### StartBeaconDiscoveryParams

开始搜索 iBeacon 的请求参数。

#### Properties

• **uuids**: `string[]` - 要搜索的 iBeacon UUID 列表
• **ignoreBluetoothAvailable?**: `boolean` - iOS 下是否忽略蓝牙可用性校验

<a id="beaconproximity"></a>
### BeaconProximity

iBeacon 距离等级。

#### Type

`0 | 1 | 2 | 3`

<a id="beaconinfo"></a>
### BeaconInfo

iBeacon 设备信息。

#### Properties

• **uuid**: `string` - Beacon UUID
• **major**: `number` - 主 ID
• **minor**: `number` - 次 ID
• **proximity**: `BeaconProximity` - 距离等级
• **accuracy**: `number` - 距离，单位米
• **rssi**: `number` - RSSI 信号强度，单位 dBm

<a id="getbeaconsresult"></a>
### GetBeaconsResult

获取 iBeacon 列表的返回结果。

#### Properties

• **beacons**: `BeaconInfo[]` - 当前搜到的 iBeacon 列表
