@kbapp/market-partner-sdk 0.0.1

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 ADDED
@@ -0,0 +1,661 @@
1
+ # 开吧商城接入 SDK
2
+
3
+ > 该 SDK 仅限于开吧 App 内使用
4
+
5
+ ## 下载
6
+
7
+ npm:
8
+
9
+ ```js
10
+ npm i @kbapp/market-partner-sdk
11
+ ```
12
+
13
+ ### 或通过 script 标签引入
14
+
15
+ 使用 unpkg CDN:
16
+
17
+ ```html
18
+ <script src="https://unpkg.com/@kbapp/market-partner-sdk@latest/dist/index.umd.js"></script>
19
+ ```
20
+
21
+ 使用 jsdelivr CDN:
22
+
23
+ ```html
24
+ <script src="https://cdn.jsdelivr.net/npm/@kbapp/market-partner-sdk@latest/dist/index.umd.js"></script>
25
+ ```
26
+
27
+ > 通过 script 标签引入后,SDK 将作为全局变量 `kbMarket` 挂载在 window 对象上
28
+
29
+ ## 示例
30
+
31
+ ```js
32
+ import { runAction } from '@kbapp/market-partner-sdk'
33
+
34
+ const onTapRunAction = async () => {
35
+ runAction({
36
+ action: 'pageWeb',
37
+ actionParams: {
38
+ url: 'https://www.baidu.com',
39
+ },
40
+ success() {
41
+ console.log('执行成功')
42
+ },
43
+ })
44
+ }
45
+ ```
46
+
47
+ ### 通过 script 标签引入的使用示例
48
+
49
+ ```js
50
+ const onTapRunAction = async () => {
51
+ // 通过全局变量kbMarket访问SDK功能
52
+ kbMarket.runAction({
53
+ action: 'pageWeb',
54
+ actionParams: {
55
+ url: 'https://www.baidu.com',
56
+ },
57
+ success() {
58
+ console.log('执行成功')
59
+ },
60
+ })
61
+ }
62
+ ```
63
+
64
+ ## API
65
+
66
+ ### 总览
67
+
68
+ | 方法 | 说明 |
69
+ | --- | --- |
70
+ | `registerNativeApiHandler` | 注册提供给Native端调用的API |
71
+ | `invokeNativeApi` | 触发App桥接 |
72
+ | `runAction` | 执行统一跳转页面标准 |
73
+ | `defineAppShareModel` | 定义页面分享内容 |
74
+ | `openAppSharePanel` | 主动唤起分享面板 |
75
+ | `reportGetui` | 上报数据埋点到个推 |
76
+ | `getAppBaseInfo` | 获取开吧 App 基础信息 |
77
+ | `shareImage` | 分享图片 |
78
+ | `onAppSharePanelShow` | 监听分享面板打开事件 |
79
+ | `isAppVersionSupport` | 检查当前App版本是否支持某个API |
80
+ | `getAuthToken` | 获取认证令牌 |
81
+
82
+ | 类/枚举 | 说明 |
83
+ | --- | --- |
84
+ | `BridgeCode` | 错误码枚举 |
85
+ | `AppBaseInfo` | App 基础信息数据模型 |
86
+ | `AppShareModel` | 应用分享模型 |
87
+ | `AuthToken` | 认证令牌数据模型 |
88
+ | `AuthMode` | 认证模式枚举 |
89
+
90
+ ### registerNativeApiHandler
91
+
92
+ > 注册提供给Native端调用的API
93
+
94
+ #### 请求参数
95
+
96
+ | 参数 | 类型 | 必填 | 说明 |
97
+ | --- | --- | --- | --- |
98
+ | `name` | `string` | 是 | 任务名称 |
99
+ | `handler` | `(...params: any[]) => any` | 是 | 回调函数,当Native端调用时触发 |
100
+ | `success` | `() => void` | 否 | 注册函数成功回调 |
101
+ | `fail` | `(error: BridgeCode) => void` | 否 | 注册函数失败回调 |
102
+ | `complete` | `() => void` | 否 | 无论成功失败都会执行的回调 |
103
+
104
+ #### 返回值
105
+
106
+ ```js
107
+ Promise<void>
108
+ ```
109
+
110
+ #### 示例代码
111
+
112
+ ```js
113
+ import { registerNativeApiHandler } from '@kbapp/market-partner-sdk';
114
+
115
+ // 回调形式
116
+ registerNativeApiHandler({
117
+ name: 'CommonShare',
118
+ handler(data) {
119
+ console.log('Native端调用了CommonShare', data);
120
+ },
121
+ success() {
122
+ console.log('注册成功');
123
+ },
124
+ fail(error) {
125
+ console.error('注册失败', error);
126
+ }
127
+ })
128
+
129
+ // Promise形式
130
+ await registerNativeApiHandler({
131
+ name: 'CommonShare',
132
+ handler(data) {
133
+ console.log('Native端调用了CommonShare', data);
134
+ }
135
+ });
136
+ ```
137
+
138
+ ### invokeNativeApi
139
+
140
+ > 触发App桥接
141
+
142
+ #### 请求参数
143
+
144
+ | 参数 | 类型 | 必填 | 说明 |
145
+ | --- | --- | --- | --- |
146
+ | `name` | `string` | 是 | 任务名称 |
147
+ | `params` | `{ type: number; data?: any }` | 是 | 任务参数 |
148
+ | `timeout` | `number` | 否 | 设置超时时间(毫秒) |
149
+ | `success` | `(result: Result) => void` | 否 | 执行成功回调 |
150
+ | `fail` | `(error: BridgeCode) => void` | 否 | 执行失败回调 |
151
+
152
+ #### 返回值
153
+
154
+ ```js
155
+ Promise<Result>
156
+ ```
157
+
158
+ #### 示例代码
159
+
160
+ ```js
161
+ import { invokeNativeApi, BridgeCode } from '@kbapp/market-partner-sdk';
162
+
163
+ invokeNativeApi({
164
+ name: 'OpenActRequest',
165
+ params: {
166
+ type: 60500,
167
+ data: {
168
+ title: '分享标题',
169
+ content: '分享内容'
170
+ }
171
+ },
172
+ timeout: 5000,
173
+ success(result) {
174
+ console.log('调用成功', result);
175
+ },
176
+ fail(error) {
177
+ if (error.errorCode === BridgeCode.TIMEOUT.errorCode) {
178
+ console.error('调用超时');
179
+ } else {
180
+ console.error('调用失败', error);
181
+ }
182
+ }
183
+ });
184
+
185
+ invokeNativeApi({
186
+ name: 'OpenActRequest',
187
+ params: {
188
+ type: 60500,
189
+ data: {
190
+ title: '分享标题',
191
+ content: '分享内容'
192
+ }
193
+ },
194
+ timeout: 5000,
195
+ }).then(() => {
196
+ console.log('调用成功');
197
+ }).catch((error) => {
198
+ console.error('调用失败', error);
199
+ })
200
+ ```
201
+
202
+ ### isAppVersionSupport
203
+
204
+ > 是否能用某个api(根据版本号来判断)
205
+
206
+ #### 请求参数
207
+
208
+ | 参数 | 类型 | 必填 | 说明 |
209
+ | --- | --- | --- | --- |
210
+ | `minVersion` | `number` | 是 | 最低支持版本号 |
211
+ | `success` | `(result: boolean) => void` | 否 | 成功回调 |
212
+ | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
213
+
214
+ #### 返回值
215
+
216
+ ```js
217
+ Promise<boolean>
218
+ ```
219
+
220
+ #### 示例代码
221
+
222
+ ```js
223
+ import { isAppVersionSupport } from '@kbapp/market-partner-sdk';
224
+
225
+ // 回调形式
226
+ isAppVersionSupport({
227
+ minVersion: 80711,
228
+ success(result: boolean) {
229
+ console.log('是否能使用', result)
230
+ }
231
+ })
232
+
233
+ // Promise 形式
234
+ const canUse = await isAppVersionSupport({ minVersion: 80711 })
235
+ console.log('是否能使用', canUse)
236
+ ```
237
+
238
+ ### getAuthToken
239
+
240
+ > 获取认证令牌
241
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
242
+
243
+ #### 请求参数
244
+
245
+ | 参数 | 类型 | 必填 | 说明 |
246
+ | --- | --- | --- | --- |
247
+ | `mode` | `AuthMode` | 是 | 登录授权模式 |
248
+ | `success` | `(token: AuthToken) => void` | 否 | 成功回调 |
249
+ | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
250
+
251
+ #### 返回值
252
+
253
+ ```js
254
+ Promise<AuthToken>
255
+ ```
256
+
257
+ #### 示例代码
258
+
259
+ ```js
260
+ import { getAuthToken, AuthMode } from '@kbapp/market-partner-sdk';
261
+
262
+ // 回调形式
263
+ getAuthToken({
264
+ mode: AuthMode.Force,
265
+ success(authToken: AuthToken) {
266
+ if (authToken.code === 0) {
267
+ console.log('登录成功')
268
+ }
269
+ },
270
+ })
271
+
272
+ // Promise 形式
273
+ const authToken = await getAuthToken({ mode: AuthMode.Force })
274
+ if (authToken.code === 0) {
275
+ console.log('登录成功')
276
+ }
277
+ ```
278
+
279
+
280
+
281
+ ### runAction
282
+
283
+ > 执行统一跳转页面标准
284
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
285
+
286
+ #### 请求参数
287
+
288
+ | 参数 | 类型 | 必填 | 说明 |
289
+ | --- | --- | --- | --- |
290
+ | `action` | `string` | 是 | 动作名称 |
291
+ | `actionParams` | `Record<string, any>` | 否 | 动作参数 |
292
+ | `success` | `() => void` | 否 | 成功回调 |
293
+ | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
294
+
295
+ #### 返回值
296
+
297
+ ```js
298
+ Promise<void>
299
+ ```
300
+
301
+ #### 示例代码
302
+
303
+ ```js
304
+ import { runAction } from '@kbapp/market-partner-sdk';
305
+
306
+ runAction({
307
+ action: 'pageWeb',
308
+ actionParams: {
309
+ url: 'https://www.baidu.com',
310
+ }
311
+ })
312
+ ```
313
+
314
+ ### defineAppShareModel
315
+
316
+ > 定义app点击转发时候的分享卡片内容
317
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
318
+
319
+ #### 请求参数 方式1
320
+
321
+ | 参数 | 类型 | 必填 | 说明 |
322
+ | --- | --- | --- | --- |
323
+ | `title` | `string` | 否 | 分享标题 |
324
+ | `content` | `string` | 否 | 分享内容 |
325
+ | `imageUrl` | `string` | 否 | 分享图片URL |
326
+ | `url` | `string` | 否 | 分享链接URL |
327
+ | `...` | `unknow` | 否 | 其他参数详情见AppShareModel |
328
+ | `success` | `() => void` | 否 | 成功回调 |
329
+ | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
330
+
331
+ #### 请求参数 方式2
332
+
333
+ | 参数 | 类型 | 必填 | 说明 |
334
+ | --- | --- | --- | --- |
335
+ | `onShareApp` | `() => AppShareModel` | 否 | 点击分享时触发的函数,返回分享模型(方式2) |
336
+ | `success` | `() => void` | 否 | 成功回调 |
337
+ | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
338
+
339
+
340
+ #### 返回值
341
+
342
+ ```js
343
+ Promise<void>
344
+ ```
345
+
346
+ #### 示例代码
347
+
348
+ ```js
349
+ import { defineAppShareModel } from '@kbapp/market-partner-sdk';
350
+
351
+ // 方式1:直接提供分享模型
352
+ defineAppShareModel({
353
+ title: '分享标题',
354
+ content: '分享内容',
355
+ imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
356
+ url: 'http://www.kaiba315.com.cn/',
357
+ success() {
358
+ console.log('设置成功')
359
+ },
360
+ fail(error) {
361
+ console.log('设置失败', error)
362
+ }
363
+ })
364
+
365
+ // 方式2:提供分享模型函数(点击分享时动态生成分享内容)
366
+ defineAppShareModel({
367
+ onShareApp() {
368
+ // 点击页面右上角或分享按钮时触发该回调,动态生成分享内容
369
+ return {
370
+ title: '动态生成的分享标题',
371
+ content: '动态生成的分享内容',
372
+ imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
373
+ url: 'http://www.kaiba315.com.cn/?t=' + Date.now()
374
+ }
375
+ },
376
+ success() {
377
+ console.log('设置成功')
378
+ },
379
+ fail(error) {
380
+ console.log('设置失败', error)
381
+ }
382
+ })
383
+
384
+ // Promise 形式
385
+ await defineAppShareModel({
386
+ title: '分享标题',
387
+ content: '分享内容',
388
+ imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
389
+ url: 'http://www.kaiba315.com.cn/'
390
+ })
391
+ ```
392
+
393
+ ### openAppSharePanel
394
+
395
+ > 主动唤起分享面板
396
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
397
+
398
+ #### 请求参数
399
+
400
+ | 参数 | 类型 | 必填 | 说明 |
401
+ | --- | --- | --- | --- |
402
+ | `params` | `AppShareModel & CallbackOptions<void>` | 是 | 分享模型与回调选项的组合 |
403
+
404
+ #### 返回值
405
+
406
+ ```js
407
+ Promise<void>
408
+ ```
409
+
410
+ #### 示例代码
411
+
412
+ ```js
413
+ import { openAppSharePanel } from '@kbapp/market-partner-sdk';
414
+
415
+ openAppSharePanel({
416
+ title: '开吧分享',
417
+ content: '开吧,开汽车上新生活!',
418
+ url: 'http://www.kaiba315.com.cn/',
419
+ imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
420
+ success() {
421
+ console.log('打开分享面板成功')
422
+ },
423
+ fail(error) {
424
+ console.log('打开分享面板失败', error)
425
+ }
426
+ })
427
+ ```
428
+
429
+ ### onAppSharePanelShow
430
+
431
+ > 监听分享面板打开时触发(主动和被动)
432
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
433
+
434
+ #### 请求参数
435
+
436
+ | 参数 | 类型 | 说明 |
437
+ | --- | --- | --- |
438
+ | `callback` | `EventListenerOrEventListenerObject` | 分享面板打开时的回调 |
439
+
440
+ #### 返回值
441
+
442
+ ```js
443
+ // 返回函数,调用该函数取消监听
444
+ () => void
445
+ ```
446
+
447
+ #### 示例代码
448
+
449
+ ```js
450
+ import { onAppSharePanelShow } from '@kbapp/market-partner-sdk';
451
+
452
+ const stopHandle = onAppSharePanelShow(() => {
453
+ console.log('分享面板打开')
454
+ })
455
+
456
+ // stopHandle() 停止监听
457
+ ```
458
+
459
+ ### shareImage
460
+
461
+ > 分享图片
462
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
463
+
464
+ #### 请求参数
465
+
466
+ | 参数 | 类型 | 必填 | 说明 |
467
+ | --- | --- | --- | --- |
468
+ | `imageUrl` | `string` | 是 | 图片URL(仅支持网络地址,jpg/png格式) |
469
+ | `success` | `() => void` | 否 | 成功回调 |
470
+ | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
471
+
472
+ #### 返回值
473
+
474
+ ```js
475
+ Promise<void>
476
+ ```
477
+
478
+ #### 示例代码
479
+
480
+ ```js
481
+ import { shareImage } from '@kbapp/market-partner-sdk';
482
+
483
+ shareImage({
484
+ imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png'
485
+ })
486
+ ```
487
+
488
+ ### getAppBaseInfo
489
+
490
+ > 获取开吧 App 基础信息
491
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
492
+
493
+ #### 请求参数
494
+
495
+ | 参数 | 类型 | 说明 |
496
+ | --- | --- | --- |
497
+ | `success` | `(deviceInfo: AppBaseInfo) => void` | 成功回调 |
498
+ | `fail` | `(error: BridgeCode) => void` | 失败回调 |
499
+
500
+ #### 返回值
501
+
502
+ ```js
503
+ Promise<AppBaseInfo>
504
+ ```
505
+
506
+ #### 示例代码
507
+
508
+ ```js
509
+ import { getAppBaseInfo, AppBaseInfo } from '@kbapp/market-partner-sdk';
510
+
511
+ // 回调形式
512
+ getAppBaseInfo({
513
+ success(deviceInfo: AppBaseInfo) {
514
+ console.log(deviceInfo)
515
+ },
516
+ fail(error) {
517
+ console.error(error)
518
+ },
519
+ })
520
+
521
+ // Promise 形式
522
+ getAppBaseInfo().then((deviceInfo: AppBaseInfo) => {
523
+ console.log(deviceInfo)
524
+ })
525
+ ```
526
+
527
+ ### reportGetui
528
+
529
+ > 上报数据埋点到个推
530
+ > @version 开吧APP:80801开始支持,低版本需开发者做兼容处理
531
+
532
+ #### 请求参数
533
+
534
+ | 参数 | 类型 | 必填 | 说明 |
535
+ | --- | --- | --- | --- |
536
+ | `eventName` | `string` | 是 | 事件名 |
537
+ | `eventParams` | `{ [key: string]: any }` | 否 | 上报参数 |
538
+ | `eventType` | `'Begin' \| 'End'` | 否 | 开始结束类型传递 |
539
+ | `success` | `() => void` | 否 | 成功回调 |
540
+ | `fail` | `(error: BridgeCode) => void` | 否 | 失败回调 |
541
+
542
+ #### 返回值
543
+
544
+ ```js
545
+ Promise<void>
546
+ ```
547
+
548
+ #### 示例代码
549
+
550
+ ```js
551
+ import { reportGetui } from '@kbapp/market-partner-sdk';
552
+
553
+ reportGetui({
554
+ eventName: 'event_name',
555
+ eventParams: {
556
+ test_param: 'test_value',
557
+ },
558
+ success() {
559
+ console.log('上报成功')
560
+ },
561
+ })
562
+ ```
563
+
564
+ ## 数据模型
565
+
566
+ ### AuthToken
567
+
568
+ > 认证令牌数据模型
569
+
570
+ | 属性 | 类型 | 说明 |
571
+ | --- | --- | --- |
572
+ | `token` | `string` | 认证令牌 |
573
+ | `userId` | `number` | 用户ID |
574
+ | `expireTime` | `number` | 过期时间戳(毫秒) |
575
+
576
+ ### AuthMode
577
+
578
+ > 认证模式枚举
579
+
580
+ | 常量 | 值 | 说明 |
581
+ | --- | --- | --- |
582
+ | `AuthMode.Force` | `'force'` | 若用户未登录弹窗引导登录 |
583
+ | `AuthMode.Silent` | `'silent'` | 静默授权模式,不会弹出登录弹窗 |
584
+
585
+ ### AppBaseInfo
586
+
587
+ > App 基础信息数据模型
588
+
589
+ | 属性 | 类型 | 说明 |
590
+ | --- | --- | --- |
591
+ | `do` | `string` | 设备类型,例如 iOS |
592
+ | `db` | `string` | 设备型号,例如 iPhone11,2 |
593
+ | `dv` | `string` | 系统版本,例如 15.5 |
594
+ | `vcode` | `number` | 版本号,例如 69011 |
595
+ | `v` | `string` | 版本号,例如 6.90.11 |
596
+ | `source` | `number` | 未知 |
597
+ | `siteId` | `number` | 电台ID |
598
+ | `userId` | `number` | 用户ID(当登录时返回,可选) |
599
+ | `cid` | `string` | 未知 |
600
+
601
+ ### AppShareModel
602
+
603
+ > 应用分享模型
604
+
605
+ | 属性 | 类型 | 说明 |
606
+ | --- | --- | --- |
607
+ | `title` | `string` | 分享标题 |
608
+ | `content` | `string` | 分享文字内容(可选) |
609
+ | `imageUrl` | `string` | 分享图片URL |
610
+ | `url` | `string` | 分享链接URL |
611
+ | `enabled` | `boolean` | 分享功能是否开启,默认为true。当关闭时,其他分享相关字段均无效(可选) |
612
+ | `posterTitle` | `string` | 海报分享标题(可选)。若不存在则取title,若也不存在,则海报分享功能关闭 |
613
+ | `posterContent` | `string` | 海报分享内容(可选)。若不存在则取content,若也不存在,则海报只有标题内容 |
614
+ | `posterUrl` | `string` | 海报分享封面图(可选)。若不存在则取imageUrl,若也不存在,则海报无封面 |
615
+ | `posterTime` | `string` | 海报分享的展示时间(可选)。若不存在则海报不展示时间 |
616
+ | `posterTimeFormat` | `string` | 海报分享展示时间格式(可选) |
617
+ | `posterEnabled` | `boolean` | 海报分享功能是否开启,默认为false。当关闭时,其他海报分享相关字段均无效(可选) |
618
+ | `wxMiniUserName` | `string` | 分享小程序设置:小程序原始ID(可选)。获取方法:登录小程序管理后台-设置-基本设置-帐号信息。当此字段非空时,客户端会显示'分享至小程序'功能 |
619
+ | `wxMiniPath` | `string` | 分享小程序设置:小程序页面路径(可选) |
620
+ | `wxMiniShareTicket` | `boolean` | 分享小程序设置:是否开启分享票据,用于获取群的标识等信息(可选) |
621
+ | `wxMiniType` | `number` | 分享小程序设置:小程序的类型,0为正式版,1为测试版,2为体验版(可选) |
622
+
623
+ ### BridgeCode
624
+
625
+ > 错误码枚举
626
+
627
+ | 常量 | 值 | 说明 |
628
+ | --- | --- | --- |
629
+ | `BridgeCode.UNKNOWN` | `{ errorCode: 1000, errorMsg: '未知错误' }` | 未知错误 |
630
+ | `BridgeCode.UNSUPPORTED_VERSION` | `{ errorCode: 1001, errorMsg: '当前开吧版本不支持' }` | 当前开吧版本不支持 |
631
+ | `BridgeCode.TIMEOUT` | `{ errorCode: 1002, errorMsg: '执行超时' }` | 执行超时 |
632
+
633
+ ### IS_KB_APP_ENV
634
+
635
+ > 环境检测常量,用于检测当前是否在开吧App内运行
636
+
637
+ #### 类型
638
+
639
+ ```js
640
+ export const IS_KB_APP_ENV: boolean
641
+ ```
642
+
643
+ #### 说明
644
+
645
+ 该常量通过检测 User-Agent 中是否包含开吧App的特征字符串来判断当前环境是否在开吧App内运行。
646
+
647
+ #### 示例代码
648
+
649
+ ```js
650
+ import { IS_KB_APP_ENV } from '@kbapp/market-partner-sdk';
651
+
652
+ if (IS_KB_APP_ENV) {
653
+ console.log('当前在开吧App内运行,可以使用SDK功能');
654
+ } else {
655
+ console.log('当前不在开吧App内运行,可能需要降级处理');
656
+ }
657
+ ```
658
+
659
+ ## 常见问题
660
+
661
+ 1. 桥接触发无反应:请检查当前是否处于开吧 App 内,以及当前网页是否在白名单内