cordova-acoustic-connect-beta

中文文档
1.1.7发布于 2026/11/03SEE LICENSE IN LICENSETypeScriptCommonJS零依赖

Cordova插件的声学连接(CDP +参与)。

中文使用文档
文档目录19 节
  1. 需求
  2. 安装
  3. 配置
  4. 杀死开关
  5. 快速启动
  6. API参考
  7. AcousticConnect.enable(appKey, postURL, pushMode?, options?)
  8. AcousticConnect.disable()
  9. AcousticConnect.setLogLevel(level)
  10. AcousticConnect.logIdentity(identifierName, identifierValue…
  11. 分析
  12. 运行时配置项
  13. 屏幕截图和隐私
  14. AcousticConnect.push
  15. 关闭推断
  16. iOS推送设置(Xcode)
  17. Android推送设置
  18. 故障排除
  19. 许可证

cordova-acoustic-connect

Cordova插件 声连接 (CDP + engagement)。封装原生的iOS和Android Connect sdk,并公开一个基于promise的JavaScript API, AcousticConnect,到你的Cordova应用程序。

需求

要求版本
node . js20 +
科尔多瓦CLInpm install -g cordova
iOS部署目标15.1 +
Xcode15 +
CocoaPodssudo gem install cocoapods
安卓 minSdk26
Android Studio + SDK34 +

安装

npx cordova plugin add cordova-acoustic-connect-beta

配置

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

{
  "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签名团队,跳过下面的手动签名和功能步骤。
AndroidVersionpin特定的Connect Android SDK版本(x.y.z),而不是插件的默认值(目前为 11.1.30-beta,或 11.1.17 发布与 useRelease: true). 无效值将被忽略,并出现生成警告。
iOSVersionpin一个特定的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' 在桥的边界。
AndroidNotificationIconResNameAndroid上推送通知图标的可绘制资源名称。后备链:你的名字→插件的捆绑 ic_notification (正确的默认-启动器图标崩溃在交付)→ ic_launcher (遗留)→SDK自己的默认值。
KillSwitchEnabledfalse (默认)或 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 在两个平台上关闭布局和截图捕获,同时屏幕视图保持流动-参见 屏幕截图和隐私。
layoutConfig, layoutConfigIos, layoutConfigAndroid带有SDK屏幕捕获规则的可选对象(AutoLayout, AppendMapIds). layoutConfig 为共享基线;平台块在其上深度合并(对象合并,数组被替换)。看到 屏幕截图和隐私。

杀死开关

这两个原生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 你必须删除并重新添加插件才能生效:

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。

快速启动

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

  await AcousticConnect.logIdentity('email', '[email protected]', '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 ——如。 '[email protected]'
  • signalType?: string -默认为 'loggedIn'
  • additionalParameters?: Record<string, string>
  • 返回 Promise<void>

常见的电话:

// Login
AcousticConnect.logIdentity('email', '[email protected]', 'loggedIn', { loginMethod: 'email' });

// Registration
AcousticConnect.logIdentity('email', '[email protected]', '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自己的版本。
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:然后嵌套数值。

运行时配置项

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显示为一个控件。若要将页面内容排除在捕获之外,请关闭捕获:

{ "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自己的屏幕规则:

{
  "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。

许可证

在无担保程序的声学许可下许可。看到 许可证 完整的学期。

版本与发布记录

cordova-acoustic-connect-beta 共发布 55 个版本,首次发布于 2026/06/26;过去 12 个月发布了 55 个版本。

版本发布日期距今
1.1.7latest2026/11/03今天
1.1.52026/10/277 天前
1.1.42026/10/267 天前
1.1.32026/10/2212 天前
1.1.22026/10/2112 天前
1.1.12026/10/2013 天前

其他发布通道:beta → 0.1.5。

关于 cordova-acoustic-connect-beta 的常见问题

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 和提交记录判断。