@kbapp/js-bridge 1.0.12-alpha.0 → 1.0.14-alpha.0

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 CHANGED
@@ -1,1323 +1,108 @@
1
- # 开吧客户端桥接
2
-
3
- > ⚠️ 重要提示:本 SDK 基于 TypeScript 开发,所有 API 参数均带有明确的必填 / 选填类型标注。使用时请务必开启 TS 类型检查或在 IDE 中查看参数提示,必填项缺失会直接提示错误,选填项可按需传入,请勿忽略类型提示以避免使用异常。
4
-
5
- ## 下载
6
-
7
- npm:
8
-
9
- ```js
10
- npm i @kbapp/js-bridge
11
- ```
12
-
13
- ### 或通过 script 标签引入
14
-
15
- 使用 unpkg CDN:
16
-
17
- ```html
18
- <script src="https://unpkg.com/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
19
- ```
20
-
21
- 使用 jsdelivr CDN:
22
-
23
- ```html
24
- <script src="https://cdn.jsdelivr.net/npm/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
25
- ```
26
-
27
- > 通过 script 标签引入后,SDK 将作为全局变量 `kbBridge` 挂载在 window 对象上
28
-
29
- ## 测试页面
30
-
31
- [https://unpkg.com/@kbapp/js-bridge@latest/examples/index.html](https://unpkg.com/@kbapp/js-bridge@latest/examples/index.html)
32
-
33
- ## 示例
34
-
35
- ```js
36
- import { saveImageToLocal } from '@kbapp/js-bridge'
37
-
38
- function saveImageHandle() {
39
- saveImageToLocal({
40
- imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
41
- success() {
42
- console.log('执行成功')
43
- },
44
- })
45
- }
46
- ```
47
-
48
- ### 通过 script 标签引入的使用示例
49
-
50
- ```html
51
- <script src="https://unpkg.com/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
52
- <script>
53
- async function saveImageHandle() {
54
- // 通过全局变量kbBridge访问SDK功能
55
- kbBridge.saveImageToLocal({
56
- imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
57
- success() {
58
- console.log('保存成功')
59
- },
60
- fail(error) {
61
- console.log('保存失败', error)
62
- },
63
- })
64
- }
65
- </script>
66
- ```
67
-
68
- ## API
69
-
70
- ### 总览
71
-
72
- | 桥接 type | 方法 | 说明 |
73
- | --------- | -------------------------------- | ------------------------- |
74
- | - | `defineBridgeCallback` | 定义桥接调用的回调函数 |
75
- | - | `runBridgeApi` | 执行桥接(无返回值) |
76
- | - | `runBridgeApiResponse` | 执行桥接(等待响应) |
77
- | - | `isAppVersionSupport` | 判断当前版本号是否支持 |
78
- | -1 | `closeWebView` | 关闭当前 webview |
79
- | - | `onAppSharePanelShow` | 监听分享面板打开事件 |
80
- | 12 | `defineAppShareModel` | 定义页面分享内容 |
81
- | 58 | `openAppSharePanel` | 主动唤起分享面板 |
82
- | 68 | `defineAppSharePanelState` | 定义分享面板控件布局 |
83
- | 13 | `openPostEditor` | 唤起发帖器 |
84
- | 26 | `scanQRCode` | 扫描二维码 |
85
- | 35 | `getAppBaseInfo` | 获取设备信息 |
86
- | 51 | `generateKBSign` | 生成 kbsign |
87
- | 56 | `checkForNewVersion` | 检测是否有新版本 |
88
- | 58 | `shareImage` | 分享海报 |
89
- | 64 | `setWebViewTitle` | 设置网页标题 |
90
- | 62 | `saveImageToLocal` | 保存图片到本地 |
91
- | 63 | `saveVideoToLocal` | 保存视频到本地 |
92
- | 69 | `reportDAEvent` | 上报数据埋点 |
93
- | - | `onLoopCheckAppLogin` | 启动轮询检查 APP 登录状态 |
94
- | 31 | `getAppLoginInfo` | 获取 app 登录信息 |
95
- | 31 | `triggerAppLogin` | 触发 app 登录 |
96
- | 71 | `setScreenOrientation` | 设置屏幕方向 |
97
- | 72 | `getAppSubscribeNotifyStatus` | 获取APP订阅通知状态 |
98
- | 73 | `openAppSubscribeNotifySettings` | 前往/打开 app订阅管理页面 |
99
- | 1001 | `runAction` | 执行 action |
100
-
101
- | 类/枚举 | 说明 |
102
- | --------------- | --------------------- |
103
- | `BridgeCode` | kbapp 桥接状态码 |
104
- | `IS_KB_APP_ENV` | 是否在开吧 APP 环境中 |
105
- | `AppLoginInfo` | 登录信息模型 |
106
- | `AppShareModel` | 应用分享模型 |
107
- | `AppBaseInfo` | 设备信息模型 |
108
-
109
- ### checkForNewVersion
110
-
111
- > 检测是否有新版本可用, iOS 无论是否有最新版本都直接跳转到应用商店, 安卓如果有新版,则弹窗提示,没有的话 toast 提示无新版本
112
-
113
- #### 请求参数
114
-
115
- | 参数 | 类型 | 必填 | 说明 |
116
- | ---------- | ----------------------------- | ---- | -------- |
117
- | `success` | `() => void` | 否 | 成功回调 |
118
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
119
- | `complete` | `() => void` | 否 | 完成回调 |
120
-
121
- #### 返回值
122
-
123
- ```js
124
- Promise<void>
125
- ```
126
-
127
- #### 示例代码
128
-
129
- ```js
130
- import { checkForNewVersion } from '@kbapp/js-bridge'
131
-
132
- checkForNewVersion({
133
- success() {
134
- console.log('检查成功')
135
- },
136
- fail(error) {
137
- console.log('检查失败', error)
138
- },
139
- })
140
- ```
141
-
142
- > 支持 Promise 风格调用
143
-
144
- ---
145
-
146
- ### closeWebView
147
-
148
- > 关闭当前 webview
149
-
150
- #### 请求参数
151
-
152
- | 参数 | 类型 | 必填 | 说明 |
153
- | ---------- | ----------------------------- | ---- | -------- |
154
- | `success` | `() => void` | 否 | 成功回调 |
155
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
156
- | `complete` | `() => void` | 否 | 完成回调 |
157
-
158
- #### 返回值
159
-
160
- ```js
161
- Promise<void>
162
- ```
163
-
164
- #### 示例代码
165
-
166
- ```js
167
- import { closeWebView } from '@kbapp/js-bridge'
168
-
169
- closeWebView({
170
- success() {
171
- console.log('关闭成功')
172
- },
173
- fail(error) {
174
- console.log('关闭失败', error)
175
- },
176
- })
177
- ```
178
-
179
- > 支持 Promise 风格调用
180
-
181
- ---
182
-
183
- ### definePermissionUsage
184
-
185
- > 定义隐私权限协议文案
186
-
187
- #### 请求参数
188
-
189
- | 参数 | 类型 | 必填 | 说明 |
190
- | ------------------------ | ----------------------------- | ---- | -------------- |
191
- | `microphone` | `object` | 否 | 麦克风权限说明 |
192
- | `microphone.description` | `string` | 是 | 麦克风权限描述 |
193
- | `camera` | `object` | 否 | 相机权限说明 |
194
- | `camera.description` | `string` | 是 | 相机权限描述 |
195
- | `location` | `object` | 否 | 位置权限说明 |
196
- | `location.description` | `string` | 是 | 位置权限描述 |
197
- | `success` | `() => void` | 否 | 成功回调 |
198
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
199
- | `complete` | `() => void` | 否 | 完成回调 |
200
-
201
- #### 返回值
202
-
203
- ```js
204
- Promise<void>
205
- ```
206
-
207
- #### 示例代码
208
-
209
- ```js
210
- import { definePermissionUsage } from '@kbapp/js-bridge'
211
-
212
- definePermissionUsage({
213
- microphone: { description: '用于发帖上传音频' },
214
- location: { description: '获取你选择的位置信息,用于线下导航服务' },
215
- camera: { description: '收集你选中的照片或视频信息,用于发表评论、分享视频' },
216
- success() {
217
- console.log('设置成功')
218
- },
219
- fail(error) {
220
- console.log('设置失败', error)
221
- },
222
- })
223
- ```
224
-
225
- > 支持 Promise 风格调用
226
-
227
- ---
228
-
229
- ### defineAppShareModel
230
-
231
- > 定义 app 点击转发时候的分享卡片内容
232
-
233
- #### 请求参数 方式 1
234
-
235
- | 参数 | 类型 | 必填 | 说明 |
236
- | ---------- | ----------------------------- | ---- | ------------ |
237
- | `title` | `string` | 是 | 分享标题 |
238
- | `content` | `string` | 否 | 分享内容 |
239
- | `imageUrl` | `string` | 是 | 分享图片 URL |
240
- | `url` | `string` | 是 | 分享链接 URL |
241
- | `success` | `() => void` | 否 | 成功回调 |
242
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
243
- | `complete` | `() => void` | 否 | 完成回调 |
244
-
245
- #### 请求参数 方式 2
246
-
247
- | 参数 | 类型 | 必填 | 说明 |
248
- | ------------ | ----------------------------- | ---- | -------------------------------------------- |
249
- | `onShareApp` | `() => AppShareModel` | 是 | 点击分享时触发的函数,返回分享模型(方式 2) |
250
- | `success` | `() => void` | 否 | 成功回调 |
251
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
252
- | `complete` | `() => void` | 否 | 完成回调 |
253
-
254
- #### 返回值
255
-
256
- ```js
257
- Promise<void>
258
- ```
259
-
260
- #### 示例代码
261
-
262
- ```js
263
- import { defineAppShareModel } from '@kbapp/js-bridge'
264
-
265
- // 方式1:直接提供分享模型
266
- defineAppShareModel({
267
- title: '分享标题',
268
- content: '分享内容',
269
- imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
270
- url: 'http://www.kaiba315.com.cn/',
271
- success() {
272
- console.log('设置成功')
273
- },
274
- fail(error) {
275
- console.log('设置失败', error)
276
- },
277
- })
278
-
279
- // 方式2:提供分享模型函数(点击分享时动态生成分享内容)
280
- defineAppShareModel({
281
- onShareApp() {
282
- // 点击页面右上角或分享按钮时触发该回调,动态生成分享内容
283
- return {
284
- title: '动态生成的分享标题',
285
- content: '动态生成的分享内容',
286
- imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
287
- url: 'http://www.kaiba315.com.cn/?t=' + Date.now(),
288
- }
289
- },
290
- success() {
291
- console.log('设置成功')
292
- },
293
- fail(error) {
294
- console.log('设置失败', error)
295
- },
296
- })
297
- ```
298
-
299
- > 支持 Promise 风格调用
300
-
301
- ---
302
-
303
- ### defineAppSharePanelState
304
-
305
- > 定义页面是否显示右上角分享菜单, 定义分享面板显示的相关状态
306
-
307
- #### 请求参数
308
-
309
- | 参数 | 类型 | 必填 | 说明 |
310
- | ------------ | ----------------------------- | ---- | --------------------------------------------------------------------------------------------- |
311
- | `showMenu` | `boolean` | 是 | 是否显示右上角 ... 菜单 |
312
- | `panelStyle` | `0 1 2` | 否 | 显示分享面板布局, 0:正常显示. 1:只显示复制链接,浏览器打开相关. 2:只显示分享微信、QQ等. 默认 0 |
313
- | `success` | `() => void` | 否 | 成功回调 |
314
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
315
- | `complete` | `() => void` | 否 | 完成回调 |
316
-
317
- #### 返回值
318
-
319
- ```js
320
- Promise<void>
321
- ```
322
-
323
- #### 示例代码
324
-
325
- ```js
326
- import { defineAppSharePanelState } from '@kbapp/js-bridge'
327
-
328
- defineAppSharePanelState({
329
- showMenu: true,
330
- panelStyle: 0,
331
- success() {
332
- console.log('设置成功')
333
- },
334
- fail(error) {
335
- console.log('设置失败', error)
336
- },
337
- })
338
- ```
339
-
340
- > 支持 Promise 风格调用
341
-
342
- ---
343
-
344
- ### generateKBSign
345
-
346
- > 生成 kbsign
347
-
348
- #### 请求参数
349
-
350
- | 参数 | 类型 | 必填 | 说明 |
351
- | ------------ | ----------------------------- | ---- | ---------------------- |
352
- | `kbSignTime` | `number` | 是 | 签名时间戳 |
353
- | `kbSignType` | `number` | 是 | 签名类型 |
354
- | `...` | `any` | 否 | 其他需要签名的参数 |
355
- | `success` | `(res: string) => void` | 否 | 成功回调,返回签名结果 |
356
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
357
- | `complete` | `() => void` | 否 | 完成回调 |
358
-
359
- #### 返回值
360
-
361
- ```js
362
- Promise<string>
363
- ```
364
-
365
- #### 示例代码
366
-
367
- ```js
368
- import { generateKBSign } from '@kbapp/js-bridge'
369
-
370
- generateKBSign({
371
- kbSignTime: Date.now(),
372
- kbSignType: 1,
373
- // 其他参数...
374
- success(kbSign) {
375
- console.log('签名结果', kbSign)
376
- },
377
- fail(error) {
378
- console.log('签名失败', error)
379
- },
380
- })
381
- ```
382
-
383
- > 支持 Promise 风格调用
384
-
385
- ---
386
-
387
- ### getAppLoginInfo
388
-
389
- > 获取 app 登录信息.如果未登录返回 null
390
-
391
- #### 请求参数
392
-
393
- | 参数 | 类型 | 必填 | 说明 |
394
- | ---------- | ----------------------------- | -------------- | -------- | -------- |
395
- | `success` | `(res: AppLoginInfo | null) => void` | 否 | 成功回调 |
396
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
397
- | `complete` | `() => void` | 否 | 完成回调 |
398
-
399
- #### 返回值
400
-
401
- ```js
402
- Promise<AppLoginInfo | null>
403
- ```
404
-
405
- #### 示例代码
406
-
407
- ```js
408
- import { getAppLoginInfo } from '@kbapp/js-bridge'
409
-
410
- getAppLoginInfo({
411
- success(loginInfo) {
412
- if (loginInfo) {
413
- console.log('已登录', loginInfo)
414
- } else {
415
- console.log('未登录')
416
- }
417
- },
418
- fail(error) {
419
- console.log('获取登录信息失败', error)
420
- },
421
- })
422
- ```
423
-
424
- > 支持 Promise 风格调用
425
-
426
- ---
427
-
428
- ### getAppBaseInfo
429
-
430
- > 获取设备信息
431
-
432
- #### 请求参数
433
-
434
- | 参数 | 类型 | 必填 | 说明 |
435
- | ---------- | ----------------------------- | ---- | -------- |
436
- | `success` | `(res: AppBaseInfo) => void` | 否 | 成功回调 |
437
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
438
- | `complete` | `() => void` | 否 | 完成回调 |
439
-
440
- #### 返回值
441
-
442
- ```js
443
- Promise<AppBaseInfo>
444
- ```
445
-
446
- #### 示例代码
447
-
448
- ```js
449
- import { getAppBaseInfo } from '@kbapp/js-bridge'
450
-
451
- getAppBaseInfo({
452
- success(deviceInfo) {
453
- console.log('设备信息', deviceInfo)
454
- console.log('版本号', deviceInfo.vcode)
455
- },
456
- fail(error) {
457
- console.log('获取设备信息失败', error)
458
- },
459
- })
460
- ```
461
-
462
- > 支持 Promise 风格调用
463
-
464
- ---
465
-
466
- ### openAppSharePanel
467
-
468
- > 主动唤起分享面板
469
-
470
- #### 请求参数
471
-
472
- | 参数 | 类型 | 必填 | 说明 |
473
- | ---------- | ----------------------------- | ---- | ------------ |
474
- | `title` | `string` | 是 | 分享标题 |
475
- | `content` | `string` | 否 | 分享内容 |
476
- | `imageUrl` | `string` | 是 | 分享图片 URL |
477
- | `url` | `string` | 是 | 分享链接 URL |
478
- | `success` | `() => void` | 否 | 成功回调 |
479
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
480
- | `complete` | `() => void` | 否 | 完成回调 |
481
-
482
- #### 返回值
483
-
484
- ```js
485
- Promise<void>
486
- ```
487
-
488
- #### 示例代码
489
-
490
- ```js
491
- import { openAppSharePanel } from '@kbapp/js-bridge'
492
-
493
- openAppSharePanel({
494
- title: '开吧分享',
495
- content: '开吧,开汽车上新生活!',
496
- url: 'http://www.kaiba315.com.cn/',
497
- imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
498
- success() {
499
- console.log('打开分享面板成功')
500
- },
501
- fail(error) {
502
- console.log('打开分享面板失败', error)
503
- },
504
- })
505
- ```
506
-
507
- > 支持 Promise 风格调用
508
-
509
- ---
510
-
511
- ### openPostEditor
512
-
513
- > 唤起发帖器
514
-
515
- #### 请求参数
516
-
517
- | 参数 | 类型 | 必填 | 说明 |
518
- | ----------------------------- | --------------------------------- | ---- | ---------------------------- |
519
- | `postRule.hint` | `string` | 否 | 文本输入框提示文案 |
520
- | `postRule.initialText` | `string` | 否 | 初始化文本内容 |
521
- | `postRule.audio` | `boolean` | 否 | 是否显示音频按钮,默认 true |
522
- | `postRule.image` | `boolean` | 否 | 是否显示图片按钮,默认 true |
523
- | `postRule.video` | `boolean` | 否 | 是否显示视频按钮,默认 true |
524
- | `postRule.address` | `boolean` | 否 | 是否显示定位按钮,默认 true |
525
- | `postRule.asset_video` | `boolean` | 否 | 是否显示媒资视频,默认 false |
526
- | `postRule.audio_must` | `boolean` | 否 | 音频是否必传 |
527
- | `postRule.image_must` | `boolean` | 否 | 图片是否必传 |
528
- | `postRule.max_image_count` | `number` | 否 | 图片最大张数,默认 9 |
529
- | `postRule.min_image_count` | `number` | 否 | 图片最小张数,默认 0 |
530
- | `postRule.video_must` | `boolean` | 否 | 视频是否必传 |
531
- | `postRule.text_must` | `boolean` | 否 | 文本内容是否必传 |
532
- | `postRule.content_max_length` | `number` | 否 | 文本最大长度,默认 1000 |
533
- | `postRule.content_min_length` | `number` | 否 | 文本最小长度,默认 0 |
534
- | `success` | `(res: PostEditorResult) => void` | 否 | 成功回调 |
535
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
536
- | `complete` | `() => void` | 否 | 完成回调 |
537
-
538
- #### 返回值
539
-
540
- ```js
541
- Promise<{
542
- content: string
543
- street?: string
544
- audio?: unknown
545
- video?: unknown
546
- images?: { url: string; width: number; height: number }[]
547
- }>
548
- ```
549
-
550
- #### 示例代码
551
-
552
- 推荐使用 `generatePostEditorParamsByThreadPostRule` 构造参数
553
-
554
- ```js
555
- import { generatePostEditorParamsByThreadPostRule, openPostEditor, KbRequirement } from '@kbapp/js-bridge'
556
-
557
- openPostEditor({
558
- postRule: generatePostEditorParamsByThreadPostRule({
559
- textMin: 0,
560
- textMax: 1000,
561
- /** 帖子中, 图片的最大张数 */
562
- imageMax = 9,
563
-
564
- /** 帖子中, 图片的最小张数 */
565
- imageMin = 0,
566
-
567
- /** 音频限制 */
568
- audioRqr: KbRequirement.FREE,
569
-
570
- /** 视频限制 */
571
- videoRqr: KbRequirement.FREE,
572
-
573
- /** 媒资限制 */
574
- mediaRqr: KbRequirement.FORBID,
575
-
576
- /** 位置-逆地理信息限制 */
577
- streetRqr: KbRequirement.FREE
578
- }),
579
- })
580
-
581
- openPostEditor({
582
- postRule: {
583
- hint: '请输入内容',
584
- initialText: '默认内容',
585
- image: true,
586
- max_image_count: 9,
587
- },
588
- success(result) {
589
- console.log('发帖内容', result)
590
- },
591
- fail(error) {
592
- console.log('打开发帖器失败', error)
593
- },
594
- })
595
- ```
596
-
597
- > 支持 Promise 风格调用
598
-
599
- ---
600
-
601
- ### onAppSharePanelShow
602
-
603
- > 监听分享面板打开时触发(主动和被动)
604
-
605
- #### 请求参数
606
-
607
- | 参数 | 类型 | 说明 |
608
- | ---------- | ----------- | -------------------- |
609
- | `callback` | `()=> void` | 分享面板打开时的回调 |
610
-
611
- #### 返回值
612
-
613
- ```js
614
- // 返回函数,调用该函数取消监听
615
- () => void
616
- ```
617
-
618
- #### 示例代码
619
-
620
- ```js
621
- import { onAppSharePanelShow } from '@kbapp/js-bridge'
622
-
623
- const stopHandle = onAppSharePanelShow(() => {
624
- console.log('分享面板打开')
625
- })
626
-
627
- // stopHandle() 停止监听
628
- ```
629
-
630
- ---
631
-
632
- ### triggerAppLogin
633
-
634
- > 触发 app 登录
635
-
636
- #### 请求参数
637
-
638
- | 参数 | 类型 | 必填 | 说明 |
639
- | ---------- | ----------------------------- | ---- | -------- |
640
- | `success` | `() => void` | 否 | 成功回调 |
641
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
642
- | `complete` | `() => void` | 否 | 完成回调 |
643
-
644
- #### 返回值
645
-
646
- ```js
647
- Promise<void>
648
- ```
649
-
650
- #### 示例代码
651
-
652
- ```js
653
- import { triggerAppLogin, onLoopCheckAppLogin } from '@kbapp/js-bridge'
654
-
655
- // 监听登录成功
656
- const handle = onLoopCheckAppLogin((loginInfo) => {
657
- console.log('登录成功', loginInfo)
658
- handle() // 停止监听
659
- })
660
-
661
- // 触发登录
662
- triggerAppLogin({
663
- success() {
664
- console.log('触发登录成功')
665
- },
666
- fail(error) {
667
- console.log('触发登录失败', error)
668
- },
669
- })
670
- ```
671
-
672
- > 支持 Promise 风格调用
673
-
674
- ---
675
-
676
- ### onLoopCheckAppLogin
677
-
678
- > 启动轮询检查 APP 登录状态,查询到已登录后立即触发回调并自动回收回调函数(支持主动取消监听)
679
-
680
- #### 请求参数
681
-
682
- | 参数 | 类型 | 说明 |
683
- | ---------- | ----------------------------------- | ------------ |
684
- | `callback` | `(loginInfo: AppLoginInfo) => void` | 登录成功回调 |
685
-
686
- #### 返回值
687
-
688
- ```js
689
- // 返回函数,调用该函数,停止监听
690
- () => void
691
- ```
692
-
693
- #### 示例代码
694
-
695
- ```js
696
- import { onLoopCheckAppLogin } from '@kbapp/js-bridge'
697
-
698
- const handle = onLoopCheckAppLogin((loginInfo) => {
699
- console.log('登录成功', loginInfo)
700
- })
701
-
702
- // handle() 停止监听
703
- ```
704
-
705
- ---
706
-
707
- ### reportDAEvent
708
-
709
- > 上报数据埋点
710
-
711
- #### 请求参数
712
-
713
- | 参数 | 类型 | 必填 | 说明 |
714
- | ------------- | ----------------------------- | ---- | ---------------- |
715
- | `eventName` | `string` | 是 | 事件名 |
716
- | `eventParams` | `object` | 否 | 上报参数 |
717
- | `eventType` | `string` | 否 | 开始结束类型传递 |
718
- | `success` | `() => void` | 否 | 成功回调 |
719
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
720
- | `complete` | `() => void` | 否 | 完成回调 |
721
-
722
- #### 返回值
723
-
724
- ```js
725
- Promise<void>
726
- ```
727
-
728
- #### 示例代码
729
-
730
- ```js
731
- import { reportDAEvent } from '@kbapp/js-bridge'
732
-
733
- reportDAEvent({
734
- eventName: 'page_view',
735
- eventParams: { page: 'home' },
736
- success() {
737
- console.log('上报数据成功')
738
- },
739
- fail(error) {
740
- console.log('上报数据失败', error)
741
- },
742
- })
743
- ```
744
-
745
- > 支持 Promise 风格调用
746
-
747
- ---
748
-
749
- ### runAction
750
-
751
- > app 执行 Action
752
-
753
- #### 请求参数
754
-
755
- | 参数 | 类型 | 必填 | 说明 |
756
- | -------------- | ----------------------------- | ---- | ------------ |
757
- | `action` | `string` | 是 | action |
758
- | `actionParams` | `object` | 否 | actionParams |
759
- | `success` | `() => void` | 否 | 成功回调 |
760
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
761
- | `complete` | `() => void` | 否 | 完成回调 |
762
-
763
- #### 返回值
764
-
765
- ```js
766
- Promise<void>
767
- ```
768
-
769
- #### 示例代码
770
-
771
- ```js
772
- import { runAction } from '@kbapp/js-bridge'
773
-
774
- runAction({
775
- action: 'pageWeb',
776
- actionParams: {
777
- url: 'https://www.baidu.com',
778
- },
779
- success() {
780
- console.log('执行成功')
781
- },
782
- fail(error) {
783
- console.log('执行失败', error)
784
- },
785
- })
786
- ```
787
-
788
- > 支持 Promise 风格调用
789
-
790
- ---
791
-
792
- ### saveImageToLocal
793
-
794
- > 保存图片到本地
795
-
796
- #### 请求参数
797
-
798
- | 参数 | 类型 | 必填 | 说明 |
799
- | ---------- | ----------------------------- | ---- | ------------ |
800
- | `imageUrl` | `string` | 是 | 图片网络地址 |
801
- | `success` | `() => void` | 否 | 成功回调 |
802
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
803
- | `complete` | `() => void` | 否 | 完成回调 |
804
-
805
- #### 返回值
806
-
807
- ```js
808
- Promise<void>
809
- ```
810
-
811
- #### 异常返回值
812
-
813
- ```js
814
- Promise<{ errCode: BridgeCode }>
815
- ```
816
-
817
- #### 示例代码
818
-
819
- ```js
820
- import { saveImageToLocal, BridgeCode } from '@kbapp/js-bridge'
821
-
822
- saveImageToLocal({
823
- imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
824
- success() {
825
- console.log('保存图片成功')
826
- },
827
- fail(error) {
828
- console.log('保存图片失败', error)
829
- },
830
- })
831
- ```
832
-
833
- > 支持 Promise 风格调用
834
-
835
- ---
836
-
837
- ### saveVideoToLocal
838
-
839
- > 保存视频到本地
840
-
841
- #### 请求参数
842
-
843
- | 参数 | 类型 | 必填 | 说明 |
844
- | ---------- | ----------------------------- | ---- | ------------ |
845
- | `videoUrl` | `string` | 是 | 视频网络地址 |
846
- | `success` | `() => void` | 否 | 成功回调 |
847
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
848
- | `complete` | `() => void` | 否 | 完成回调 |
849
-
850
- #### 返回值
851
-
852
- ```js
853
- Promise<void>
854
- ```
855
-
856
- #### 异常返回值
857
-
858
- ```js
859
- Promise<{ errCode: BridgeCode }>
860
- ```
861
-
862
- #### 示例代码
863
-
864
- ```js
865
- import { saveVideoToLocal } from '@kbapp/js-bridge'
866
-
867
- saveVideoToLocal({
868
- videoUrl: 'https://example.com/video.mp4',
869
- success() {
870
- console.log('保存视频成功')
871
- },
872
- fail(error) {
873
- console.log('保存视频失败', error)
874
- },
875
- })
876
- ```
877
-
878
- > 支持 Promise 风格调用
879
-
880
- ---
881
-
882
- ### scanQRCode
883
-
884
- > 扫描二维码
885
-
886
- #### 请求参数
887
-
888
- | 参数 | 类型 | 必填 | 说明 |
889
- | ---------- | ----------------------------- | ---- | ---------------------- |
890
- | `success` | `(res: string) => void` | 否 | 成功回调,返回扫描结果 |
891
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
892
- | `complete` | `() => void` | 否 | 完成回调 |
893
-
894
- #### 返回值
895
-
896
- ```js
897
- Promise<string>
898
- ```
899
-
900
- #### 示例代码
901
-
902
- ```js
903
- import { scanQRCode } from '@kbapp/js-bridge'
904
-
905
- scanQRCode({
906
- success(result) {
907
- console.log('扫描结果', result)
908
- },
909
- fail(error) {
910
- console.log('扫描失败', error)
911
- },
912
- })
913
- ```
914
-
915
- > 支持 Promise 风格调用
916
-
917
- ---
918
-
919
- ### setScreenOrientation
920
-
921
- > 设置屏幕方向
922
-
923
- #### 请求参数
924
-
925
- | 参数 | 类型 | 必填 | 说明 |
926
- | ------------- | ----------------------------- | ---- | ---------------------- |
927
- | `orientation` | `number` | 是 | 屏幕方向 0:竖屏 1:横屏 |
928
- | `success` | `() => void` | 否 | 成功回调 |
929
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
930
- | `complete` | `() => void` | 否 | 完成回调 |
931
-
932
- #### 返回值
933
-
934
- ```js
935
- Promise<void>
936
- ```
937
-
938
- #### 示例代码
939
-
940
- ```js
941
- import { setScreenOrientation } from '@kbapp/js-bridge'
942
-
943
- // 设置为横屏
944
- setScreenOrientation({
945
- orientation: 1,
946
- success() {
947
- console.log('设置横屏成功')
948
- },
949
- fail(error) {
950
- console.log('设置横屏失败', error)
951
- },
952
- })
953
-
954
- // 设置为竖屏
955
- setScreenOrientation({
956
- orientation: 0,
957
- success() {
958
- console.log('设置竖屏成功')
959
- },
960
- fail(error) {
961
- console.log('设置竖屏失败', error)
962
- },
963
- })
964
- ```
965
-
966
- > 支持 Promise 风格调用
967
-
968
- ---
969
-
970
- ### setWebViewTitle
971
-
972
- > 设置网页标题(建议通过 document.title 设置)
973
-
974
- #### 请求参数
975
-
976
- | 参数 | 类型 | 必填 | 说明 |
977
- | ---------- | ----------------------------- | ---- | ---------------- |
978
- | `title` | `string` | 是 | webview 标题文案 |
979
- | `success` | `() => void` | 否 | 成功回调 |
980
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
981
- | `complete` | `() => void` | 否 | 完成回调 |
982
-
983
- #### 返回值
984
-
985
- ```js
986
- Promise<void>
987
- ```
988
-
989
- #### 异常返回值
990
-
991
- ```js
992
- Promise<{ errCode: BridgeCode }>
993
- ```
994
-
995
- #### 示例代码
996
-
997
- ```js
998
- import { setWebViewTitle } from '@kbapp/js-bridge'
999
-
1000
- setWebViewTitle({
1001
- title: '页面标题',
1002
- success() {
1003
- console.log('设置标题成功')
1004
- },
1005
- fail(error) {
1006
- console.log('设置标题失败', error)
1007
- },
1008
- })
1009
- ```
1010
-
1011
- > 支持 Promise 风格调用
1012
-
1013
- ---
1014
-
1015
- ### shareImage
1016
-
1017
- > 分享海报
1018
-
1019
- #### 请求参数
1020
-
1021
- | 参数 | 类型 | 必填 | 说明 |
1022
- | ---------- | ----------------------------- | ---- | ------------------------------------- |
1023
- | `imageUrl` | `string` | 是 | 分享的图片链接,仅支持网络地址,png/jpg |
1024
- | `success` | `() => void` | 否 | 成功回调 |
1025
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
1026
- | `complete` | `() => void` | 否 | 完成回调 |
1027
-
1028
- #### 返回值
1029
-
1030
- ```js
1031
- Promise<void>
1032
- ```
1033
-
1034
- #### 异常返回值
1035
-
1036
- ```js
1037
- Promise<{ errCode: BridgeCode }>
1038
- ```
1039
-
1040
- #### 示例代码
1041
-
1042
- ```js
1043
- import { shareImage } from '@kbapp/js-bridge'
1044
-
1045
- shareImage({
1046
- imageUrl: 'https://example.com/poster.png',
1047
- success() {
1048
- console.log('分享海报成功')
1049
- },
1050
- fail(error) {
1051
- console.log('分享海报失败', error)
1052
- },
1053
- })
1054
- ```
1055
-
1056
- > 支持 Promise 风格调用
1057
-
1058
- ---
1059
-
1060
- ### subscribeNotify
1061
-
1062
- > 订阅通知
1063
-
1064
- #### 请求参数
1065
-
1066
- | 参数 | 类型 | 必填 | 说明 |
1067
- | ---------- | ----------------------------- | ---- | -------- |
1068
- | `bizType` | `number` | 是 | 业务类型 |
1069
- | `subState` | `number` | 是 | 订阅状态 |
1070
- | `success` | `() => void` | 否 | 成功回调 |
1071
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
1072
- | `complete` | `() => void` | 否 | 完成回调 |
1073
-
1074
- #### 返回值
1075
-
1076
- ```js
1077
- Promise<void>
1078
- ```
1079
-
1080
- #### 示例代码
1081
-
1082
- ```js
1083
- import { subscribeNotify } from '@kbapp/js-bridge'
1084
-
1085
- subscribeNotify({
1086
- bizType: 1,
1087
- subState: 1,
1088
- success() {
1089
- console.log('订阅通知成功')
1090
- },
1091
- fail(error) {
1092
- console.log('订阅通知失败', error)
1093
- },
1094
- })
1095
- ```
1096
-
1097
- > 支持 Promise 风格调用
1098
-
1099
- ---
1100
-
1101
- ### isAppVersionSupport
1102
-
1103
- > 判断当前版本号是否支持
1104
-
1105
- #### 请求参数
1106
-
1107
- | 参数 | 类型 | 必填 | 说明 |
1108
- | ------------ | ----------------------------- | ---- | ---------------------- |
1109
- | `minVersion` | `number` | 是 | 最低支持版本号 |
1110
- | `success` | `(res: boolean) => void` | 否 | 成功回调,返回是否支持 |
1111
- | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
1112
- | `complete` | `() => void` | 否 | 完成回调 |
1113
-
1114
- #### 返回值
1115
-
1116
- ```js
1117
- Promise<boolean>
1118
- ```
1119
-
1120
- #### 示例代码
1121
-
1122
- ```js
1123
- import { isAppVersionSupport } from '@kbapp/js-bridge'
1124
-
1125
- isAppVersionSupport({
1126
- minVersion: 80711,
1127
- success(result) {
1128
- console.log('是否能使用', result)
1129
- },
1130
- fail(error) {
1131
- console.log('检查版本支持失败', error)
1132
- },
1133
- })
1134
- ```
1135
-
1136
- > 支持 Promise 风格调用
1137
-
1138
- ## 数据模型
1139
-
1140
- ### AppLoginInfo
1141
-
1142
- > 登录信息模型
1143
-
1144
- ```js
1145
- class AppLoginInfo {
1146
- /** 车牌号:例如浙A999999 */
1147
- carNo?: string
1148
-
1149
- /** 未知 */
1150
- role?: number
1151
-
1152
- /** 手机号 */
1153
- mobile!: string
1154
-
1155
- /** 性别 */
1156
- sex!: number
1157
-
1158
- /** 电台id */
1159
- siteId!: number
1160
-
1161
- /** 头像地址 */
1162
- avatar!: string
1163
-
1164
- /** token */
1165
- token!: string
1166
-
1167
- /** 用户id */
1168
- userId!: number
1169
-
1170
- /** 用户名 */
1171
- userName?: string
1172
- }
1173
- ```
1174
-
1175
- ### AppShareModel
1176
-
1177
- > 应用分享模型
1178
-
1179
- ```js
1180
- class AppShareModel {
1181
- /**
1182
- * 标题
1183
- */
1184
- title!: string
1185
-
1186
- /**
1187
- * 文字内容
1188
- */
1189
- content?: string
1190
-
1191
- /**
1192
- * 图片
1193
- */
1194
- imageUrl!: string
1195
-
1196
- /**
1197
- * 分享链接
1198
- */
1199
- url!: string
1200
-
1201
- /**
1202
- * 分享功能是否开启. 默认为 true.
1203
- * 当分享功能关闭时, 其他分享相关字段均无效.
1204
- */
1205
- enabled?: boolean
1206
-
1207
- /**
1208
- * 海报分享标题.
1209
- * 客户端: 海报分享必须. 若不存在则取 {@link #title}, 若也不存在, 则海报分享功能关闭.
1210
- * H5: 非必填. 通过桥接给到客户端时, 建议可以只填充 {@link #title}.
1211
- * 后端: 非必填.
1212
- */
1213
- posterTitle?: string
1214
-
1215
- /**
1216
- * 海报分享内容.
1217
- * 客户端: 非必须. 若不存在则取 {@link #content}, 若也不存在, 则海报只有标题内容.
1218
- * H5: 非必填. 通过桥接给到客户端时, 建议可以只填充 {@link #content}.
1219
- * 后端: 非必填.
1220
- */
1221
- posterContent?: string
1222
-
1223
- /**
1224
- * 海报分享封面图.
1225
- * 客户端: 海报分享非必须. 若不存在则取 {@link #imageUrl}, 若也不存在, 则海报无封面.
1226
- * H5: 非必填. 通过桥接给到客户端时, 建议可以只填充 {@link #imageUrl}.
1227
- * 后端: 非必填.
1228
- */
1229
- posterUrl?: string
1230
-
1231
- /**
1232
- * 海报分享的展示时间.
1233
- * 客户端: 海报分享非必须. 若不存在则海报不展示时间.
1234
- * H5: 非必填. 通过桥接给到客户端时, 建议忽略该字段.
1235
- * 后端: 非必填.
1236
- */
1237
- posterTime?: string
1238
-
1239
- /** 海报分享展示时间格式. */
1240
- posterTimeFormat?: string
1241
-
1242
- /**
1243
- * 海报分享功能是否开启. 默认为 false.
1244
- * 当海报分享功能关闭时, 其他海报分享相关字段均无效.
1245
- */
1246
- posterEnabled?: boolean
1247
-
1248
- /**
1249
- * 分享小程序设置: 小程序原始ID.
1250
- * 获取方法: 登录小程序管理后台-设置-基本设置-帐号信息.
1251
- *
1252
- * 当此字段非空时, 客户端会显示 '分享至小程序' 功能.
1253
- */
1254
- wxMiniUserName?: string
1255
-
1256
- /**
1257
- * 分享小程序设置: 小程序页面路径.
1258
- */
1259
- wxMiniPath?: string
1260
-
1261
- /**
1262
- * 分享小程序设置: 额外信息.
1263
- * 通常开发者希望分享出去的小程序被二次打开时可以获取到更多信息, 例如群的标识.
1264
- */
1265
- wxMiniShareTicket?: boolean
1266
-
1267
- /**
1268
- * 分享小程序设置: 小程序的类型.
1269
- * 0为正式版, 1为测试版, 2为体验版.
1270
- */
1271
- wxMiniType?: number
1272
- }
1273
- ```
1274
-
1275
- ### AppBaseInfo
1276
-
1277
- > 设备信息模型
1278
-
1279
- ```js
1280
- interface AppBaseInfo {
1281
- /** 操作系统,例如 iOS */
1282
- do: string
1283
-
1284
- /** 设备型号,例如 iPhone11,2 */
1285
- db: string
1286
-
1287
- /** 系统版本,例如 15.5 */
1288
- dv: string
1289
-
1290
- /** 应用版本号(数字),例如 69011 */
1291
- vcode: number
1292
-
1293
- /** 应用版本号(字符串),例如 6.90.11 */
1294
- v: string
1295
-
1296
- /** 未知 */
1297
- source: number
1298
-
1299
- /** 电台 id */
1300
- siteId: number
1301
-
1302
- /** 用户 id,当登录时返回 */
1303
- userId?: number
1304
-
1305
- /** 未知 */
1306
- cid: string
1307
- }
1308
- ```
1309
-
1310
- ## BridgeCode
1311
-
1312
- > 错误码枚举
1313
-
1314
- | 常量 | 值 | 说明 |
1315
- | ----------------------------------- | ---- | ------------------ |
1316
- | `BridgeCode.UNKNOWN` | 1000 | 未知错误 |
1317
- | `BridgeCode.UNSUPPORTED_VERSION` | 1001 | 当前开吧版本不支持 |
1318
- | `BridgeCode.TIMEOUT` | 1002 | 执行超时 |
1319
- | `BridgeCode.UNSUPPORTED_BRIDGE_ENV` | 1003 | 请在开吧app内执行 |
1320
-
1321
- ## 常见问题
1322
-
1323
- 1. 桥接触发无反应: 请检查当前是否处于开吧 app 内,以及当前网页是否在白名单内
1
+ # 开吧客户端桥接
2
+
3
+ > ⚠️ 重要提示:本 SDK 基于 TypeScript 开发,所有 API 参数均带有明确的必填 / 选填类型标注。使用时请务必开启 TS 类型检查或在 IDE 中查看参数提示,必填项缺失会直接提示错误,选填项可按需传入,请勿忽略类型提示以避免使用异常。
4
+
5
+ ## 下载
6
+
7
+ npm:
8
+
9
+ ```js
10
+ npm i @kbapp/js-bridge
11
+ ```
12
+
13
+ ### 或通过 script 标签引入
14
+
15
+ 使用 unpkg CDN:
16
+
17
+ ```html
18
+ <script src="https://unpkg.com/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
19
+ ```
20
+
21
+ 使用 jsdelivr CDN:
22
+
23
+ ```html
24
+ <script src="https://cdn.jsdelivr.net/npm/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
25
+ ```
26
+
27
+ > 通过 script 标签引入后,SDK 将作为全局变量 `kbBridge` 挂载在 window 对象上
28
+
29
+ ## 测试页面
30
+
31
+ [https://unpkg.com/@kbapp/js-bridge@latest/examples/index.html](https://unpkg.com/@kbapp/js-bridge@latest/examples/index.html)
32
+
33
+ ## 示例
34
+
35
+ ```js
36
+ import { saveImageToLocal } from '@kbapp/js-bridge'
37
+
38
+ function saveImageHandle() {
39
+ saveImageToLocal({
40
+ imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
41
+ success() {
42
+ console.log('执行成功')
43
+ },
44
+ })
45
+ }
46
+ ```
47
+
48
+ ### 通过 script 标签引入的使用示例
49
+
50
+ ```html
51
+ <script src="https://unpkg.com/@kbapp/js-bridge@latest/dist/umd/index.js"></script>
52
+ <script>
53
+ async function saveImageHandle() {
54
+ // 通过全局变量kbBridge访问SDK功能
55
+ kbBridge.saveImageToLocal({
56
+ imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
57
+ success() {
58
+ console.log('保存成功')
59
+ },
60
+ fail(error) {
61
+ console.log('保存失败', error)
62
+ },
63
+ })
64
+ }
65
+ </script>
66
+ ```
67
+
68
+ ## API
69
+
70
+ ### 总览
71
+
72
+ | 桥接 type | 方法 | 说明 | 链接 |
73
+ | --------- | ---- | ---- | ---- |
74
+ | - | `defineBridgeCallback` | 定义桥接调用的回调函数 | [查看文档](docs/api/define-bridge-callback.md) |
75
+ | - | `runBridgeApi` | 执行桥接(无返回值) | [查看文档](docs/api/run-bridge-api.md) |
76
+ | - | `runBridgeApiResponse` | 执行桥接(等待响应) | [查看文档](docs/api/run-bridge-api-response.md) |
77
+ | - | `isAppVersionSupport` | 判断当前版本号是否支持 | [查看文档](docs/api/is-app-version-support.md) |
78
+ | -1 | `closeWebView` | 关闭当前 webview | [查看文档](docs/api/close-web-view.md) |
79
+ | - | `definePermissionUsage` | 定义隐私权限协议文案 | [查看文档](docs/api/define-permission-usage.md) |
80
+ | - | `onAppSharePanelShow` | 监听分享面板打开事件 | [查看文档](docs/api/on-app-share-panel-show.md) |
81
+ | 12 | `defineAppShareModel` | 定义页面分享内容 | [查看文档](docs/api/define-app-share-model.md) |
82
+ | 58 | `openAppSharePanel` | 主动唤起分享面板 | [查看文档](docs/api/open-app-share-panel.md) |
83
+ | 68 | `defineAppSharePanelState` | 定义分享面板控件布局 | [查看文档](docs/api/define-app-share-panel-state.md) |
84
+ | 13 | `openPostEditor` | 唤起发帖器 | [查看文档](docs/api/open-post-editor.md) |
85
+ | 26 | `scanQRCode` | 扫描二维码 | [查看文档](docs/api/scan-qrcode.md) |
86
+ | 35 | `getAppBaseInfo` | 获取设备信息 | [查看文档](docs/api/get-app-base-info.md) |
87
+ | 51 | `generateKBSign` | 生成 kbsign | [查看文档](docs/api/generate-kbsign.md) |
88
+ | 56 | `checkForNewVersion` | 检测是否有新版本 | [查看文档](docs/api/check-for-new-version.md) |
89
+ | 58 | `shareImage` | 分享海报 | [查看文档](docs/api/share-image.md) |
90
+ | 64 | `setWebViewTitle` | 设置网页标题 | [查看文档](docs/api/set-web-view-title.md) |
91
+ | 62 | `saveImageToLocal` | 保存图片到本地 | [查看文档](docs/api/save-image-to-local.md) |
92
+ | 63 | `saveVideoToLocal` | 保存视频到本地 | [查看文档](docs/api/save-video-to-local.md) |
93
+ | 69 | `reportDAEvent` | 上报数据埋点 | [查看文档](docs/api/report-daevent.md) |
94
+ | - | `onLoopCheckAppLogin` | 启动轮询检查 APP 登录状态 | [查看文档](docs/api/on-loop-check-app-login.md) |
95
+ | 31 | `getAppLoginInfo` | 获取 app 登录信息 | [查看文档](docs/api/get-app-login-info.md) |
96
+ | 31 | `triggerAppLogin` | 触发 app 登录 | [查看文档](docs/api/trigger-app-login.md) |
97
+ | 71 | `setScreenOrientation` | 设置屏幕方向 | [查看文档](docs/api/set-screen-orientation.md) |
98
+ | 72 | `getAppSubscribeNotifyStatus` | 获取APP订阅通知状态 | [查看文档](docs/api/get-app-subscribe-notify-status.md) |
99
+ | 73 | `openAppSubscribeNotifySettings` | 前往/打开 app订阅管理页面 | [查看文档](docs/api/open-app-subscribe-notify-settings.md) |
100
+ | 1001 | `runAction` | 执行 action | [查看文档](docs/api/run-action.md) |
101
+
102
+ | 类/枚举 | 说明 |
103
+ | --------------- | --------------------- |
104
+ | `BridgeCode` | kbapp 桥接状态码 |
105
+ | `IS_KB_APP_ENV` | 是否在开吧 APP 环境中 |
106
+ | `AppLoginInfo` | 登录信息模型 |
107
+ | `AppShareModel` | 应用分享模型 |
108
+ | `AppBaseInfo` | 设备信息模型 |