@doubao-dev/plugin-app-dev 0.0.0-stage → 0.0.40-canary-dea0ddc73-20261026073950
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 +10 -2
- package/dist/147.js +9 -0
- package/dist/assets.d.ts +5 -0
- package/dist/assets.js +4 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +1378 -0
- package/dist/plugin.d.ts +102 -0
- package/dist/plugin.js +4995 -0
- package/dist/preview.js +16 -0
- package/dist/rslib-runtime.js +33 -0
- package/dist/skills/doubao-plugin-app/SKILL.md +21 -0
- package/dist/skills/doubao-plugin-app/references/app-development.md +85 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/container-overlay.md +131 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/form-controls.md +146 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/interactive-controls.md +120 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/map-canvas.md +107 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/overview.md +43 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/scroll-list.md +149 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/text-media.md +209 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +1389 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +1376 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/03-/350/207/252/345/256/232/344/271/211/351/200/232/344/277/241.md +127 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/04-/345/256/232/344/275/215.md +784 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/05-/345/255/230/345/202/250.md +1176 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/06-/350/267/257/347/224/261.md +839 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +376 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +1319 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/09-/350/276/223/345/205/245.md +192 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/10-/347/275/221/347/273/234.md +900 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/11-/345/252/222/344/275/223.md +1496 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/12-/344/270/232/345/212/241/350/203/275/345/212/233.md +1281 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/13-/347/231/273/345/275/225.md +511 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/14-/346/224/257/344/273/230.md +943 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/15-/346/225/260/346/215/256/345/210/206/346/236/220.md +124 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/16-/350/223/235/347/211/231.md +3364 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/17-wi-fi.md +1028 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/18-/345/212/240/351/200/237/345/272/246/350/256/241.md +354 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/19-ibeacon.md +508 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/20-/347/275/227/347/233/230.md +320 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/21-/350/256/276/345/244/207/346/226/271/345/220/221.md +351 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/22-/351/231/200/350/236/272/344/273/252.md +354 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/23-/345/252/222/344/275/223-/350/256/276/345/244/207-/347/275/221/347/273/234.md +264 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/24-/347/237/255/344/277/241.md +155 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/25-/346/227/240/351/232/234/347/242/215.md +144 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/26-/345/237/272/347/241/200/344/277/241/346/201/257.md +238 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/27-/347/224/265/346/261/240.md +235 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/28-/345/211/252/350/264/264/346/235/277.md +303 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/29-/345/212/240/345/257/206.md +126 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/30-/346/227/245/345/216/206.md +417 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/31-/347/224/265/350/257/235.md +144 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/32-/346/211/253/347/240/201.md +236 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +747 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/34-/351/234/207/345/212/250.md +277 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/35-/346/226/207/344/273/266/347/263/273/347/273/237.md +431 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/common-errors.md +69 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/groups.md +43 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/quick-reference.md +436 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/common-patterns.md +590 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/doubao-agentic-service-api-recipes.md +209 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-basics.md +368 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-recipes.md +65 -0
- package/dist/skills/doubao-plugin-app/references/frontend/framework/core.md +283 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/auth.md +277 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/best-practices.md +574 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/client-tools-and-events.md +209 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/component-development.md +832 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/debugger-mcp.md +537 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/expired-widget.md +101 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/performance-optimization.md +417 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/troubleshooting.md +278 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/best-practices.md +720 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/pseudo-classes.md +149 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/selectors.md +224 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/supported-properties.md +269 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/values-and-units.md +314 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/flex-layout.md +334 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/grid-layout.md +408 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/linear-layout.md +355 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/relative-layout.md +189 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/css-differences.md +737 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/migration-guide.md +669 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/unsupported-features.md +290 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/overview.md +60 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/animation.md +243 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/responsive.md +194 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/theming.md +143 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/quick-reference.md +229 -0
- package/dist/skills/doubao-plugin-app/references/frontend/rules/dos-and-donts.md +479 -0
- package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/design-boundary.md +46 -0
- package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/overview.md +118 -0
- package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/props.md +301 -0
- package/dist/skills/doubao-plugin-app/references/mcp-and-cards.md +38 -0
- package/dist/templates/README.md.template +11 -0
- package/dist/templates/com.doubao/app/manifest.yaml +41 -0
- package/dist/templates/com.doubao/app/package.json.template +13 -0
- package/dist/templates/com.doubao/app/src/app.config.ts.template +5 -0
- package/dist/templates/com.doubao/app/src/app.ts.template +3 -0
- package/dist/templates/com.doubao/app/src/pages/home/index.css +14 -0
- package/dist/templates/com.doubao/app/src/pages/home/index.tsx.template +14 -0
- package/dist/templates/com.doubao/app/src/widgets/example/index.tsx.template +29 -0
- package/dist/templates/com.doubao/app/tsconfig.json +19 -0
- package/dist/templates/mcp.json +9 -0
- package/dist/templates/plugin.json.template +29 -0
- package/dist/templates/skills/example/SKILL.md.template +14 -0
- package/dist/upload.d.ts +44 -0
- package/dist/upload.js +38 -0
- package/package.json +60 -3
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
# 豆包应用插件的端能力 API: 登录
|
|
2
|
+
|
|
3
|
+
豆包一次性登录凭证、Widget 登录交互和 MCP 授权结果回传能力。
|
|
4
|
+
|
|
5
|
+
[返回目录](./groups.md) | [返回速查](./quick-reference.md)
|
|
6
|
+
|
|
7
|
+
## 速查
|
|
8
|
+
|
|
9
|
+
| API | 说明 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| [loginWithDoubaoWidget](#loginwithdoubaowidget) | 在 Widget 中拉起平台登录和隐私协议授权交互。 |
|
|
12
|
+
| [login](#login) | 获取当前豆包用户的一次性登录凭证。 |
|
|
13
|
+
| [postLoginResult](#postloginresult) | 向豆包回传三方 MCP 授权登录结果。 |
|
|
14
|
+
|
|
15
|
+
## API 详情
|
|
16
|
+
|
|
17
|
+
<a id="loginwithdoubaowidget"></a>
|
|
18
|
+
### loginWithDoubaoWidget()
|
|
19
|
+
|
|
20
|
+
# loginWithDoubaoWidget
|
|
21
|
+
|
|
22
|
+
在 Widget 中拉起平台登录和隐私协议授权交互。
|
|
23
|
+
|
|
24
|
+
## 使用限制
|
|
25
|
+
|
|
26
|
+
> [!WARNING]
|
|
27
|
+
> **Android、iOS**:Android 仅区分 0(隐私流程)与非 0(登录流程),iOS 按当前隐私授权状态路由、仅记录 loginType 不据其分流,两次弹窗与合并弹窗语义均未生效;调用方无法通过 loginType 精确控制弹窗形态。
|
|
28
|
+
|
|
29
|
+
## 支持版本
|
|
30
|
+
|
|
31
|
+
前端库版本不低于 `0.0.19`。
|
|
32
|
+
|
|
33
|
+
## 支持平台
|
|
34
|
+
|
|
35
|
+
<table>
|
|
36
|
+
<thead>
|
|
37
|
+
<tr><th>平台</th><th>支持情况</th></tr>
|
|
38
|
+
</thead>
|
|
39
|
+
<tbody>
|
|
40
|
+
<tr><td>Android</td><td>支持</td></tr>
|
|
41
|
+
<tr><td>iOS</td><td>支持</td></tr>
|
|
42
|
+
<tr><td>PC</td><td>不支持</td></tr>
|
|
43
|
+
<tr><td>HarmonyOS</td><td>不支持</td></tr>
|
|
44
|
+
</tbody>
|
|
45
|
+
</table>
|
|
46
|
+
|
|
47
|
+
## 支持场景
|
|
48
|
+
|
|
49
|
+
<table>
|
|
50
|
+
<thead>
|
|
51
|
+
<tr><th>场景</th><th>支持情况</th></tr>
|
|
52
|
+
</thead>
|
|
53
|
+
<tbody>
|
|
54
|
+
<tr><td>页面</td><td>支持</td></tr>
|
|
55
|
+
<tr><td>卡片</td><td>支持</td></tr>
|
|
56
|
+
</tbody>
|
|
57
|
+
</table>
|
|
58
|
+
|
|
59
|
+
## 接入准备
|
|
60
|
+
|
|
61
|
+
### 前置条件
|
|
62
|
+
|
|
63
|
+
- **Android**:当前豆包账号需已绑定手机号
|
|
64
|
+
- **iOS**:当前豆包账号需已绑定手机号
|
|
65
|
+
|
|
66
|
+
## 使用说明
|
|
67
|
+
|
|
68
|
+
此 API 只处理 `loginType` 对应的平台交互,不会返回 `login()` 的一次性 `login_code`,
|
|
69
|
+
也不会替业务方创建应用插件登录态或完成 MCP Token 交换。
|
|
70
|
+
|
|
71
|
+
当前豆包账号未绑定手机号时,调用会报错。业务方应捕获错误并降级到自定义登录流程。
|
|
72
|
+
|
|
73
|
+
业务方仍需按实际场景完成服务端账号登录;MCP 授权登录还需在业务服务端生成三方短期兑换 code,
|
|
74
|
+
并通过 `postLoginResult` 回传最终登录结果。
|
|
75
|
+
|
|
76
|
+
- 调用会主动拉起授权登录弹窗,请在用户明确触发登录的交互场景中调用;请勿在无用户操作的后台逻辑中调用。调用报错时,业务方应降级到自定义登录流程。
|
|
77
|
+
|
|
78
|
+
## 调用方式
|
|
79
|
+
|
|
80
|
+
### 异步 API
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
loginWithDoubaoWidget(params: LoginWithWidgetRequest): Promise<LoginWithWidgetResult>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 入参
|
|
87
|
+
|
|
88
|
+
<table>
|
|
89
|
+
<thead>
|
|
90
|
+
<tr><th>名称</th><th>类型</th><th>必填</th><th>默认值</th><th>约束</th><th>说明</th></tr>
|
|
91
|
+
</thead>
|
|
92
|
+
<tbody>
|
|
93
|
+
<tr><td><code>loginType</code></td><td><code>LoginType</code></td><td>是</td><td>-</td><td>-</td><td>Widget 中需要拉起的平台登录和隐私协议授权组合。Android、iOS:Android 仅区分 0(隐私流程)与非 0(登录流程),iOS 按当前隐私授权状态路由、仅记录 loginType 不据其分流,两次弹窗与合并弹窗语义均未生效。</td></tr>
|
|
94
|
+
</tbody>
|
|
95
|
+
</table>
|
|
96
|
+
|
|
97
|
+
## 调用示例
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import { LoginType, loginWithDoubaoWidget } from '@doubao-dev/framework/api';
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
const { result } = await loginWithDoubaoWidget({
|
|
104
|
+
loginType: LoginType.LoginWithPrivacy
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (!result) {
|
|
108
|
+
// 用户未完成授权登录,停止后续登录流程。
|
|
109
|
+
}
|
|
110
|
+
} catch {
|
|
111
|
+
// 当前账号未绑定手机号或发生其他错误时,降级到业务自定义登录流程。
|
|
112
|
+
await startCustomLoginFlow();
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 成功返回
|
|
117
|
+
|
|
118
|
+
<table>
|
|
119
|
+
<thead>
|
|
120
|
+
<tr><th>名称</th><th>类型</th><th>必返</th><th>说明</th></tr>
|
|
121
|
+
</thead>
|
|
122
|
+
<tbody>
|
|
123
|
+
<tr><td><code>result</code></td><td><code>boolean</code></td><td>是</td><td>所选平台交互是否成功完成。<br><br>`true` 仅表示 `loginType` 指定的登录或隐私协议授权交互已完成,<br>不代表三方业务账号登录或 MCP 授权已经完成。</td></tr>
|
|
124
|
+
</tbody>
|
|
125
|
+
</table>
|
|
126
|
+
|
|
127
|
+
### 返回示例
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"result": true
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 错误处理
|
|
136
|
+
|
|
137
|
+
错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。
|
|
138
|
+
|
|
139
|
+
### 失败示例
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"errNo": 112,
|
|
144
|
+
"errMsg": "invalid result"
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 错误码
|
|
149
|
+
|
|
150
|
+
<table>
|
|
151
|
+
<thead>
|
|
152
|
+
<tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
|
|
153
|
+
</thead>
|
|
154
|
+
<tbody>
|
|
155
|
+
<tr><td><code>112</code></td><td><code>invalid result</code></td><td>Android</td><td>状态查询成功但返回关键数据缺失(如手机掩码)</td><td>手机掩码缺失时降级到自定义登录流程;其他情况可稍后重试,持续失败时反馈服务端响应异常。</td></tr>
|
|
156
|
+
</tbody>
|
|
157
|
+
</table>
|
|
158
|
+
|
|
159
|
+
#### 通用错误码
|
|
160
|
+
|
|
161
|
+
<table>
|
|
162
|
+
<thead>
|
|
163
|
+
<tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
|
|
164
|
+
</thead>
|
|
165
|
+
<tbody>
|
|
166
|
+
<tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android、iOS</td></tr>
|
|
167
|
+
</tbody>
|
|
168
|
+
</table>
|
|
169
|
+
|
|
170
|
+
## 平台差异
|
|
171
|
+
|
|
172
|
+
- **Android**:状态查询成功但关键数据缺失返回 112;其他失败统一返回 102。
|
|
173
|
+
- **iOS**:失败统一返回 102。
|
|
174
|
+
|
|
175
|
+
<a id="login"></a>
|
|
176
|
+
### login()
|
|
177
|
+
|
|
178
|
+
# login
|
|
179
|
+
|
|
180
|
+
获取当前豆包用户的一次性登录凭证。
|
|
181
|
+
|
|
182
|
+
## 支持版本
|
|
183
|
+
|
|
184
|
+
前端库版本不低于 `0.0.19`。
|
|
185
|
+
|
|
186
|
+
## 支持平台
|
|
187
|
+
|
|
188
|
+
<table>
|
|
189
|
+
<thead>
|
|
190
|
+
<tr><th>平台</th><th>支持情况</th></tr>
|
|
191
|
+
</thead>
|
|
192
|
+
<tbody>
|
|
193
|
+
<tr><td>Android</td><td>支持</td></tr>
|
|
194
|
+
<tr><td>iOS</td><td>支持</td></tr>
|
|
195
|
+
<tr><td>PC</td><td>不支持</td></tr>
|
|
196
|
+
<tr><td>HarmonyOS</td><td>不支持</td></tr>
|
|
197
|
+
</tbody>
|
|
198
|
+
</table>
|
|
199
|
+
|
|
200
|
+
## 支持场景
|
|
201
|
+
|
|
202
|
+
<table>
|
|
203
|
+
<thead>
|
|
204
|
+
<tr><th>场景</th><th>支持情况</th></tr>
|
|
205
|
+
</thead>
|
|
206
|
+
<tbody>
|
|
207
|
+
<tr><td>页面</td><td>支持</td></tr>
|
|
208
|
+
<tr><td>卡片</td><td>支持</td></tr>
|
|
209
|
+
</tbody>
|
|
210
|
+
</table>
|
|
211
|
+
|
|
212
|
+
## 使用说明
|
|
213
|
+
|
|
214
|
+
前端获取 `code` 后应立即发送给业务服务端,由业务服务端使用应用凭证调用豆包 OpenAPI
|
|
215
|
+
换取 OpenID,并完成业务账号登录或绑定。不要在前端保存长期 Token,也不要把应用密钥下发到前端。
|
|
216
|
+
|
|
217
|
+
此 `code` 不是业务登录态、MCP AccessToken,也不是传给 `postLoginResult` 的三方短期兑换 code。
|
|
218
|
+
应用插件内的自定义登录态及其与 OpenID 的绑定关系需要由业务方维护,平台不存储三方登录态。
|
|
219
|
+
用户拒绝登录、登录失败或调用超时时,Promise 将被拒绝。
|
|
220
|
+
|
|
221
|
+
- 本 API 仅获取一次性登录凭证,不展示登录或授权弹窗。获取 code 后应及时发送到开发者服务端完成登录,不要持久化或输出到日志。
|
|
222
|
+
|
|
223
|
+
## 调用方式
|
|
224
|
+
|
|
225
|
+
### 异步 API
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
login(params?: LoginRequest): Promise<LoginResult>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## 入参
|
|
232
|
+
|
|
233
|
+
<table>
|
|
234
|
+
<thead>
|
|
235
|
+
<tr><th>名称</th><th>类型</th><th>必填</th><th>默认值</th><th>约束</th><th>说明</th></tr>
|
|
236
|
+
</thead>
|
|
237
|
+
<tbody>
|
|
238
|
+
<tr><td><code>timeout</code></td><td><code>number</code></td><td>否</td><td><code>-</code></td><td>-</td><td>登录调用的超时时间,单位为毫秒。</td></tr>
|
|
239
|
+
</tbody>
|
|
240
|
+
</table>
|
|
241
|
+
|
|
242
|
+
## 调用示例
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
import { login } from '@doubao-dev/framework/api';
|
|
246
|
+
|
|
247
|
+
// 业务方自行实现:将一次性 login_code 发送到业务服务端完成登录;该函数不是 SDK API。
|
|
248
|
+
declare function loginOnBusinessServer(loginCode: string): Promise<void>;
|
|
249
|
+
|
|
250
|
+
const { code } = await login({ timeout: 30000 });
|
|
251
|
+
await loginOnBusinessServer(code);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## 成功返回
|
|
255
|
+
|
|
256
|
+
<table>
|
|
257
|
+
<thead>
|
|
258
|
+
<tr><th>名称</th><th>类型</th><th>必返</th><th>说明</th></tr>
|
|
259
|
+
</thead>
|
|
260
|
+
<tbody>
|
|
261
|
+
<tr><td><code>code</code></td><td><code>string</code></td><td>是</td><td>豆包一次性登录凭证 `login_code`。<br><br>该凭证用于业务服务端调用豆包 OpenAPI 换取当前用户的 OpenID。<br>凭证有效期为 5 分钟,使用一次或过期后失效。</td></tr>
|
|
262
|
+
</tbody>
|
|
263
|
+
</table>
|
|
264
|
+
|
|
265
|
+
### 返回示例
|
|
266
|
+
|
|
267
|
+
```json
|
|
268
|
+
{
|
|
269
|
+
"code": "b27f7d84e8f04f24a5f94a32c8200b82"
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## 错误处理
|
|
274
|
+
|
|
275
|
+
错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。
|
|
276
|
+
|
|
277
|
+
### 失败示例
|
|
278
|
+
|
|
279
|
+
```json
|
|
280
|
+
{
|
|
281
|
+
"errNo": 115,
|
|
282
|
+
"errMsg": "operation timeout"
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### 错误码
|
|
287
|
+
|
|
288
|
+
<table>
|
|
289
|
+
<thead>
|
|
290
|
+
<tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
|
|
291
|
+
</thead>
|
|
292
|
+
<tbody>
|
|
293
|
+
<tr><td><code>105</code></td><td><code>authentication fail</code></td><td>Android、iOS</td><td>登录服务拒绝签发登录凭证</td><td>检查应用配置和登录状态,修正后重试。</td></tr>
|
|
294
|
+
<tr><td><code>112</code></td><td><code>invalid result</code></td><td>Android、iOS</td><td>登录服务返回的数据缺少有效凭证或无法解析</td><td>稍后重试;持续失败时反馈服务端响应异常。</td></tr>
|
|
295
|
+
<tr><td><code>115</code></td><td><code>operation timeout</code></td><td>Android、iOS</td><td>调用耗时超过 timeout 指定的时间</td><td>适当增大 timeout 后重试。</td></tr>
|
|
296
|
+
<tr><td><code>301</code></td><td><code>network request cancelled</code></td><td>iOS</td><td>获取登录凭证的网络请求被取消</td><td>确认应用和网络状态后重试。</td></tr>
|
|
297
|
+
<tr><td><code>302</code></td><td><code>connection timed out</code></td><td>Android、iOS</td><td>获取登录凭证的网络连接超时</td><td>检查网络连接后重试。</td></tr>
|
|
298
|
+
<tr><td><code>303</code></td><td><code>no network connection</code></td><td>Android、iOS</td><td>当前无可用网络连接</td><td>恢复网络连接后重试。</td></tr>
|
|
299
|
+
<tr><td><code>305</code></td><td><code>network failure</code></td><td>Android、iOS</td><td>获取登录凭证时发生其他网络错误</td><td>检查网络连接,稍后重试。</td></tr>
|
|
300
|
+
</tbody>
|
|
301
|
+
</table>
|
|
302
|
+
|
|
303
|
+
#### 通用错误码
|
|
304
|
+
|
|
305
|
+
<table>
|
|
306
|
+
<thead>
|
|
307
|
+
<tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
|
|
308
|
+
</thead>
|
|
309
|
+
<tbody>
|
|
310
|
+
<tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android、iOS</td></tr>
|
|
311
|
+
</tbody>
|
|
312
|
+
</table>
|
|
313
|
+
|
|
314
|
+
## 平台差异
|
|
315
|
+
|
|
316
|
+
- **iOS**:网络请求被取消时返回 errNo 301;Android 当前没有对应的可达失败回调。
|
|
317
|
+
|
|
318
|
+
<a id="postloginresult"></a>
|
|
319
|
+
### postLoginResult()
|
|
320
|
+
|
|
321
|
+
# postLoginResult
|
|
322
|
+
|
|
323
|
+
向豆包回传三方 MCP 授权登录结果。
|
|
324
|
+
|
|
325
|
+
## 使用限制
|
|
326
|
+
|
|
327
|
+
> [!WARNING]
|
|
328
|
+
> **Android、iOS**:Android 在 result 为 false 时正常 resolve,iOS 在 result 为 false 时以失败 reject(message 为 "no login result");调用方无法用统一方式判断失败结果是否已回传成功。
|
|
329
|
+
> **Android、iOS**:result 为 true 时若 code 缺省或为空,双端均按失败处理(Android reject、iOS reject);调用方误以为成功回传可省略 code。
|
|
330
|
+
|
|
331
|
+
## 支持版本
|
|
332
|
+
|
|
333
|
+
前端库版本不低于 `0.0.19`。
|
|
334
|
+
|
|
335
|
+
## 支持平台
|
|
336
|
+
|
|
337
|
+
<table>
|
|
338
|
+
<thead>
|
|
339
|
+
<tr><th>平台</th><th>支持情况</th></tr>
|
|
340
|
+
</thead>
|
|
341
|
+
<tbody>
|
|
342
|
+
<tr><td>Android</td><td>支持</td></tr>
|
|
343
|
+
<tr><td>iOS</td><td>支持</td></tr>
|
|
344
|
+
<tr><td>PC</td><td>不支持</td></tr>
|
|
345
|
+
<tr><td>HarmonyOS</td><td>不支持</td></tr>
|
|
346
|
+
</tbody>
|
|
347
|
+
</table>
|
|
348
|
+
|
|
349
|
+
## 支持场景
|
|
350
|
+
|
|
351
|
+
<table>
|
|
352
|
+
<thead>
|
|
353
|
+
<tr><th>场景</th><th>支持情况</th></tr>
|
|
354
|
+
</thead>
|
|
355
|
+
<tbody>
|
|
356
|
+
<tr><td>页面</td><td>支持</td></tr>
|
|
357
|
+
<tr><td>卡片</td><td>支持</td></tr>
|
|
358
|
+
</tbody>
|
|
359
|
+
</table>
|
|
360
|
+
|
|
361
|
+
## 接入准备
|
|
362
|
+
|
|
363
|
+
### 前置条件
|
|
364
|
+
|
|
365
|
+
- **Android**:先完成登录,并传入登录成功返回的有效 code
|
|
366
|
+
- **iOS**:先完成登录,并传入登录成功返回的有效 code
|
|
367
|
+
|
|
368
|
+
## 使用说明
|
|
369
|
+
|
|
370
|
+
仅在 MCP 授权登录流程中调用此 API。业务服务端应先使用 `login()` 返回的一次性 `login_code`
|
|
371
|
+
换取 OpenID、完成业务账号登录或绑定,再生成用于 OAuth Token 交换的三方短期 code。
|
|
372
|
+
|
|
373
|
+
`result` 为 `true` 时必须传入 `code`。豆包使用该 code 完成 Token 交换后会自动关闭 MCP 登录页。
|
|
374
|
+
用户拒绝登录或登录失败时,传入 `{ result: false }`,不要继续请求用户数据。
|
|
375
|
+
|
|
376
|
+
MCP AccessToken、RefreshToken 及其生命周期由业务服务端维护,不应下发到前端。
|
|
377
|
+
|
|
378
|
+
- 仅在完成 MCP 授权登录流程后回传结果;登录成功时必须携带有效 code,回传成功后不要重复回传。
|
|
379
|
+
|
|
380
|
+
## 调用方式
|
|
381
|
+
|
|
382
|
+
### 异步 API
|
|
383
|
+
|
|
384
|
+
```typescript
|
|
385
|
+
postLoginResult(params: PostLoginResultRequest): Promise<object>
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## 入参
|
|
389
|
+
|
|
390
|
+
<table>
|
|
391
|
+
<thead>
|
|
392
|
+
<tr><th>名称</th><th>类型</th><th>必填</th><th>默认值</th><th>约束</th><th>说明</th></tr>
|
|
393
|
+
</thead>
|
|
394
|
+
<tbody>
|
|
395
|
+
<tr><td><code>code</code></td><td><code>string</code></td><td>否</td><td><code>-</code></td><td>-</td><td>三方短期兑换 code,仅在 `result` 为 `true` 时有效且必填。<br><br>该字段必须由业务服务端生成。豆包服务端会使用它调用业务方配置的 OAuth Token endpoint,<br>换取三方颁发的 MCP AccessToken 和 RefreshToken。<br><br>不要传入 `login()` 返回的豆包 `login_code`,也不要直接传入 AccessToken 或 RefreshToken。Android、iOS:result 为 true 时若 code 缺省或为空,双端均按失败处理(Android reject、iOS reject)。</td></tr>
|
|
396
|
+
<tr><td><code>result</code></td><td><code>boolean</code></td><td>是</td><td>-</td><td>-</td><td>三方登录是否成功。<br><br>`true` 表示三方已完成业务账号登录,并提供了可供豆包兑换 MCP Token 的短期 code;<br>`false` 表示用户拒绝登录或登录失败。Android、iOS:Android 在 result 为 false 时正常 resolve,iOS 在 result 为 false 时以失败 reject(message 为 "no login result")。</td></tr>
|
|
397
|
+
</tbody>
|
|
398
|
+
</table>
|
|
399
|
+
|
|
400
|
+
## 调用示例
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
import {
|
|
404
|
+
postLoginResult,
|
|
405
|
+
type PostLoginResultRequest
|
|
406
|
+
} from '@doubao-dev/framework/api';
|
|
407
|
+
|
|
408
|
+
// 业务方自行实现:完成业务登录并生成三方短期兑换 code;该函数不是 SDK API。
|
|
409
|
+
declare function getMcpLoginResultFromBusinessServer(): Promise<PostLoginResultRequest>;
|
|
410
|
+
|
|
411
|
+
const loginResult = await getMcpLoginResultFromBusinessServer();
|
|
412
|
+
await postLoginResult(loginResult);
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
## 成功返回
|
|
416
|
+
|
|
417
|
+
无返回字段。
|
|
418
|
+
|
|
419
|
+
## 错误处理
|
|
420
|
+
|
|
421
|
+
错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。
|
|
422
|
+
|
|
423
|
+
### 失败示例
|
|
424
|
+
|
|
425
|
+
```json
|
|
426
|
+
{
|
|
427
|
+
"errNo": 105,
|
|
428
|
+
"errMsg": "authentication fail"
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### 错误码
|
|
433
|
+
|
|
434
|
+
<table>
|
|
435
|
+
<thead>
|
|
436
|
+
<tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
|
|
437
|
+
</thead>
|
|
438
|
+
<tbody>
|
|
439
|
+
<tr><td><code>104</code></td><td><code>invalid parameter</code></td><td>Android</td><td>result 为 true 但缺少有效的兑换 code</td><td>传入业务服务端生成的有效 code 后重试。</td></tr>
|
|
440
|
+
<tr><td><code>105</code></td><td><code>authentication fail</code></td><td>Android、iOS</td><td>登录被拒绝或兑换 code 校验未通过</td><td>确认业务登录状态与 code 是否有效后重试。</td></tr>
|
|
441
|
+
<tr><td><code>112</code></td><td><code>invalid result</code></td><td>Android、iOS</td><td>Token 交换服务返回的数据无法解析</td><td>稍后重试;持续失败时反馈服务端响应异常。</td></tr>
|
|
442
|
+
<tr><td><code>115</code></td><td><code>operation timeout</code></td><td>Android</td><td>Token 交换耗时超过限制</td><td>检查网络后重试。</td></tr>
|
|
443
|
+
<tr><td><code>301</code></td><td><code>network request cancelled</code></td><td>iOS</td><td>Token 交换的网络请求被取消</td><td>确认应用和网络状态后重试。</td></tr>
|
|
444
|
+
<tr><td><code>302</code></td><td><code>connection timed out</code></td><td>Android、iOS</td><td>Token 交换的网络连接超时</td><td>检查网络连接后重试。</td></tr>
|
|
445
|
+
<tr><td><code>303</code></td><td><code>no network connection</code></td><td>Android、iOS</td><td>当前无可用网络连接</td><td>恢复网络连接后重试。</td></tr>
|
|
446
|
+
<tr><td><code>305</code></td><td><code>network failure</code></td><td>Android、iOS</td><td>Token 交换时发生其他网络错误</td><td>检查网络连接,稍后重试。</td></tr>
|
|
447
|
+
</tbody>
|
|
448
|
+
</table>
|
|
449
|
+
|
|
450
|
+
#### 通用错误码
|
|
451
|
+
|
|
452
|
+
<table>
|
|
453
|
+
<thead>
|
|
454
|
+
<tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
|
|
455
|
+
</thead>
|
|
456
|
+
<tbody>
|
|
457
|
+
<tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android、iOS</td></tr>
|
|
458
|
+
</tbody>
|
|
459
|
+
</table>
|
|
460
|
+
|
|
461
|
+
## 平台差异
|
|
462
|
+
|
|
463
|
+
- **Android**:缺少有效 code 时返回 104;调用超时返回 115。
|
|
464
|
+
- **iOS**:缺少有效 code 时返回 102;网络请求被取消时返回 301,超时归类为 302。
|
|
465
|
+
|
|
466
|
+
## 相关类型
|
|
467
|
+
|
|
468
|
+
<a id="logintype"></a>
|
|
469
|
+
### LoginType
|
|
470
|
+
|
|
471
|
+
Widget 中需要拉起的平台交互类型。 - 0: 仅隐私协议授权 - 1: 仅登录交互 - 2: 先登录再进行隐私协议授权,两次独立交互 - 3: 登录和隐私协议授权合并为一次交互。
|
|
472
|
+
|
|
473
|
+
#### Type
|
|
474
|
+
|
|
475
|
+
`0 | 1 | 2 | 3`
|
|
476
|
+
|
|
477
|
+
<a id="loginwithwidgetrequest"></a>
|
|
478
|
+
### LoginWithWidgetRequest
|
|
479
|
+
|
|
480
|
+
#### Properties
|
|
481
|
+
|
|
482
|
+
• **loginType**: `LoginType` - Widget 中需要拉起的平台登录和隐私协议授权组合
|
|
483
|
+
|
|
484
|
+
<a id="loginwithwidgetresult"></a>
|
|
485
|
+
### LoginWithWidgetResult
|
|
486
|
+
|
|
487
|
+
#### Properties
|
|
488
|
+
|
|
489
|
+
• **result**: `boolean` - 所选平台交互是否成功完成。 true 仅表示 loginType 指定的登录或隐私协议授权交互已完成, 不代表三方业务账号登录或 MCP 授权已经完成
|
|
490
|
+
|
|
491
|
+
<a id="loginrequest"></a>
|
|
492
|
+
### LoginRequest
|
|
493
|
+
|
|
494
|
+
#### Properties
|
|
495
|
+
|
|
496
|
+
• **timeout?**: `number` - 登录调用的超时时间,单位为毫秒
|
|
497
|
+
|
|
498
|
+
<a id="loginresult"></a>
|
|
499
|
+
### LoginResult
|
|
500
|
+
|
|
501
|
+
#### Properties
|
|
502
|
+
|
|
503
|
+
• **code**: `string` - 豆包一次性登录凭证 login_code。 该凭证用于业务服务端调用豆包 OpenAPI 换取当前用户的 OpenID。 凭证有效期为 5 分钟,使用一次或过期后失效
|
|
504
|
+
|
|
505
|
+
<a id="postloginresultrequest"></a>
|
|
506
|
+
### PostLoginResultRequest
|
|
507
|
+
|
|
508
|
+
#### Properties
|
|
509
|
+
|
|
510
|
+
• **result**: `boolean` - 三方登录是否成功。 true 表示三方已完成业务账号登录,并提供了可供豆包兑换 MCP Token 的短期 code; false 表示用户拒绝登录或登录失败
|
|
511
|
+
• **code?**: `string` - 三方短期兑换 code,仅在 result 为 true 时有效且必填。 该字段必须由业务服务端生成。豆包服务端会使用它调用业务方配置的 OAuth Token endpoint, 换取三方颁发的 MCP AccessToken 和 RefreshToken。 不要传入 login() 返回的豆包 login_code,也不要直接传入 AccessToken 或 RefreshToken
|