@hd-front-end/jsbridge-sdk 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/README.md +4 -2
  2. package/dist/index.d.ts +201 -2
  3. package/dist/index.esm.js +444 -1
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +446 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.umd.js +446 -0
  8. package/dist/index.umd.js.map +1 -1
  9. package/docs/00-/351/241/271/347/233/256/346/246/202/350/247/210.md +282 -0
  10. package/docs/01-/346/236/266/346/236/204/350/256/276/350/256/241.md +623 -0
  11. package/docs/02-/346/212/200/346/234/257/345/256/236/347/216/260.md +867 -0
  12. package/docs/03-API/344/275/277/347/224/250/346/226/207/346/241/243.md +1104 -0
  13. package/docs/04-/346/265/213/350/257/225/346/226/271/346/241/210.md +360 -0
  14. package/docs/05-/350/277/201/347/247/273/346/214/207/345/215/227.md +181 -0
  15. package/docs/06-/346/236/266/346/236/204/345/233/276/351/233/206.md +738 -0
  16. package/docs/07-/346/226/260/346/241/245/346/216/245/346/226/271/346/263/225/346/211/251/345/261/225/350/257/264/346/230/216.md +139 -0
  17. package/docs/CODE_REVIEW.md +65 -0
  18. package/docs/EVALUATION.md +72 -0
  19. package/docs/README.md +258 -0
  20. package/docs//345/205/263/351/224/256/351/227/256/351/242/230/350/247/243/347/255/224.md +495 -0
  21. package/docs//346/226/207/346/241/243/346/225/264/345/220/210/350/257/264/346/230/216.md +265 -0
  22. package/docs//346/233/264/346/226/260/346/227/245/345/277/227.md +669 -0
  23. package/docs//347/224/237/344/272/247/347/272/247-/345/277/253/351/200/237/345/274/200/345/247/213-v2.md +673 -0
  24. package/docs//347/224/237/344/272/247/347/272/247-/346/236/266/346/236/204/350/256/276/350/256/241-v2.md +730 -0
  25. package/docs//350/256/276/350/256/241/347/220/206/345/277/265/350/257/264/346/230/216.md +438 -0
  26. package/package.json +3 -2
