# cordova-acoustic-connect-beta 中文文档

规范地址：https://npmcn.com/package/cordova-acoustic-connect-beta/

版本：1\.1\.7
npm 元数据更新时间：2026-11-03T09:11:27.066Z
中文译文更新时间：2026-11-03T09:30:44.141Z
软件包许可：SEE LICENSE IN LICENSE

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/cordova-acoustic-connect-beta
原文对照：https://npmcn.com/package/cordova-acoustic-connect-beta/?lang=original
项目主页：https://github.com/aipoweredmarketer/cordova-acoustic-connect#readme
源码仓库：https://github.com/aipoweredmarketer/cordova-acoustic-connect

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：399 kB，29 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.0\.0
- 运行依赖：0 个
- 首次发布：2026-06-26T13:06:47.525Z
- 最新版本发布：2026-11-03T09:11:26.889Z
- 已发布版本数：55（近 12 个月 55 个）

## 中文简介

Cordova插件的声学连接（CDP +参与）。

## 安装

```sh
npm install cordova-acoustic-connect-beta
```

也可以使用：`pnpm add cordova-acoustic-connect-beta`、`yarn add cordova-acoustic-connect-beta`、`bun add cordova-acoustic-connect-beta`

## README

# cordova-acoustic-connect

Cordova插件 [声连接](https://acoustic.com/connect/) （CDP + engagement）。封装原生的iOS和Android Connect sdk，并公开一个基于promise的JavaScript API， `AcousticConnect`，到你的Cordova应用程序。

## 需求

| 要求 | 版本 |
| --- | --- |
| node . js | 20 + |
| 科尔多瓦CLI | `npm install -g cordova` |
| iOS部署目标 | 15.1 + |
| Xcode | 15 + |
| CocoaPods | `sudo gem install cocoapods` |
| 安卓 `minSdk` | 26 |
| Android Studio + SDK | 34 + |

## 安装

```sh
npx cordova plugin add cordova-acoustic-connect-beta
```

## 配置

创建 `ConnectConfig.json` 在你的Cordova项目根目录下（被忽略了——永远不要提交真正的凭据）：

```json
{
  "Connect": {
    "AppKey": "<your-app-key>",
    "PostMessageUrl": "<your-collector-url>",
    "useRelease": false,
    "iOSAppGroupIdentifier": "group.<your-bundle-id>",
    "iOSDevelopmentTeam": "<your-apple-team-id>",
    "AndroidVersion": "<optional-connect-android-sdk-version-override>",
    "iOSVersion": "<optional-connect-ios-sdk-version-override>",
    "PushEnabled": true,
    "iOSPushMode": "automatic",
    "AndroidNotificationIconResName": "<optional-drawable-name>",
    "KillSwitchEnabled": false,
    "KillSwitchUrl": "<optional-kill-switch-url>"
  }
}
```

| 场 | 描述 |
| --- | --- |
| `AppKey` | 必需的。连接应用程序键。 |
| `PostMessageUrl` | 必需的。连接收集器端点。 |
| `iOSAppGroupIdentifier` | 应用与iOS NSE/NCE扩展之间的共享应用组ID。 |
| `iOSDevelopmentTeam` | 苹果团队ID。自动设置Xcode签名团队，跳过下面的手动签名和功能步骤。 |
| `AndroidVersion` | pin特定的Connect Android SDK版本(`x.y.z`)，而不是插件的默认值(目前为 `11.1.30-beta`，或 `11.1.17` 发布与 `useRelease: true`）. 无效值将被忽略，并出现生成警告。 |
| `iOSVersion` | pin一个特定的Connect iOS SDK pod版本(`x.y.z`)，而不是插件的默认值(`>= 2.1.51`（浮动：CocoaPods解析最新的版本，对于发布和调试pod）。下面的值 `2.1.51` -第一次构建与iOS屏幕捕获和WebView修复-和非版本字符串被忽略与构建警告。 |
| `PushEnabled` | 可选的布尔, `true` 默认情况下（push一直在这个插件上）。 `false` 开发应用时不需要推送：在Android上只需要分析 `connect` 在iOS上，SDK是启用的，没有推送，构建没有 `ConnectNSE`/`ConnectNCE` 扩展，没有应用组或 `aps-environment` 权利和否 `remote-notification` 背景模式;这个 `push.*` 呼叫拒绝 `ACOUSTIC_PUSH_DISABLED`． 请参阅下面的“关闭按钮”。 |
| `iOSPushMode` | `'automatic'` (默认)或 `'manual'`． 只有iOS -安卓总是 `'automatic'` 在桥的边界。 |
| `AndroidNotificationIconResName` | Android上推送通知图标的可绘制资源名称。后备链：你的名字→插件的捆绑 `ic_notification` （正确的默认-启动器图标崩溃在交付）→ `ic_launcher` （遗留）→SDK自己的默认值。 |
| `KillSwitchEnabled` | `false` (默认)或 `true`． 在两个平台上控制本地SDK的远程终止开关-见下文。SDK自己的捆绑默认值是 `true`;这个插件默认是 `false` 所以应用程序必须明确选择加入。 |
| `KillSwitchUrl` | 远程终止开关检查URL。仅在以下情况下生效 `KillSwitchEnabled: true`。 |
| `LocationLoggingEnabled` | 可选的。省略字段（或集合） `null`)来保持原生SDK的默认值不变-不像 `KillSwitchEnabled`，这个插件可以 **不** 强制一个默认值。集 `true`/`false` 明确选择加入/退出SDK的位置数据收集。只停止位置数据到达收集器-不 **不** 删除 `CoreLocation` 链接从编译的iOS SDK，所以它自己不解决苹果的 `ITMS-90683` App Store警告(缺失 `NSLocationWhenInUseUsageDescription`）; 仍然需要Info。声明的plist键或没有CoreLocation链接的sdk端构建。 |
| `ScreenCaptureEnabled` | 可选布尔。省略它（或设置） `null`)或设置 `true` 保留SDK默认值（在每个屏幕上捕获的布局和截图）。 `false` 在两个平台上关闭布局和截图捕获，同时屏幕视图保持流动-参见 [屏幕截图和隐私](https://npmcn.com/package/cordova-acoustic-connect-beta/#readme-screen-capture-and-privacy)。 |
| `layoutConfig`， `layoutConfigIos`， `layoutConfigAndroid` | 带有SDK屏幕捕获规则的可选对象(`AutoLayout`， `AppendMapIds`）. `layoutConfig` 为共享基线；平台块在其上深度合并（对象合并，数组被替换）。看到 [屏幕截图和隐私](https://npmcn.com/package/cordova-acoustic-connect-beta/#readme-screen-capture-and-privacy)。 |

### 杀死开关

这两个原生sdk都默认开启了终止开关(`KillSwitchEnabled=true`）; 这个插件强制关闭它，除非你选择通过 `KillSwitchEnabled: true` + `KillSwitchUrl`。

-   **iOS**： `ConnectPlugin.swift`的 `enable()` 调用 `applyKillSwitchConfig()` 之前 _和_ 后 `ConnectSDK.shared.enable(...)` - SDK可能会重新加载其绑定的plist默认值(`KillSwitchEnabled=true`)，因此配置的值被重新应用两次，以使其保持不变。
-   **安卓**： `ConnectBasicConfig.properties` 集合 `KillSwitchEnabled` 在资产加载时，但这并不是最后的定论-原生SDK的2-arg `Tealeaf.enable(appKey, postMessageUrl)` (这 `handleEnable()` 调用)有一个无条件设置的内部处理程序 `KillSwitchEnabled=true` 并计算自己的URL，一次，在被调用后约100ms。 `ConnectPlugin.kt` 通过重新应用配置的值 `Connect.updateConfig(...)` 300毫秒后 `Connect.enable(...)`，轻松通过窗口，因此值（on或off）实际上是固定的。0参数绑定的auto-init路径(`tryBundledConfigInit`)根本没有击中这个内部处理程序，所以properties-file值已经正确地应用在那里，而不需要重新应用。

设备上验证：with `KillSwitchEnabled: true` 和一个真实的 `KillSwitchUrl`， Android SDK日志 `KillSwitchEnabled:true` 和 `Killswitch has enabled Tealeaf with following session id:...` -真正的异步kill-switch检查运行并完成。

插件的 `before_prepare` Hook在每个节点上读取这个文件 `cordova prepare` / `cordova build`。 `Connect.useRelease` 是使用本机SDK变体的单一事实来源，以及本机SDK日志记录是否冗长：

-   `true` → `AcousticConnect` （发布）pod在iOS上，发布连接工件在Android上。在Android上, `ConnectPlugin.kt` 也称 `Connect.updateConfig("DisplayLogging", "false", EOCore.getInstance())` 之后 `Connect.init()` 原生（Tealeaf/EOCore/Connect） logcat输出被抑制，不管应用的Gradle构建类型。
-   `false` (默认)→ `AcousticConnectDebug` iOS上的pod， Android上的详细本地logcat输出（SDK自己的默认值，保持不变）。Android总是使用相同的 `connect-push-fcm` Maven工件，不管 `useRelease` 没有单独的调试Maven构件。这个标志决定了Android从哪里解析Connect: with `false` github托管的Maven树(`go-acoustic/Android_Maven`，发布Connect测试版；它们不会到达Maven Central)在谷歌和Maven Central之后声明，仅限于 `io.github.go-acoustic` 集团;与 `true` 只使用Maven Central，拒绝所有测试版。它还会选择插件的默认Android版本： `11.1.30-beta` β与 `false`, `11.1.17` 发布与 `true`。

旗子通过 `www/AcousticConnectNativeConfig.json` (与iOS原生配置一起生成，捆绑到 `assets/www/` （by Cordova） -故意不通过应用程序级别 `EOCoreBasicConfig.properties` 资产覆盖，因为Android的资产合并取代 _整个_ 文件上的名称冲突和SDK的捆绑默认携带其他几个必需的密钥(例如。 `PostMessageTimeInterval`)，部分覆盖会悄无声息地下降，并在 `enable()` 时间。

Android在每次构建时都会读取新标记；iOS将CocoaPods的pod名称命名为 `plugin.xml` 当插件被安装后，所以修改 `useRelease` 你必须删除并重新添加插件才能生效：

```sh
npx cordova plugin rm co.acoustic.connect.push
npx cordova plugin add cordova-acoustic-connect-beta
npx cordova prepare ios
```

一个完整的 `cordova platform rm ios && cordova platform add ios` 是 **不** 这是必需的-早期版本的插件留下了陈旧 `"[CP] Prepare AcousticConnectDebug xcframeworks"` (或 `AcousticConnect`)脚本阶段落后于 `ConnectNSE`/`ConnectNCE` 调试↔释放开关后的目标，其参考 `.xcfilelist` 转换后不再存在，并且构建失败 `Unable to load contents of file list: ...`． 插件的 `after_prepare` hook现在在添加当前版本之前从以前的SDK变体中删除任何此类过时的阶段 `plugin rm`/`add` 以上的工作流程就足够了。

注意： `useRelease` 只控制本机SDK自己的logcat输出。插件桥自己的日志级别(`ConnectPlugin.kt`)分别通过 `AcousticConnect.setLogLevel()` 从JavaScript。

## 快速启动

```js
document.addEventListener('deviceready', async function () {
  await AcousticConnect.enable(
    'your-app-key',
    'https://your-collector-url',
    'automatic'
  );

  await AcousticConnect.logIdentity('email', 'user@example.com', 'loggedIn');
}, false);
```

`AcousticConnect` 可用作为CommonJS/ES模块导出和作为全局on `window` (安装通过插件的 `<clobbers>` 条目)，因此可以从plain访问它 `<script>`基于Cordova的应用程序或从 `import`/`require`。

## API参考

### `AcousticConnect.enable(appKey, postURL, pushMode?, options?)`

初始化并启用Connect SDK。必须从 `deviceready` 处理程序在任何其他插件方法之前。

-   `appKey: string`
-   `postURL: string`
-   `pushMode?: 'automatic' | 'manual'` -默认为 `'automatic'`
-   `options?: { iosAppGroupIdentifier?: string, androidIconResName?: string }`
-   返回 `Promise<void>`，拒绝 `{ code, message }` 无效参数或本机SDK启动失败。

### `AcousticConnect.disable()`

停止所有数据捕获和推送活动。返回 `Promise<void>`。

### `AcousticConnect.setLogLevel(level)`

`level: 'silent' | 'error' | 'warn' | 'info' | 'verbose'`． 仅影响网桥日志记录。返回 `Promise<void>`。

### `AcousticConnect.logIdentity(identifierName, identifierValue, signalType?, additionalParameters?)`

将身份信号记录到Connect SDK中。

-   `identifierName: string` ——如。 `'email'`， `'userId'`
-   `identifierValue: string` ——如。 `'user@example.com'`
-   `signalType?: string` -默认为 `'loggedIn'`
-   `additionalParameters?: Record<string, string>`
-   返回 `Promise<void>`

常见的电话:

```js
// Login
AcousticConnect.logIdentity('email', 'user@example.com', 'loggedIn', { loginMethod: 'email' });

// Registration
AcousticConnect.logIdentity('email', 'user@example.com', 'accountRegistered', { registrationMethod: 'email' });
```

### 分析

所有分析方法返回 `Promise<void>` 然后拒绝 `{ code, message }` （`ACOUSTIC_INVALID_ARGS` 对于糟糕的论点)。已解决的承诺意味着SDK **排队** 事件;这并不意味着收藏者拥有它。事件在设备上批处理并稍后发布，通常在应用程序进入后台时发布。

| 方法 | 笔记 |
| --- | --- |
| `logCustomEvent(eventName, values?, level?)` | `values` 是一个 **平** 对象的字符串/数字/布尔（Android SDK只携带字符串）。 `level` 是一个非负整数，默认值 `3`。 |
| `logSignal(values, level?)` | `values` 是任意JSON，包括嵌套的对象和数组。功能, `undefined`， `NaN`/`Infinity`、日期及通告参考资料均不获接纳。 |
| `setCurrentScreenName(name)` | 设置以后事件归属的屏幕名称。它本身不会发出屏幕视图。 |
| `logScreenViewContextLoad(name, referrer?)` | 进入屏幕的日志。 `referrer` 是前一个屏幕；空的或 `null` 意味着没有。 |
| `logScreenViewContextUnload(name, referrer?)` | 留下一个屏幕的日志。在Android上，SDK会丢弃屏幕视图，其屏幕名称在其队列中仍然有未发送的消息，因此卸载您刚刚加载的屏幕会拒绝 `ACOUSTIC_INTERNAL_ERROR` （`returned false`）. 卸载 _之前的_ 屏幕。 |
| `logClickEvent(controlId, data?)` | 作为 `click` **自定义事件** 携带 `controlId` 加上可选平房 `data`。 |
| `logTextChangeEvent(controlId, { text?, masked? })` | 作为 `textChange` 自定义事件。原文是 **默认为掩码** (每个字符变成 `X`（只保留长度），然后离开JavaScript。通过 `masked: false` 按原样发送——永远不要输入密码或个人数据。 |
| `logExceptionEvent(message, stackInfo?, unhandled?)` | 使用名称记录异常事件 `Cordova Plugin`，将消息作为其描述和 `unhandled` 国旗。堆栈文本到达 `stackTrace` 在Android上;在iOS `stackTrace` 是 `(null)` (一个 `NSException` 不携带调用堆栈)，文本在 `data.stacktrace`。 |
| `flushQueues()` | 持久化队列。它不会强制在Android上立即发布网络帖子。 |
| `isSdkEnabled()` | 解析一个严格的布尔值。 |
| `getSdkVersion()` | 解析本地Connect SDK自己的版本。 |

```js
await AcousticConnect.setCurrentScreenName('checkout');
await AcousticConnect.logScreenViewContextLoad('checkout', 'cart');
await AcousticConnect.logCustomEvent('coupon_applied', { code: 'SPRING', amount: 10 });
await AcousticConnect.logClickEvent('btnPay', { method: 'card' });
await AcousticConnect.logTextChangeEvent('txtEmail', { text: email });   // masked
```

注意事项：

-   **页面内的点击和输入不会被自动捕获。** 原生SDK无法看到WebView中的DOM事件，所以调用 `logClickEvent` / `logTextChangeEvent` 你自己（或你自己的听众）。原生控件事件api没有被使用：在设备上，iOS拒绝每个视图使用它们，而Android报告整个WebView作为目标。
-   **`logCustomEvent` 和 `logSignal` 每个平台上的有效载荷形状不同。** iOS将它们嵌套在 `data.value` （自定义事件）和 `signal.data.value` (信号);Android则不然。Android也将每个自定义事件的值作为字符串传递，iOS则保留JSON类型。在查询数据时请记住这一点。
-   **`logSignal` 在Android上:** 之前连接Android SDK版本 `11.0.24-beta` 在 _顶级_ 有效负载（到达字符串和布尔值；嵌套在对象或数组中的数字不受影响）。观察到在 `11.0.21-beta`； `11.1.10-beta` 发送它（在模拟器上检查），插件的默认值也是如此。只有当你干掉一个老家伙时才有意义 `AndroidVersion`：然后嵌套数值。

### 运行时配置项

```js
await AcousticConnect.setConfigItem('DisplayLogging', true, 'EOCore');
const interval = await AcousticConnect.getConfigItem('PostMessageTimeInterval', 0, 'EOCore'); // number
```

`setConfigItem(key, value, moduleName)` 接受布尔值、字符串或有限数。 `getConfigItem(key, defaultValue, moduleName)` 返回类型的值 `defaultValue`，并在未设置项或不适合该类型时返回默认值 `false` 保持 `false`）.

|  | 安卓 | iOS |
| --- | --- | --- |
| `moduleName` | 选择SDK模块(`EOCore`， `Tealeaf`， `Connect`）. 未知模块拒绝使用 `ACOUSTIC_INTERNAL_ERROR`。 | 忽略：一个配置存储。 |
| 读取SDK设置 | 例如，读取SDK自己的项 `DisplayLogging` 和 `PostMessageTimeInterval`。 | 你设置的项会被回读。Android的SDK密钥名称，如 `DisplayLogging` 和 `PostMessageTimeInterval` 尝试时返回默认值；没有检查其他sdk拥有的密钥。 |

一个可以解析的集合意味着SDK接受了该项，而不是它改变了行为：大多数项在SDK启动时被读取，所以在此之前设置它们 `enable()` 在你可以的地方。这两个调用都需要初始化SDK；在此之前, `setConfigItem` Android上的拒绝。

### 屏幕截图和隐私

默认情况下，本机SDK捕获视图层次结构和 **截图** 每个屏幕的。在iOS上，我们可以在每次测试中观察到这一点：屏幕图像的布局信息（类型10）加上屏幕视图本身。在Cordova应用程序中，页面是一个WebView，所以屏幕截图显示页面显示的内容，包括个人数据。

本地屏蔽规则(`Masking` 内部 `AutoLayout`)适用于 **仅本地控件**． 它们不会屏蔽WebView中的文本——WebView显示为一个控件。若要将页面内容排除在捕获之外，请关闭捕获：

```json
{ "Connect": { "ScreenCaptureEnabled": false } }
```

| 平台 | 什么 `false` 做 |
| --- | --- |
| iOS | 之后 `enable()`,集 `AutoLayout.GlobalScreenSettings.CaptureLayoutOn` 来 `0`． 在模拟器上验证：布局和截图停止，屏幕视图继续。 |
| 安卓 | 之前 `enable()`,集 `LogViewLayoutOnScreenTransition` 来 `false`。 **未在设备上验证的：** SDK捕获的布局停止；端到端的捕获阶段只能在iOS上运行。 |

**Android上的布局。** Android SDK从WebView屏幕发送一个布局（类型10） `11.1.10-beta`，比插件的默认值更老：在此之前，它等待页面内的Tealeaf web库的id，然后放弃布局。该插件还保留SDK的捕获设置(`PrintScreen`， `LogViewLayoutOnScreenTransition`， `ScreenshotFormat` 和其他人)在 `ConnectBasicConfig.properties` 因为那个文件取代了SDK自己的；没有它们，SDK拒绝每个布局捕获。该页面没有Tealeaf web库，因此布局将WebView列为一个控件 `dcid: "dcid-none"` 没有页面内容。

`layoutConfig`， `layoutConfigIos` 和 `layoutConfigAndroid` 携带SDK自己的屏幕规则：

```json
{
  "Connect": {
    "layoutConfig": {
      "AutoLayout": { "GlobalScreenSettings": { "CaptureLayoutDelay": 500 } }
    },
    "layoutConfigIos": {
      "AutoLayout": { "GlobalScreenSettings": { "CaptureLayoutOn": 0 } }
    }
  }
}
```

-   在构建时，平台块会深度合并到共享块之上（对象合并，数组被替换）。只有 `AutoLayout` 和 `AppendMapIds` 使用;其他键被忽略，并给出警告。
-   **iOS** 将块合并到SDK生效的规则上，因此部分块保留其余部分。
-   **安卓** 将块写入 `ConnectLayoutConfig.json` 在应用资产中，which **替换SDK的整个布局配置**． 给它一个完整的块或省略它；构建在以下情况下发出警告 `AutoLayout.GlobalScreenSettings` 不见了。 钩子生成 `ConnectLayoutConfig.json` (和 `ConnectBasicConfig.properties`)在你的Cordova项目根目录中 `cordova prepare`，所以把两者都加到你的 `.gitignore`。
-   只有 `CaptureLayoutOn: 0` 在iOS上生效。不要假定该键的其他值表示“开”。

### `AcousticConnect.push`

与推送相关的方法，命名空间位于 `push`：

| 方法 | 返回 | 笔记 |
| --- | --- | --- |
| `push.requestPermission()` | `Promise<{ granted: boolean, error?: string }>` | 显示操作系统级别的推送权限对话框。 |
| `push.getPermissionState()` | `Promise<boolean | null>` | 读取当前权限状态而不提示。 |
| `push.didReceiveAuthorization(granted, error?)` | `Promise<boolean>` | 将外部获取的权限结果转发给SDK。 |
| `push.didReceiveNotification(userInfo)` | `Promise<boolean>` | 仅限手动模式-从您自己的本机委托转发通知收据。 |
| `push.didReceiveResponse(actionIdentifier, userInfo)` | `Promise<boolean>` | 仅限手动模式-从您自己的本机委托转发通知轻拍响应。 |

在 `automatic` push模式（默认），SDK拥有原生推送委托和 `didReceiveNotification`/`didReceiveResponse` 不需要货代。它们存在的目的是 `manual` 模式，其中应用拥有自己的本机委托。

### 关闭推断

集 `"PushEnabled": false` 在 `ConnectConfig.json` 对于仅用于分析的应用：没有Firebase，也没有 `google-services.json` Android上没有推送权限、App Group或通知扩展，iOS上没有通知权限对话框。 `iOSAppGroupIdentifier`， `iOSPushMode` 和 `AndroidNotificationIconResName` 那就没有效果了。

-   Android在构建时读取设置(`build-extras.gradle`)， iOS期间 `cordova prepare` 在运行时。更改后运行 `cordova prepare` 和重建。
-   切换一个有推送的iOS项目： `cordova prepare` 以 `ConnectNSE` 和 `ConnectNCE` 目标从Xcode项目中取出它们的目标从Podfile中取出 `remote-notification` 背景模式关闭 `Info.plist` （当另一个插件或 `config.xml` 声明它，因为插件需要它)。应用程序组和 `aps-environment` 当push打开时插件添加的权利被保留，因为其他插件可能会共享它们：删除平台并重新添加(`cordova platform rm ios && cordova platform add ios`)来做一个没有他们的项目。
-   随着推离， `push.requestPermission()`， `push.getPermissionState()`， `push.didReceiveAuthorization()`， `push.didReceiveNotification()` 和 `push.didReceiveResponse()` 拒绝与 `{ code: 'ACOUSTIC_PUSH_DISABLED' }`； `enable()` 忽略了它 `pushMode` 论点。
-   `react-native-acoustic-connect` 和 `capacitor-acoustic-connect` 有相同的开关，但push默认是关闭的；这里它是默认打开的，这样现有的应用程序就不会改变。

## iOS推送设置（Xcode）

构建完成后，打开生成的 `.xcworkspace` 在Xcode中:

1.  选择项目→ **签名和功能** →设置团队。
2.  添加 **推送通知** 能力。

后台模式→远程通知权限由插件(`plugin.xml` 配置文件)，不需要手动切换。

## Android推送设置

放下一个真实的 `google-services.json` 到你的Cordova项目根目录（被忽略了）。插件的 `after_prepare` hook将其复制到每个生成的Android项目中 `cordova prepare`。

## 故障排除

常见的构建/推送问题和修复： [TROUBLESHOOTING.md](https://github.com/aipoweredmarketer/cordova-acoustic-connect/blob/main/TROUBLESHOOTING.md)。

## 许可证

在无担保程序的声学许可下许可。看到 [许可证](https://npmcn.com/package/cordova-acoustic-connect-beta/LICENSE) 完整的学期。

## 常见问题

### cordova-acoustic-connect-beta 是什么？

Cordova插件的声学连接（CDP \+参与）。

### 如何安装 cordova-acoustic-connect-beta？

在项目目录运行 npm install cordova-acoustic-connect-beta，或使用 pnpm add / yarn add / bun add。

### cordova-acoustic-connect-beta 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### cordova-acoustic-connect-beta 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### cordova-acoustic-connect-beta 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### cordova-acoustic-connect-beta 可以商用吗？

cordova-acoustic-connect-beta 使用 SEE LICENSE IN LICENSE 许可。许可条款写在包内的独立文件中，请阅读该文件确认可否商用。以上为概括，不构成法律意见，请以许可原文为准。

### cordova-acoustic-connect-beta 还在维护吗？

最新版本 1\.1\.7 发布于 2026/11/03（今天）；至今共发布 55 个版本，其中过去 12 个月发布了 55 个；首次发布于 2026/06/26。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

