# React Native 接入

> 通过内测桥模块在 React Native 里复用 Embedded SDK 的设备能力:扫描、绑定、同步。

开发者平台处于内测阶段,接口契约以联调时提供的正式文档为准。账号由对接工程师开通,详见联系我们。

React Native 团队可以通过桥模块(内测)复用 Embedded 的 iOS 能力,而不必用原生写整套设备逻辑。桥模块底层仍是 iOS SDK,通过原生模块把方法与事件暴露到 JS 层。

## 安装

桥模块以内测形式随开通邮件发放,拷贝进你的项目 modules/ 目录即可被自动识别。

  bash
    
  

  
```
# 桥模块地址随开通邮件发放
git clone https://<你的内测 Git 地址>/ikho-embedded-react-native.git

# 拷贝模块到你的 RN 工程
cp -R ikho-embedded-react-native/modules/ikho-embedded your-app/modules/ikho-embedded
```

## 原生模块链接

在 app.json 声明蓝牙与麦克风权限,然后执行 prebuild 让原生模块生效。

  app.json
    
  

  
```
{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSBluetoothAlwaysUsageDescription": "用于连接 iKho 录音卡并同步录音",
        "NSMicrophoneUsageDescription": "用于在应用内录制与试听音频",
        "UIBackgroundModes": ["bluetooth-central"]
      }
    }
  }
}
```

  bash
    
  

  
```
npx expo prebuild -p ios
npx expo run:ios --device   # 需真机 iPhone
```

## TS 侧 API 形态

  ts
    
  

  
```
import { IKhoEmbedded } from class="tk-str">'ikho-embedded';

await IKhoEmbedded.configure({ userToken });

const subs = [
  IKhoEmbedded.onScanResult(({ devices }) => { /* 展示设备 */ }),
  IKhoEmbedded.onProgress(({ recordingId, progress }) => { /* 同步进度 */ }),
];

await IKhoEmbedded.scanDevices();
await IKhoEmbedded.bindDevice({ serialNumber });
const { files } = await IKhoEmbedded.syncRecordings();

subs.forEach((s) => s.remove());
```

## 与纯原生的能力差异

桥模块覆盖最常用的设备能力;更进阶的用法(如 Wi-Fi 快传的完整控制)建议扩展桥模块或直接用原生 iOS SDK。

  | 能力 | 纯原生 iOS SDK | React Native 桥(内测) 

  | 扫描与绑定 | 支持 | 支持 
| BLE 同步 | 支持 | 支持 
| 设备状态与电量 | 支持 | 支持 
| Wi-Fi 快传 | 支持 | 需扩展桥方法 
| 后台续传 | 支持 | 需额外配置 

完整方法与回调以 iOS SDK 参考为准;桥模块只是它的 JS 封装。