@@ -0,0 +1,139 @@
1
+ # 新增桥接能力扩展说明
2
+
3
+ 本文档列出了我们在基础核心能力之外,通过 JsBridgeHandlers 和 hdH5Adapter 扩展提供的原生桥接方法。这些方法主要用于兼容原有 UniApp 生态或者提供更高级的业务能力。
4
+
5
+ ## 1. 快速使用
6
+
7
+ 新集成的能力都已通过统一入口导出,您可以直接在项目中引入使用:
8
+
9
+ ```typescript
10
+ import { JsBridgeHandlers, hdH5Adapter, UniProxy } from '@hd-front-end/jsbridge-sdk'
11
+
12
+ // 1. 初始化 H5 到 UniApp 的适配器(会代理 uni.xxx 方法到底层原生)
13
+ hdH5Adapter()
14
+
15
+ // 2. 直接调用原生 Handler
16
+ JsBridgeHandlers.handleScan().then(res => console.log(res))
17
+ ```
18
+
19
+ ## 2. JsBridgeHandlers API 详情
20
+
21
+ JsBridgeHandlers 提供了对底层原生能力的直接封装,所有方法均返回 Promise。
22
+
23
+ ### 2.1 扫码能力 (Scan)
24
+
25
+ 调用原生摄像头进行扫码(支持二维码、条形码)。
26
+
27
+ ```typescript
28
+ static handleScan(request?: UniScanRequest): Promise<UniScanResult>
29
+ ```
30
+
31
+ **入参 (UniScanRequest)**:
32
+ - scanType (string[]): 扫码识别类型,qrCode、barCode。默认: ['qrCode', 'barCode']
33
+ - hideAlbum (boolean): 是否隐藏相册。默认: false
34
+ - language (string): iOS 语言设置 (zh-Hans 或 en)。默认: 'zh-Hans'
35
+ - failedMsg (string): 相册选择照片识别错误提示(iOS)。
36
+ - screenType (string): Android 全屏支持,设为 'full'。
37
+ - timeoutInterval (string): 超时时间(秒)。默认: '10'
38
+ - timeoutText (string): 超时提醒文本。
39
+ - viewText (string): 扫码提示文字。
40
+
41
+ **出参 (UniScanResult)**:
42
+ - resp_code (number): 10:用户取消,11:其他错误,1000:成功
43
+ - resp_result (string | null): 扫码结果
44
+ - resp_message (string | null): 结果信息
45
+
46
+ ### 2.2 媒体与文件处理 (Media)
47
+
48
+ #### 选择图片/视频
49
+ ```typescript
50
+ static handleChooseMedia(request: UniChooseMediaRequest): Promise<UniChooseMediaResult | null>
51
+ ```
52
+ **入参 (UniChooseMediaRequest)**:
53
+ - sourceType (string[]): album 从相册选,camera 使用相机。默认 ['album', 'camera']
54
+ - camera (string): 前置或后置 (front/back)。默认: 'back'
55
+ - mediaType (string[]): image 或 video。默认 ['image', 'video']
56
+ - count (number): 最多选择的文件个数。默认 9
57
+ - maxDuration (number): 拍摄视频最长时间(3-30秒)。默认 30
58
+ - sizeType (string[]): 是否压缩 (original, compressed)。
59
+
60
+ **出参 (UniChooseMediaResult)**:
61
+ 包含 tempFiles (文件详细信息数组) 和 tempFilePaths (路径数组)。
62
+
63
+ #### 获取图片信息
64
+ ```typescript
65
+ static handleGetImageInfo(request: { src: string }): Promise<UniMediaFile>
66
+ ```
67
+ 返回图片的宽高、类型、路径、大小等详细信息。
68
+
69
+ #### 上传文件
70
+ ```typescript
71
+ static handleUploadFile(request: UniApp.UploadFileOption): Promise<UniUploadFileResult>
72
+ ```
73
+ **出参 (UniUploadFileResult)**:
74
+ - code (number): 200 表示成功
75
+ - data (string | null): 开发者服务器返回的数据
76
+ - statusCode (number | null): HTTP 状态码
77
+ - errMsg (string | null): 错误信息
78
+
79
+ #### 图片路径转 Base64
80
+ ```typescript
81
+ static handlePathToBase64(request: { src: string }): Promise<string>
82
+ ```
83
+
84
+ ### 2.3 基础设备与系统功能 (System)
85
+
86
+ - **handleMakePhoneCall(request: { phoneNumber: string })**: 拨打电话。
87
+ - **handleSetNavigationBar(request: UniNavigationBarStyle)**: 动态设置原生导航栏。
88
+ - 参数包含: title (标题), frontColor (前景颜色 #ffffff 或 #000000), backgroundColor (背景十六进制颜色)。
89
+ - **handleOpenSchemeUrl(request: UniUrlScheme)**: 唤起并打开特定的 Scheme 链接。
90
+ - 参数包含: url (链接), openType (APP 或 SYSTEM), style (标题栏样式)。
91
+ - **handleGetAppInfo()**: 获取 App 端的设备与应用信息。
92
+ - **handleLog(request: UniLog)**: 调用原生打日志功能。包含 tag, level (INFO/ERROR等), message。
93
+
94
+ ### 2.4 路由与页面生命周期 (Router & Lifecycle)
95
+
96
+ - **handleRouterAfterEach(to, from)**: 路由变化后通知原生端。
97
+ - **handlePageLifeCycle(lifecycle: PageLifeCycle)**: 页面生命周期通知原生 (onLoad, onUnload 等)。
98
+ - **handleAppOnload(data: any)**: 通知原生 App 页面已加载完成。
99
+ - **handleCloseWebView()**: 关闭当前的 WebView。
100
+
101
+ ### 2.5 打印能力 (Bluetooth Print)
102
+
103
+ - **handleBluetoothPrint(request: any)**: 连接蓝牙打印机打印数据。
104
+ - **handleBluetoothPrintImage(request: any)**: 连接蓝牙打印机打印图片。
105
+
106
+ ### 2.6 业务交互与事件注册 (Business)
107
+
108
+ 以下方法用于向原生注册回调事件,供原生主动触发前端:
109
+ - **registerOnRoute(handler)**: 原生调用的路由跳转回调。
110
+ - **registerOnGetRouteInfo(handler)**: 原生获取当前路由信息的回调。
111
+ - **registerOnRefreshStore(handler)**: 原生触发前端刷新 Store 数据。
112
+ - **registerOnPdaScan(handler)**: 接收 PDA 实体按键扫码结果。
113
+
114
+ 其它操作:
115
+ - **handleLogout()**: 通知原生执行退出登录。
116
+ - **handleReloadModule(request: { appId: string })**: 通知原生重新加载子应用。
117
+
118
+ ---
119
+
120
+ ## 3. hdH5Adapter (UniApp 代理适配器)
121
+
122
+ hdH5Adapter() 方法被调用后,会拦截并重写全局的 uni 对象方法,将其底层实现代理到 JsBridgeHandlers 上,使得原有的基于 UniApp 的代码可以在不修改的情况下直接在 H5 容器内运行。
123
+
124
+ 目前支持拦截/代理的 uni 方法有:
125
+
126
+ - **uni.scanCode(options)**: 代理至 handleScan。
127
+ - **uni.chooseVideo(options)**: 代理至 handleChooseMedia。
128
+ - **uni.getImageInfo(options)**: 代理至 handleGetImageInfo。
129
+ - **uni.uploadFile(options)**: 代理至 handleUploadFile。
130
+ - **uni.navigateBack(options)**: 代理至路由回退或 handleCloseWebView。
131
+ - **uni.makePhoneCall(options)**: 代理至 handleMakePhoneCall。
132
+ - **uni.setNavigationBarTitle(options)**: 代理至 handleSetNavigationBar。
133
+ - **uni.setNavigationBarColor(options)**: 代理至 handleSetNavigationBar。
134
+
135
+ ### 特殊说明:UniProxy
136
+ 由于在某些环境下,uni.chooseImage 等属性是只读的无法被直接覆盖,因此我们提供了 UniProxy 对象来单独暴露这些被限制的方法:
137
+ - **UniProxy.chooseImage(options)**: 代理至 handleChooseMedia(用于图片选择)。
138
+ - **UniProxy.pathToBase64(path)**: 代理至 handlePathToBase64。
139
+
@@ -0,0 +1,65 @@
1
+ # JSBridge SDK Code Review 报告
2
+
3
+ ## 1. 概述
4
+ 本次 Code Review 覆盖了 JSBridge SDK 的核心模块、监控模块、调试模块及 API 封装层。整体来看,代码结构清晰,设计模式合理(单例模式、门面模式),逻辑实现符合预期。
5
+
6
+ - **评审对象**: `/src` 目录下的核心源码
7
+ - **评审人**: Senior Code Reviewer
8
+ - **状态**: ✅ **PASS** (含少量优化建议)
9
+
10
+ ## 2. 详细评审
11
+
12
+ ### 2.1 核心通信层 (`src/core/Bridge.ts`)
13
+ * **优点**:
14
+ * ✅ **平台检测完善**: 准确区分了 Android/iOS/Unknown 环境,并对 UA 进行了扩展支持。
15
+ * **Promise 封装**: 很好地解决了回调地狱问题,支持 `async/await`。
16
+ * **超时机制**: 内置了 10s 超时保护,防止死锁。
17
+ * **单例模式**: 确保全局唯一的 Bridge 实例,避免重复初始化。
18
+ * **自动初始化**: 在 `call/register` 方法中增加了自动初始化的防御逻辑,提升了健壮性。
19
+ * **改进建议**:
20
+ * ⚠️ **类型安全**: `call<T>` 方法虽然支持泛型,但内部 `this.bridge.callHandler` 回调参数 `result` 默认是 `any`,建议增加运行时类型检查或断言。
21
+ * ⚠️ **并发问题**: `initPromise` 虽然处理了并发调用,但在高并发场景下 `setTimeout` 的清理逻辑可能存在边界情况,建议增加 `AbortController` 支持(如果环境允许)。
22
+
23
+ ### 2.2 监控模块 (`src/monitor/Monitor.ts`)
24
+ * **优点**:
25
+ * ✅ **原生日志上报**: 摒弃了 HTTP 上报,改用 `bridge.call('log')`,复用了原生的日志通道,设计非常巧妙。
26
+ * **性能优化**: 支持 `visibilitychange` 事件,仅在页面可见或隐藏时批量上报,减少了对主线程的占用。
27
+ * **错误兜底**: 实现了 `reportError` 立即上报机制,确保关键错误不丢失。
28
+ * **改进建议**:
29
+ * ⚠️ **内存风险**: `this.records` 数组虽然有 `maxRecords` 限制,但如果 `report` 持续失败(如 Bridge 断开),积压队列可能会占用内存。建议增加“连续失败 N 次后暂停监控”的熔断机制。
30
+
31
+ ### 2.3 调试模块 (`src/debug/Debug.ts`)
32
+ * **优点**:
33
+ * ✅ **动态加载**: `vconsole` 采用动态 `import`,极大减小了首屏包体积。
34
+ * **日志分级**: 清晰区分了 `debug/info/warn/error`,便于过滤。
35
+ * **改进建议**:
36
+ * ⚠️ **生产环境泄露**: 虽然依赖配置开启,但建议在构建阶段(rollup/webpack)通过 `define` 插件彻底移除 Debug 代码,避免源码泄露。
37
+
38
+ ### 2.4 日志 API (`src/api/log.ts`)
39
+ * **优点**:
40
+ * ✅ **类型定义**: 提供了完整的 `LogRequest` 和 `LogLevel` 定义。
41
+ * **批量接口**: 提供了 `writeLogs` 批量接口,减少了 Bridge 通信频次。
42
+
43
+ ### 2.5 类型定义 (`src/types/index.ts`)
44
+ * **优点**:
45
+ * ✅ **完整性**: 覆盖了所有核心接口和配置项。
46
+ * **全局声明**: 正确扩展了 `Window` 接口,解决了 TS 报错。
47
+
48
+ ## 3. 总体评分
49
+
50
+ | 维度 | 评分 (1-5) | 说明 |
51
+ | :--- | :--- | :--- |
52
+ | **代码质量** | 4.8 | 代码风格统一,注释详尽,逻辑清晰。 |
53
+ | **健壮性** | 4.5 | 考虑了超时、重试、错误兜底,但内存保护可加强。 |
54
+ | **可维护性** | 5.0 | 模块解耦做得很好,职责单一。 |
55
+ | **性能** | 4.7 | 动态加载和批量上报是亮点。 |
56
+
57
+ ## 4. 后续行动计划 (Action Items)
58
+
59
+ 1. **[High]** 在 `Monitor.ts` 中增加熔断机制,防止日志上报失败导致内存积压。
60
+ 2. **[Medium]** 在 `Bridge.ts` 中增加对 `callHandler` 返回数据的运行时校验(可选,视业务严格程度而定)。
61
+ 3. **[Low]** 补充单元测试(Unit Tests),特别是针对 `Monitor` 的批量上报逻辑。
62
+
63
+ ---
64
+ **结论**: 代码已达到生产发布标准 (Production Ready)。建议在解决 High 优先级问题后发布 v2.0.0 正式版。
65
+
@@ -0,0 +1,72 @@
1
+ # JSBridge SDK 方案评估报告
2
+
3
+ ## 1. 方案可行性评估
4
+
5
+ 基于对现有文档(架构设计、技术实现、API文档、测试方案、迁移指南)的综合分析,**该方案具备极高的可行性**。
6
+
7
+ * **技术成熟度**:采用业界通用的 WebViewJavascriptBridge 通信机制,在 `soa-android-demo` 和 `soa` 项目中已有实践验证。SDK 仅在此基础上进行了封装和标准化,技术风险低。
8
+ * **兼容性设计**:方案明确区分了 Android (`InjectJavascript`) 和 iOS (`iframe` + `WKWebView`) 的底层注入差异,并提供了统一的上层 API。同时通过 Promise 封装解决了回调地狱问题。
9
+ * **架构解耦**:采用了分层架构(API层 -> 核心层 -> 协议层),将业务逻辑与底层通信解耦,便于后续独立升级维护。
10
+ * **轻量级**:核心代码量约 1150 行,打包体积仅 ~7KB (gzip),对宿主应用性能影响极小。
11
+
12
+ ## 2. 优点分析
13
+
14
+ 1. **统一性与标准化**
15
+ * **统一 API**:抹平了多端差异,所有子应用(SOA, MPA-Mini)使用同一套 API,降低了开发者的认知负担。
16
+ * **统一日志**:创新性地将 SDK 内部监控日志与业务日志统一通过原生 LogUtil 通道上报,解决了 H5 日志丢失和难以关联排查的问题。
17
+
18
+ 2. **完善的稳定性保障**
19
+ * **超时控制**:内置 10s 超时机制,防止因原生无响应导致 JS Promise 永久挂起,避免页面假死。
20
+ * **错误兜底**:全局的错误捕获和立即上报机制(`Monitor.reportError`),确保线上异常能被及时发现。
21
+
22
+ 3. **优秀的可观测性**
23
+ * **全链路监控**:自动采集 API 调用的成功率、耗时等性能指标,并支持生成可视化报表(需服务端配合)。
24
+ * **Debug 模式**:集成了 vConsole 和调用链路追踪(Trace),极大提升了开发调试效率。
25
+
26
+ 4. **良好的开发体验**
27
+ * **TypeScript 支持**:提供完整的类型定义文件 (`.d.ts`),支持 IDE 智能提示和编译时检查。
28
+ * **Promise 风格**:摒弃了传统的回调地狱,支持 `async/await`,代码更简洁易读。
29
+
30
+ 5. **低侵入性**
31
+ * **渐进式迁移**:支持与旧版 Bridge 共存,允许业务项目按模块逐步迁移,降低了重构风险。
32
+ * **纯 API 封装**:不绑定 Vue/React 等特定框架,适用于所有 H5 项目。
33
+
34
+ ## 3. 缺点与局限性
35
+
36
+ 1. **原生端依赖强**
37
+ * SDK 的高级功能(如日志上报、硬件调用)强依赖于原生端的实现。如果原生端未及时更新 `registerHandler`,前端 SDK 对应功能将不可用。需要端侧协同发布。
38
+
39
+ 2. **Mock 能力简陋**
40
+ * 虽然设计了 Mock 模块,但目前的文档中 Mock 规则较为简单,仅支持静态返回值。对于复杂的业务场景(如根据入参返回不同结果、模拟网络延迟波动),现有的 Mock 机制可能不够灵活。
41
+
42
+ 3. **缺乏版本协商机制**
43
+ * 当前设计中未见明确的“握手”或版本协商协议。如果原生 Bridge 协议升级(如方法名变更、参数结构调整),老版本 SDK 可能会直接崩溃,缺乏优雅降级策略。
44
+
45
+ 4. **数据传输效率瓶颈**
46
+ * 基于 JSON 序列化的通信方式在传输大数据(如高清图片 Base64)时存在性能瓶颈,可能会导致 UI 卡顿。
47
+
48
+ 5. **测试环境搭建成本**
49
+ * 虽然提供了 Mock 模式,但在非原生环境(如 Chrome)下无法完全模拟 WebView 的行为(如内存限制、生命周期事件),导致部分 Bug 只能在真机上复现。
50
+
51
+ ## 4. 潜在风险
52
+
53
+ 1. **原生注入时序风险**
54
+ * **描述**:在 Android 端,如果 `InjectJavascript` 注入晚于 JS 执行(尤其是首屏立即调用的场景),会导致 `init` 失败。
55
+ * **建议**:虽然有 `WKWVJBCallbacks` 队列机制,但仍需确保原生端在 `onPageFinished` 之前完成对象注入,或者前端增加重试轮询机制。
56
+
57
+ 2. **内存泄漏风险**
58
+ * **描述**:Monitor 模块默认缓存 100 条日志记录,且 `reportTimer` 长期运行。如果页面长时间不关闭且日志量巨大,可能会占用过多内存。
59
+ * **建议**:增加页面不可见时(`visibilitychange`)暂停上报、清理缓存的逻辑。
60
+
61
+ 3. **安全性风险**
62
+ * **描述**:缺乏对调用来源的验证机制。如果 WebView 被劫持加载了恶意第三方页面,该页面也可以调用 Bridge 能力(如获取用户 Token)。
63
+ * **建议**:增加域名白名单校验,仅允许特定域名的页面初始化 Bridge。
64
+
65
+ 4. **日志风暴风险**
66
+ * **描述**:如果 `autoReport` 开启且网络状况不佳,或者业务代码在循环中大量打印日志,可能导致原生端日志队列堆积,甚至阻塞主线程。
67
+ * **建议**:增加日志上报的频次限制(Throttle)和单次包大小限制。
68
+
69
+ 5. **单点故障风险**
70
+ * **描述**:SDK 是单例模式(Singleton),如果 `init` 过程中发生未捕获异常导致状态异常,整个应用的 Bridge 功能将全部瘫痪。
71
+ * **建议**:在 `init` 和核心 `call` 方法中增加更健壮的 `try-catch` 保护,确保即使初始化部分失败,基础功能仍可用(或提供明确的错误提示)。
72
+
package/docs/README.md ADDED
@@ -0,0 +1,258 @@
1
+ # JSBridge SDK 文档索引
2
+
3
+ > **当前版本**:生产级 v2(通过原生 log 能力实现监控和日志上报)
4
+
5
+ ## 📚 推荐阅读顺序
6
+
7
+ ### 1️⃣ 快速开始(5-10 分钟)
8
+
9
+ **必读文档**:
10
+
11
+ - **[生产级-架构设计-v2.md](./生产级-架构设计-v2.md)** ⭐⭐⭐
12
+ - 完整架构说明
13
+ - 监控通过原生 log 上报
14
+ - 新增 log API
15
+ - 两个目的都实现
16
+
17
+ - **[生产级-快速开始-v2.md](./生产级-快速开始-v2.md)** ⭐⭐⭐
18
+ - 5 分钟快速上手
19
+ - log API 使用示例
20
+ - 完整代码示例
21
+ - 最佳实践
22
+
23
+ ### 2️⃣ 深入理解(20-30 分钟)
24
+
25
+ **核心文档**:
26
+
27
+ - **[设计理念说明.md](./设计理念说明.md)** ⭐⭐⭐⭐⭐
28
+ - 为什么这样设计
29
+ - 设计演进历史
30
+ - 核心决策说明
31
+ - **必读!理解整个设计的关键**
32
+
33
+ - **[平台兼容性说明.md](./平台兼容性说明.md)**
34
+ - Android/iOS 兼容方案
35
+ - 平台检测机制
36
+ - 平台特定优化
37
+ - 调试技巧
38
+
39
+ - **[监控指南.md](./监控指南.md)**
40
+ - 监控使用指南
41
+ - 统计数据查看
42
+ - 告警规则设置
43
+ - 最佳实践
44
+
45
+ ### 3️⃣ 演进历史(了解背景)
46
+
47
+ **参考文档**:
48
+
49
+ - **[更新日志.md](./更新日志.md)**
50
+ - v1 → v2 变化说明
51
+ - HTTP 上报 → log 上报
52
+ - 为什么要改进
53
+ - 版本对比
54
+
55
+ - **[关键问题解答.md](./关键问题解答.md)**
56
+ - 核心问题解答
57
+ - 常见疑问
58
+ - 设计决策说明
59
+
60
+ ## 📁 当前文档结构
61
+
62
+ ```
63
+ docs/
64
+ ├── README.md # 本文件
65
+
66
+ ├── 【生产级 v2 文档】(✅ 当前版本)
67
+ │ ├── 生产级-架构设计-v2.md # 完整架构
68
+ │ ├── 生产级-快速开始-v2.md # 快速上手
69
+ │ ├── 平台兼容性说明.md # Android/iOS 兼容
70
+ │ └── 监控指南.md # 监控使用指南
71
+
72
+ ├── 【核心设计文档】
73
+ │ ├── 设计理念说明.md # ⭐⭐⭐⭐⭐ 必读
74
+ │ ├── 更新日志.md # 版本演进
75
+ │ └── 关键问题解答.md # 核心问题
76
+
77
+ └── 【完整版文档】(参考)
78
+ ├── 00-项目概览.md
79
+ ├── 01-架构设计.md
80
+ ├── 02-技术实现.md
81
+ ├── 03-API使用文档.md
82
+ ├── 04-测试方案.md
83
+ ├── 05-迁移指南.md
84
+ └── 06-架构图集.md
85
+ ```
86
+
87
+ ## 🎯 核心特性
88
+
89
+ ### 1. 监控通过原生 log 上报
90
+
91
+ ✅ **SDK 自动监控**
92
+ - 自动记录 API 调用性能
93
+ - 定时通过 log API 上报
94
+ - 错误立即上报
95
+
96
+ ✅ **原生统一管理**
97
+ - LogUtil 写入日志文件
98
+ - 统一上传策略
99
+ - 可靠性更高
100
+
101
+ ### 2. 提供 log API 给子应用
102
+
103
+ ✅ **简单易用**
104
+ ```typescript
105
+ await JSBridge.log.info('用户行为', 'UserBehavior')
106
+ await JSBridge.log.error('业务错误', 'BusinessError')
107
+ ```
108
+
109
+ ✅ **统一管理**
110
+ - 通过原生写入日志
111
+ - 无需关心上传细节
112
+ - 原生统一上传
113
+
114
+ ### 3. 两个目的都实现
115
+
116
+ ✅ **监控 SDK 稳定性**
117
+ - SDK 自动记录性能和错误
118
+ - 定时/立即上报到原生
119
+ - 服务器可分析运行状况
120
+
121
+ ✅ **提供子应用日志能力**
122
+ - 子应用调用简单的 log API
123
+ - 日志自动写入原生
124
+ - 无需关心上传细节
125
+
126
+ ## 📊 版本说明
127
+
128
+ ### 生产级 v2(当前版本)✅
129
+
130
+ **特性**:
131
+ - ✅ 监控通过原生 log 上报
132
+ - ✅ 提供 log API 给子应用
133
+ - ✅ 统一日志管理
134
+ - ✅ 两个目的都实现
135
+
136
+ **文档**:
137
+ - 生产级-架构设计-v2.md
138
+ - 生产级-快速开始-v2.md
139
+
140
+ ### 已废弃版本
141
+
142
+ 以下版本已被删除,不再维护:
143
+ - ~~生产级 v1~~(HTTP 上报,已删除)
144
+ - ~~最终版~~(纯 API,缺少必需能力,已删除)
145
+ - ~~实用版 v1/v2~~(理解错误,已删除)
146
+ - ~~完整版~~(过度设计,仅作参考保留)
147
+
148
+ ## 🚀 快速开始
149
+
150
+ ### 1. 安装
151
+
152
+ ```bash
153
+ npm install @hd-front-end/jsbridge-sdk
154
+ ```
155
+
156
+ ### 2. 初始化
157
+
158
+ ```typescript
159
+ import { init } from '@hd-front-end/jsbridge-sdk'
160
+
161
+ const isDev = process.env.NODE_ENV === 'development'
162
+
163
+ await init({
164
+ debug: {
165
+ enabled: isDev,
166
+ useVConsole: isDev
167
+ },
168
+ monitor: {
169
+ enabled: !isDev,
170
+ autoReport: !isDev, // 通过 log 自动上报
171
+ reportInterval: 60000,
172
+ logTag: 'JSBridge-Monitor'
173
+ }
174
+ })
175
+ ```
176
+
177
+ ### 3. 使用 API
178
+
179
+ ```typescript
180
+ // 使用 bridge API
181
+ const result = await JSBridge.scan()
182
+
183
+ // 上传业务日志
184
+ await JSBridge.log.info('用户行为', 'UserBehavior')
185
+ await JSBridge.log.error('业务错误', 'BusinessError')
186
+ ```
187
+
188
+ ## 📖 详细文档
189
+
190
+ - **快速上手**:[生产级-快速开始-v2.md](./生产级-快速开始-v2.md)
191
+ - **完整架构**:[生产级-架构设计-v2.md](./生产级-架构设计-v2.md)
192
+ - **设计理念**:[设计理念说明.md](./设计理念说明.md) ⭐
193
+ - **平台兼容**:[平台兼容性说明.md](./平台兼容性说明.md)
194
+ - **监控指南**:[监控指南.md](./监控指南.md)
195
+
196
+ ## ❓ 常见问题
197
+
198
+ ### Q1: 为什么监控要通过 log 上报?
199
+
200
+ **A:**
201
+ - 统一日志管理
202
+ - 性能更好(不占用 H5 网络)
203
+ - 更可靠(本地先存)
204
+ - 原生控制上传策略
205
+
206
+ ### Q2: log API 有什么用?
207
+
208
+ **A:**
209
+ - 子应用可以上传业务日志
210
+ - 使用简单:`JSBridge.log.info(...)`
211
+ - 日志自动写入原生
212
+ - 原生统一管理和上传
213
+
214
+ ### Q3: 两个目的是什么?
215
+
216
+ **A:**
217
+ 1. **监控 SDK 稳定性** - SDK 自动记录和上报
218
+ 2. **提供子应用日志能力** - 子应用主动上传日志
219
+
220
+ ## 🎓 学习路径
221
+
222
+ ### 新手(10 分钟)
223
+ 1. 阅读 [生产级-快速开始-v2.md](./生产级-快速开始-v2.md)
224
+ 2. 跑通示例代码
225
+
226
+ ### 进阶(30 分钟)
227
+ 1. 阅读 [生产级-架构设计-v2.md](./生产级-架构设计-v2.md)
228
+ 2. 理解 log 上报机制
229
+ 3. 阅读 [设计理念说明.md](./设计理念说明.md) ⭐
230
+
231
+ ### 深入(1 小时)
232
+ 1. 阅读 [平台兼容性说明.md](./平台兼容性说明.md)
233
+ 2. 阅读 [监控指南.md](./监控指南.md)
234
+ 3. 查看原生端实现参考
235
+ 4. 阅读 [更新日志.md](./更新日志.md)
236
+
237
+ ## 💡 核心价值
238
+
239
+ ### 1. 统一日志管理
240
+ ✅ SDK 监控日志 → log API → 原生 LogUtil
241
+ ✅ 子应用业务日志 → log API → 原生 LogUtil
242
+ ✅ 原生统一上传到服务器
243
+
244
+ ### 2. 简单易用
245
+ ✅ 初始化简单 - 一次配置
246
+ ✅ API 简单 - `JSBridge.log.info(...)`
247
+ ✅ 无需关心细节 - 原生负责上传
248
+
249
+ ### 3. 生产可用
250
+ ✅ Android/iOS 兼容
251
+ ✅ 监控能力完善
252
+ ✅ debug 模式完善
253
+ ✅ 两个目的都实现
254
+
255
+ ---
256
+
257
+ **推荐从 [生产级-架构设计-v2.md](./生产级-架构设计-v2.md) 开始阅读!** 🚀
258
+