@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.
- package/README.md +4 -2
- package/dist/index.d.ts +201 -2
- package/dist/index.esm.js +444 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +446 -0
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +446 -0
- package/dist/index.umd.js.map +1 -1
- package/docs/00-/351/241/271/347/233/256/346/246/202/350/247/210.md +282 -0
- package/docs/01-/346/236/266/346/236/204/350/256/276/350/256/241.md +623 -0
- package/docs/02-/346/212/200/346/234/257/345/256/236/347/216/260.md +867 -0
- package/docs/03-API/344/275/277/347/224/250/346/226/207/346/241/243.md +1104 -0
- package/docs/04-/346/265/213/350/257/225/346/226/271/346/241/210.md +360 -0
- package/docs/05-/350/277/201/347/247/273/346/214/207/345/215/227.md +181 -0
- package/docs/06-/346/236/266/346/236/204/345/233/276/351/233/206.md +738 -0
- 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
- package/docs/CODE_REVIEW.md +65 -0
- package/docs/EVALUATION.md +72 -0
- package/docs/README.md +258 -0
- package/docs//345/205/263/351/224/256/351/227/256/351/242/230/350/247/243/347/255/224.md +495 -0
- package/docs//346/226/207/346/241/243/346/225/264/345/220/210/350/257/264/346/230/216.md +265 -0
- package/docs//346/233/264/346/226/260/346/227/245/345/277/227.md +669 -0
- 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
- 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
- package/docs//350/256/276/350/256/241/347/220/206/345/277/265/350/257/264/346/230/216.md +438 -0
- package/package.json +3 -2
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# JSBridge SDK 项目概览(生产级 v2)
|
|
2
|
+
|
|
3
|
+
> **10 分钟快速了解项目**
|
|
4
|
+
|
|
5
|
+
## 1. 项目简介
|
|
6
|
+
|
|
7
|
+
### 1.1 项目背景
|
|
8
|
+
|
|
9
|
+
基于 `soa`、`mpa-mini-v3` 和 `soa-android-demo` 项目的 JSBridge 实现经验,我们开发了生产可用的 JSBridge SDK,解决:
|
|
10
|
+
|
|
11
|
+
- ❌ 代码重复:多项目相同实现
|
|
12
|
+
- ❌ 维护困难:同步修改多个项目
|
|
13
|
+
- ❌ 功能不统一:实现细节差异
|
|
14
|
+
- ❌ 监控缺失:无法了解运行状况
|
|
15
|
+
- ❌ 日志困难:缺少统一日志能力
|
|
16
|
+
|
|
17
|
+
### 1.2 项目目标
|
|
18
|
+
|
|
19
|
+
✅ **职责单一** - 只封装原生 API
|
|
20
|
+
✅ **双平台** - 兼容 Android/iOS
|
|
21
|
+
✅ **统一日志** - 监控和业务日志通过原生 log
|
|
22
|
+
✅ **稳定可观测** - 完善的错误处理和监控
|
|
23
|
+
|
|
24
|
+
### 1.3 两个目的
|
|
25
|
+
|
|
26
|
+
1. **监控 SDK 稳定性** - 自动记录性能和错误
|
|
27
|
+
2. **提供日志能力** - 子应用可上传业务日志
|
|
28
|
+
|
|
29
|
+
## 2. 核心特性
|
|
30
|
+
|
|
31
|
+
### 2.1 纯粹的 API 封装
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { JSBridge } from '@hd-front-end/jsbridge-sdk'
|
|
35
|
+
|
|
36
|
+
// 简单直接
|
|
37
|
+
const result = await JSBridge.scan()
|
|
38
|
+
const media = await JSBridge.chooseMedia({ count: 1 })
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**不包含**:适配层、框架封装、业务逻辑
|
|
42
|
+
|
|
43
|
+
### 2.2 统一日志管理
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
// SDK 自动监控
|
|
47
|
+
await init({
|
|
48
|
+
monitor: { enabled: true, autoReport: true }
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
// 子应用上传日志
|
|
52
|
+
await JSBridge.log.info('用户点击购买', 'UserBehavior')
|
|
53
|
+
await JSBridge.log.error('支付失败', 'Payment')
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**日志流程**:
|
|
57
|
+
```
|
|
58
|
+
SDK监控/子应用 → log API → 原生LogUtil → 日志文件 → 服务器
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 2.3 双平台兼容
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { getPlatform, Platform } from '@hd-front-end/jsbridge-sdk'
|
|
65
|
+
|
|
66
|
+
const platform = getPlatform() // 'android' | 'ios'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
- ✅ Android:`InjectJavascript.init()`
|
|
70
|
+
- ✅ iOS:iframe 触发
|
|
71
|
+
- ✅ 统一API接口
|
|
72
|
+
|
|
73
|
+
### 2.4 TypeScript 支持
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
interface ScanResult {
|
|
77
|
+
resp_code: number
|
|
78
|
+
resp_result: string
|
|
79
|
+
resp_message: string
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const result: ScanResult = await JSBridge.scan()
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 3. 快速开始
|
|
86
|
+
|
|
87
|
+
### 3.1 安装
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npm install @hd-front-end/jsbridge-sdk
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 3.2 初始化
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { init, JSBridge } from '@hd-front-end/jsbridge-sdk'
|
|
97
|
+
|
|
98
|
+
await init({
|
|
99
|
+
debug: { enabled: isDev, useVConsole: isDev },
|
|
100
|
+
monitor: { enabled: !isDev, autoReport: !isDev }
|
|
101
|
+
})
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 3.3 使用 API
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// 设备能力
|
|
108
|
+
await JSBridge.scan()
|
|
109
|
+
await JSBridge.chooseMedia({ count: 1 })
|
|
110
|
+
await JSBridge.getDeviceInfo()
|
|
111
|
+
|
|
112
|
+
// 日志能力(新增)
|
|
113
|
+
await JSBridge.log.info('用户行为', 'UserBehavior')
|
|
114
|
+
await JSBridge.log.error('业务错误', 'Error')
|
|
115
|
+
|
|
116
|
+
// 监控能力
|
|
117
|
+
import { Monitor } from '@hd-front-end/jsbridge-sdk'
|
|
118
|
+
const stats = Monitor.getStats('scan')
|
|
119
|
+
await Monitor.report()
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 4. 核心能力概览
|
|
123
|
+
|
|
124
|
+
| 分类 | 能力 |
|
|
125
|
+
|------|------|
|
|
126
|
+
| **设备** | 扫码、振动、设备信息、网络类型 |
|
|
127
|
+
| **媒体** | 选择媒体、上传文件、预览图片、蓝牙打印 |
|
|
128
|
+
| **路由** | 设置标题、关闭WebView、路由回调 |
|
|
129
|
+
| **存储** | 获取/设置存储、App信息、刷新Store |
|
|
130
|
+
| **系统** | 打电话、PDA扫码 |
|
|
131
|
+
| **日志** | debug/info/warn/error ← 新增 |
|
|
132
|
+
| **监控** | 性能统计、调用记录、错误上报 |
|
|
133
|
+
|
|
134
|
+
## 5. 技术指标
|
|
135
|
+
|
|
136
|
+
| 指标 | 数值 |
|
|
137
|
+
|------|------|
|
|
138
|
+
| **代码行数** | ~1150 行 |
|
|
139
|
+
| **文件数量** | 11 个 |
|
|
140
|
+
| **打包体积** | ~7KB (gzip) |
|
|
141
|
+
| **初始化时间** | < 100ms |
|
|
142
|
+
| **平台支持** | Android/iOS |
|
|
143
|
+
|
|
144
|
+
## 6. 对比优势
|
|
145
|
+
|
|
146
|
+
### vs 直接使用原生 Bridge
|
|
147
|
+
|
|
148
|
+
| 维度 | 原生 | SDK |
|
|
149
|
+
|------|------|-----|
|
|
150
|
+
| **易用性** | ⚠️ 复杂 | ✅ 简单 |
|
|
151
|
+
| **类型支持** | ❌ 无 | ✅ 完整 |
|
|
152
|
+
| **监控** | ❌ 无 | ✅ 自动 |
|
|
153
|
+
| **日志** | ❌ 无 | ✅ 有 |
|
|
154
|
+
|
|
155
|
+
### vs uni-app 内置
|
|
156
|
+
|
|
157
|
+
| 维度 | uni-app | SDK |
|
|
158
|
+
|------|---------|-----|
|
|
159
|
+
| **职责** | ⚠️ 框架绑定 | ✅ 纯API |
|
|
160
|
+
| **灵活性** | ⚠️ 受限 | ✅ 灵活 |
|
|
161
|
+
| **监控** | ❌ 无 | ✅ 有 |
|
|
162
|
+
| **日志** | ❌ 无 | ✅ 有 |
|
|
163
|
+
|
|
164
|
+
## 7. 项目价值
|
|
165
|
+
|
|
166
|
+
### 7.1 统一日志管理
|
|
167
|
+
|
|
168
|
+
✅ SDK监控日志自动上报
|
|
169
|
+
✅ 子应用可主动上传日志
|
|
170
|
+
✅ 原生统一管理和上传
|
|
171
|
+
|
|
172
|
+
### 7.2 两个目的实现
|
|
173
|
+
|
|
174
|
+
**监控 SDK 稳定性**:
|
|
175
|
+
- 自动记录性能数据
|
|
176
|
+
- 自动记录错误信息
|
|
177
|
+
- 定时/立即通过log上报
|
|
178
|
+
|
|
179
|
+
**提供日志能力**:
|
|
180
|
+
- 简单API:`JSBridge.log.info(...)`
|
|
181
|
+
- 自动写入原生日志
|
|
182
|
+
- 原生统一管理
|
|
183
|
+
|
|
184
|
+
### 7.3 开发效率提升
|
|
185
|
+
|
|
186
|
+
✅ 减少重复代码
|
|
187
|
+
✅ 降低维护成本
|
|
188
|
+
✅ 提升开发体验
|
|
189
|
+
✅ npm安装即用
|
|
190
|
+
|
|
191
|
+
## 8. 使用场景
|
|
192
|
+
|
|
193
|
+
### 直接使用(推荐)
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
// 简单直接
|
|
197
|
+
const result = await JSBridge.scan()
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**适合**:新项目、不需要uni API兼容
|
|
201
|
+
|
|
202
|
+
### 封装适配层(可选)
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// 子应用自己封装
|
|
206
|
+
export function setupUniAdapter() {
|
|
207
|
+
uni.scanCode = (options) => JSBridge.scan({...})
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**适合**:已有uni API代码、需要兼容
|
|
212
|
+
|
|
213
|
+
## 9. 完整示例
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
// App.vue
|
|
217
|
+
import { init, JSBridge } from '@hd-front-end/jsbridge-sdk'
|
|
218
|
+
|
|
219
|
+
export default {
|
|
220
|
+
async onLaunch() {
|
|
221
|
+
// 初始化
|
|
222
|
+
await init({
|
|
223
|
+
debug: { enabled: isDev, useVConsole: isDev },
|
|
224
|
+
monitor: { enabled: !isDev, autoReport: !isDev }
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
// 记录启动
|
|
228
|
+
await JSBridge.log.info('App启动', 'AppLifeCycle')
|
|
229
|
+
|
|
230
|
+
// 注册回调
|
|
231
|
+
JSBridge.onRoute((data) => this.$Router.replaceAll(data))
|
|
232
|
+
|
|
233
|
+
// 获取初始数据
|
|
234
|
+
const appInfo = await JSBridge.getAppInfo()
|
|
235
|
+
this.refreshStore(JSON.parse(appInfo))
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// 业务组件
|
|
240
|
+
export default {
|
|
241
|
+
methods: {
|
|
242
|
+
async handleScan() {
|
|
243
|
+
// 记录用户行为
|
|
244
|
+
await JSBridge.log.info('点击扫码', 'UserBehavior')
|
|
245
|
+
|
|
246
|
+
try {
|
|
247
|
+
const result = await JSBridge.scan()
|
|
248
|
+
await JSBridge.log.info('扫码成功', 'ScanResult')
|
|
249
|
+
} catch (error) {
|
|
250
|
+
await JSBridge.log.error('扫码失败', 'ScanError')
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## 10. 版本说明
|
|
258
|
+
|
|
259
|
+
### 当前:生产级 v2
|
|
260
|
+
|
|
261
|
+
**核心特性**:
|
|
262
|
+
- ✅ 监控通过原生log上报
|
|
263
|
+
- ✅ 提供log API给子应用
|
|
264
|
+
- ✅ 统一日志管理
|
|
265
|
+
|
|
266
|
+
**vs v1**:
|
|
267
|
+
- ❌ v1:HTTP上报(错误)
|
|
268
|
+
- ✅ v2:log上报(正确)
|
|
269
|
+
- ✅ v2:新增log API
|
|
270
|
+
|
|
271
|
+
## 11. 深入学习
|
|
272
|
+
|
|
273
|
+
- **[01-架构设计.md](./01-架构设计.md)** - 详细架构设计
|
|
274
|
+
- **[02-技术实现.md](./02-技术实现.md)** - 完整代码实现
|
|
275
|
+
- **[03-API使用文档.md](./03-API使用文档.md)** - API详细文档
|
|
276
|
+
- **[生产级-架构设计-v2.md](./生产级-架构设计-v2.md)** - 完整架构
|
|
277
|
+
- **[生产级-快速开始-v2.md](./生产级-快速开始-v2.md)** - 快速上手
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
**简洁高效,统一管理** 🎯
|
|
282
|
+
|