@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.
Files changed (107) hide show
  1. package/README.md +10 -2
  2. package/dist/147.js +9 -0
  3. package/dist/assets.d.ts +5 -0
  4. package/dist/assets.js +4 -0
  5. package/dist/index.d.ts +43 -0
  6. package/dist/index.js +1378 -0
  7. package/dist/plugin.d.ts +102 -0
  8. package/dist/plugin.js +4995 -0
  9. package/dist/preview.js +16 -0
  10. package/dist/rslib-runtime.js +33 -0
  11. package/dist/skills/doubao-plugin-app/SKILL.md +21 -0
  12. package/dist/skills/doubao-plugin-app/references/app-development.md +85 -0
  13. package/dist/skills/doubao-plugin-app/references/frontend/components/container-overlay.md +131 -0
  14. package/dist/skills/doubao-plugin-app/references/frontend/components/form-controls.md +146 -0
  15. package/dist/skills/doubao-plugin-app/references/frontend/components/interactive-controls.md +120 -0
  16. package/dist/skills/doubao-plugin-app/references/frontend/components/map-canvas.md +107 -0
  17. package/dist/skills/doubao-plugin-app/references/frontend/components/overview.md +43 -0
  18. package/dist/skills/doubao-plugin-app/references/frontend/components/scroll-list.md +149 -0
  19. package/dist/skills/doubao-plugin-app/references/frontend/components/text-media.md +209 -0
  20. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +1389 -0
  21. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +1376 -0
  22. 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
  23. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/04-/345/256/232/344/275/215.md +784 -0
  24. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/05-/345/255/230/345/202/250.md +1176 -0
  25. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/06-/350/267/257/347/224/261.md +839 -0
  26. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +376 -0
  27. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +1319 -0
  28. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/09-/350/276/223/345/205/245.md +192 -0
  29. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/10-/347/275/221/347/273/234.md +900 -0
  30. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/11-/345/252/222/344/275/223.md +1496 -0
  31. 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
  32. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/13-/347/231/273/345/275/225.md +511 -0
  33. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/14-/346/224/257/344/273/230.md +943 -0
  34. 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
  35. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/16-/350/223/235/347/211/231.md +3364 -0
  36. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/17-wi-fi.md +1028 -0
  37. 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
  38. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/19-ibeacon.md +508 -0
  39. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/20-/347/275/227/347/233/230.md +320 -0
  40. 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
  41. 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
  42. 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
  43. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/24-/347/237/255/344/277/241.md +155 -0
  44. 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
  45. 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
  46. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/27-/347/224/265/346/261/240.md +235 -0
  47. 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
  48. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/29-/345/212/240/345/257/206.md +126 -0
  49. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/30-/346/227/245/345/216/206.md +417 -0
  50. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/31-/347/224/265/350/257/235.md +144 -0
  51. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/32-/346/211/253/347/240/201.md +236 -0
  52. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +747 -0
  53. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/34-/351/234/207/345/212/250.md +277 -0
  54. 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
  55. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/common-errors.md +69 -0
  56. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/groups.md +43 -0
  57. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/quick-reference.md +436 -0
  58. package/dist/skills/doubao-plugin-app/references/frontend/examples/common-patterns.md +590 -0
  59. package/dist/skills/doubao-plugin-app/references/frontend/examples/doubao-agentic-service-api-recipes.md +209 -0
  60. package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-basics.md +368 -0
  61. package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-recipes.md +65 -0
  62. package/dist/skills/doubao-plugin-app/references/frontend/framework/core.md +283 -0
  63. package/dist/skills/doubao-plugin-app/references/frontend/guides/auth.md +277 -0
  64. package/dist/skills/doubao-plugin-app/references/frontend/guides/best-practices.md +574 -0
  65. package/dist/skills/doubao-plugin-app/references/frontend/guides/client-tools-and-events.md +209 -0
  66. package/dist/skills/doubao-plugin-app/references/frontend/guides/component-development.md +832 -0
  67. package/dist/skills/doubao-plugin-app/references/frontend/guides/debugger-mcp.md +537 -0
  68. package/dist/skills/doubao-plugin-app/references/frontend/guides/expired-widget.md +101 -0
  69. package/dist/skills/doubao-plugin-app/references/frontend/guides/performance-optimization.md +417 -0
  70. package/dist/skills/doubao-plugin-app/references/frontend/guides/troubleshooting.md +278 -0
  71. package/dist/skills/doubao-plugin-app/references/frontend/lynx/best-practices.md +720 -0
  72. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/pseudo-classes.md +149 -0
  73. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/selectors.md +224 -0
  74. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/supported-properties.md +269 -0
  75. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/values-and-units.md +314 -0
  76. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/flex-layout.md +334 -0
  77. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/grid-layout.md +408 -0
  78. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/linear-layout.md +355 -0
  79. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/relative-layout.md +189 -0
  80. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/css-differences.md +737 -0
  81. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/migration-guide.md +669 -0
  82. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/unsupported-features.md +290 -0
  83. package/dist/skills/doubao-plugin-app/references/frontend/lynx/overview.md +60 -0
  84. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/animation.md +243 -0
  85. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/responsive.md +194 -0
  86. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/theming.md +143 -0
  87. package/dist/skills/doubao-plugin-app/references/frontend/lynx/quick-reference.md +229 -0
  88. package/dist/skills/doubao-plugin-app/references/frontend/rules/dos-and-donts.md +479 -0
  89. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/design-boundary.md +46 -0
  90. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/overview.md +118 -0
  91. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/props.md +301 -0
  92. package/dist/skills/doubao-plugin-app/references/mcp-and-cards.md +38 -0
  93. package/dist/templates/README.md.template +11 -0
  94. package/dist/templates/com.doubao/app/manifest.yaml +41 -0
  95. package/dist/templates/com.doubao/app/package.json.template +13 -0
  96. package/dist/templates/com.doubao/app/src/app.config.ts.template +5 -0
  97. package/dist/templates/com.doubao/app/src/app.ts.template +3 -0
  98. package/dist/templates/com.doubao/app/src/pages/home/index.css +14 -0
  99. package/dist/templates/com.doubao/app/src/pages/home/index.tsx.template +14 -0
  100. package/dist/templates/com.doubao/app/src/widgets/example/index.tsx.template +29 -0
  101. package/dist/templates/com.doubao/app/tsconfig.json +19 -0
  102. package/dist/templates/mcp.json +9 -0
  103. package/dist/templates/plugin.json.template +29 -0
  104. package/dist/templates/skills/example/SKILL.md.template +14 -0
  105. package/dist/upload.d.ts +44 -0
  106. package/dist/upload.js +38 -0
  107. package/package.json +60 -3
@@ -0,0 +1,784 @@
1
+ # 豆包应用插件的端能力 API: 定位
2
+
3
+ 获取设备当前的地理位置信息。
4
+
5
+ [返回目录](./groups.md) | [返回速查](./quick-reference.md)
6
+
7
+ ## 速查
8
+
9
+ | API | 说明 |
10
+ | --- | --- |
11
+ | [getLocation](#getlocation) | 获取设备当前的地理位置信息。 |
12
+ | [startLocationUpdate](#startlocationupdate) | 开始接收位置更新。 |
13
+ | [stopLocationUpdate](#stoplocationupdate) | 停止接收位置更新。 |
14
+ | [onLocationChange](#onlocationchange) | 注册地理位置变化回调。<br><br>返回取消监听函数。 |
15
+ | [onLocationChangeError](#onlocationchangeerror) | 注册位置更新异常回调。<br><br>返回取消监听函数。 |
16
+
17
+ ## API 详情
18
+
19
+ <a id="getlocation"></a>
20
+ ### getLocation()
21
+
22
+ # getLocation
23
+
24
+ 获取设备当前的地理位置信息。
25
+
26
+ ## 扫码预览
27
+ ![扫码预览 getLocation](https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=doubao%3A%2F%2Fdoubao_apps%3Fapp_id%3Ddb_1McM5Ni%26path%3D%252Fpages%252Fapi%252Flocation%252Fget-location%252Findex)
28
+
29
+ ## 支持版本
30
+
31
+ 前端库版本不低于 `0.0.28`。
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
+ <table>
64
+ <thead>
65
+ <tr><th>类型</th><th>标识</th><th>是否必须</th><th>平台</th><th>说明</th></tr>
66
+ </thead>
67
+ <tbody>
68
+ <tr><td>应用权限</td><td><code>scope.userLocation</code></td><td>必须</td><td>Android、iOS</td><td>需要获取位置信息授权</td></tr>
69
+ <tr><td>系统权限</td><td>地理位置权限</td><td>必须</td><td>Android、iOS</td><td>需要开启系统定位服务并授予位置权限</td></tr>
70
+ </tbody>
71
+ </table>
72
+
73
+ ### 授权行为
74
+
75
+ - **Android**:首次申请位置权限时,调用会先展示应用授权弹窗;同意后如系统定位权限未授予,会继续申请系统权限。拒绝、取消或撤销应用授权后,再次调用不会重复展示应用授权弹窗,而是直接失败;可通过 `authorize({ scope: 'scope.userLocation' })` 重新发起应用授权。系统仍允许询问时会再次申请系统权限;系统不再允许弹出权限申请时,需在系统设置中开启。
76
+ - **iOS**:调用只检查当前的应用授权和系统定位权限,不主动申请权限。任一权限未授予时调用直接失败。调用 `authorize({ scope: 'scope.userLocation' })` 可以重新发起应用授权;系统仍允许询问时会继续申请系统权限,系统不再允许弹出权限申请时会引导用户前往系统设置。
77
+
78
+ ### 前置条件
79
+
80
+ - 在应用权限声明中配置 `scope.userLocation`,并确保系统定位服务已开启
81
+ - **iOS**:调用前通过 `authorize({ scope: 'scope.userLocation' })` 完成应用授权和系统定位权限申请
82
+
83
+ ## 使用说明
84
+
85
+ 定位信息属于敏感数据,仅在业务确有需要时调用并妥善处理返回结果。
86
+
87
+ - 避免高频调用,仅在业务确有需要时获取和使用位置信息
88
+
89
+ ## 调用方式
90
+
91
+ ### 异步 API
92
+
93
+ ```typescript
94
+ getLocation(params?: GetLocationParams): Promise<GetLocationResponse>
95
+ ```
96
+
97
+ ## 入参
98
+
99
+ <table>
100
+ <thead>
101
+ <tr><th>名称</th><th>类型</th><th>必填</th><th>默认值</th><th>约束</th><th>说明</th></tr>
102
+ </thead>
103
+ <tbody>
104
+ <tr><td><code>acceptLightLocation</code></td><td><code>boolean</code></td><td>否</td><td><code>false</code></td><td>仅 Android 生效,需使用 0.0.42 及以上版本的基础库</td><td>是否接受轻定位结果。轻定位会直接利用设备已有的 Wi-Fi 扫描缓存,由服务端快速计算当前位置,缩短定位耗时。</td></tr>
105
+ <tr><td><code>mode</code></td><td><code>number</code></td><td>否</td><td><code>2</code></td><td>取值为 0、1 或 2</td><td>定位模式<br>0:低功耗<br>1:仅设备<br>2:高精度(默认)</td></tr>
106
+ <tr><td><code>source</code></td><td><code>string</code></td><td>否</td><td><code>FlowLocation</code></td><td>1 至 64 个 ASCII 可打印字符</td><td>调用业务方</td></tr>
107
+ <tr><td><code>timeoutMs</code></td><td><code>number</code></td><td>否</td><td><code>30000</code></td><td>正整数,单位毫秒</td><td>超时时间,单位毫秒,默认 30000</td></tr>
108
+ </tbody>
109
+ </table>
110
+
111
+ ## 调用示例
112
+
113
+ ```typescript
114
+ import { getLocation } from '@doubao-dev/framework/api';
115
+
116
+ async function fetchLocation() {
117
+ try {
118
+ const locationData = await getLocation();
119
+ console.log('纬度:', locationData.latitude);
120
+ console.log('经度:', locationData.longitude);
121
+ console.log('时间戳:', locationData.timestamp);
122
+ console.log('行进速度:', locationData.speed);
123
+ console.log('定位精度:', locationData.accuracy);
124
+ } catch (error) {
125
+ console.error('获取位置失败:', error);
126
+ // 处理错误,例如提示用户开启定位权限
127
+ }
128
+ }
129
+
130
+ fetchLocation();
131
+ ```
132
+
133
+ ## 成功返回
134
+
135
+ <table>
136
+ <thead>
137
+ <tr><th>名称</th><th>类型</th><th>必返</th><th>说明</th></tr>
138
+ </thead>
139
+ <tbody>
140
+ <tr><td><code>accuracy</code></td><td><code>number</code></td><td>否</td><td>定位精度,单位:米</td></tr>
141
+ <tr><td><code>latitude</code></td><td><code>number</code></td><td>否</td><td>纬度</td></tr>
142
+ <tr><td><code>longitude</code></td><td><code>number</code></td><td>否</td><td>经度</td></tr>
143
+ <tr><td><code>speed</code></td><td><code>number</code></td><td>否</td><td>行进速度,单位:米/秒</td></tr>
144
+ <tr><td><code>timestamp</code></td><td><code>string</code></td><td>否</td><td>定位时间戳,单位毫秒</td></tr>
145
+ </tbody>
146
+ </table>
147
+
148
+ ### 返回示例
149
+
150
+ ```json
151
+ {
152
+ "latitude": 39.9042,
153
+ "longitude": 116.4074,
154
+ "timestamp": "1784088000000",
155
+ "speed": 0,
156
+ "accuracy": 15
157
+ }
158
+ ```
159
+
160
+ ## 错误处理
161
+
162
+ 错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。
163
+
164
+ ### 失败示例
165
+
166
+ ```json
167
+ {
168
+ "errNo": 107,
169
+ "errMsg": "user permission denied"
170
+ }
171
+ ```
172
+
173
+ ### 错误码
174
+
175
+ <table>
176
+ <thead>
177
+ <tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
178
+ </thead>
179
+ <tbody>
180
+ <tr><td><code>106</code></td><td><code>system permission denied</code></td><td>Android、iOS</td><td>系统定位权限被拒绝或系统定位服务不可用</td><td>引导用户在系统设置中开启定位服务与权限后重试</td></tr>
181
+ <tr><td><code>107</code></td><td><code>user permission denied</code></td><td>Android、iOS</td><td>用户拒绝了应用位置授权(scope.userLocation)</td><td>调用 authorize 重新发起应用授权后重试</td></tr>
182
+ </tbody>
183
+ </table>
184
+
185
+ #### 通用错误码
186
+
187
+ <table>
188
+ <thead>
189
+ <tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
190
+ </thead>
191
+ <tbody>
192
+ <tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android、iOS</td></tr>
193
+ <tr><td><code>116</code></td><td><code>resource not found</code></td><td>资源不存在</td><td>Android</td></tr>
194
+ </tbody>
195
+ </table>
196
+
197
+ ## 平台差异
198
+
199
+ - **Android**:用户拒绝应用授权返回 107、系统权限被拒返回 106;定位失败等其他失败统一返回 102。
200
+ - **iOS**:应用授权或系统权限被拒返回 107/106;其他失败(含非法 scope)统一返回 102。
201
+ - **iOS**:mode 为 1 时按高精度模式处理
202
+
203
+ <a id="startlocationupdate"></a>
204
+ ### startLocationUpdate()
205
+
206
+ # startLocationUpdate
207
+
208
+ 开始接收位置更新。
209
+
210
+ ## 使用限制
211
+
212
+ > [!WARNING]
213
+ > **iOS**:省略 type 时调用失败;iOS 调用方必须显式传入 type。
214
+
215
+ ## 支持版本
216
+
217
+ 前端库版本不低于 `0.0.32`。
218
+
219
+ ## 支持平台
220
+
221
+ <table>
222
+ <thead>
223
+ <tr><th>平台</th><th>支持情况</th></tr>
224
+ </thead>
225
+ <tbody>
226
+ <tr><td>Android</td><td>支持</td></tr>
227
+ <tr><td>iOS</td><td>支持</td></tr>
228
+ <tr><td>PC</td><td>不支持</td></tr>
229
+ <tr><td>HarmonyOS</td><td>不支持</td></tr>
230
+ </tbody>
231
+ </table>
232
+
233
+ ## 支持场景
234
+
235
+ <table>
236
+ <thead>
237
+ <tr><th>场景</th><th>支持情况</th></tr>
238
+ </thead>
239
+ <tbody>
240
+ <tr><td>页面</td><td>支持</td></tr>
241
+ <tr><td>卡片</td><td>不支持</td></tr>
242
+ </tbody>
243
+ </table>
244
+
245
+ ## 接入准备
246
+
247
+ ### 权限要求
248
+
249
+ <table>
250
+ <thead>
251
+ <tr><th>类型</th><th>标识</th><th>是否必须</th><th>平台</th><th>说明</th></tr>
252
+ </thead>
253
+ <tbody>
254
+ <tr><td>应用权限</td><td><code>scope.userLocation</code></td><td>必须</td><td>Android、iOS</td><td>需要获取位置信息授权</td></tr>
255
+ <tr><td>应用权限</td><td><code>scope.userLocationBackground</code></td><td>按条件</td><td>Android、iOS</td><td>实现会尝试申请后台定位授权,申请失败不阻断本次启动</td></tr>
256
+ <tr><td>系统权限</td><td>地理位置权限</td><td>必须</td><td>Android、iOS</td><td>需要开启系统定位服务并授予位置权限</td></tr>
257
+ </tbody>
258
+ </table>
259
+
260
+ ### 授权行为
261
+
262
+ - **Android**:调用会主动申请应用位置授权和系统定位权限,并以尽力而为方式申请后台定位授权。拒绝、取消或撤销应用授权后,再次调用直接失败;可通过 `authorize({ scope: 'scope.userLocation' })` 重新发起。后台定位授权失败不阻断启动。
263
+ - **iOS**:调用会主动申请应用位置授权和系统定位权限,并继续尝试后台定位授权。已拒绝或撤销后再次调用直接失败;可通过 `authorize({ scope: 'scope.userLocation' })` 重新发起。后台定位授权失败不阻断启动。
264
+
265
+ ### 前置条件
266
+
267
+ - 在应用权限声明中配置 `scope.userLocation`,并确保系统定位服务已开启
268
+
269
+ ## 使用说明
270
+
271
+ 需配对调用 stopLocationUpdate。
272
+
273
+ - 建议在启动前注册 `onLocationChange` 和 `onLocationChangeError`;不再需要更新时及时调用 `stopLocationUpdate`
274
+ - **iOS**:调用时必须显式传入 type
275
+ - `scope.userLocationBackground` 为后台定位授权;豆包会尝试申请,申请失败不阻断本次启动
276
+ - 定位信息属于敏感数据,仅在业务确有需要时持续获取和使用;事件回调频率不固定
277
+
278
+ ## 调用方式
279
+
280
+ ### 异步 API
281
+
282
+ ```typescript
283
+ startLocationUpdate(params?: StartLocationUpdateParams): Promise<LocationOperationResult>
284
+ ```
285
+
286
+ ## 入参
287
+
288
+ <table>
289
+ <thead>
290
+ <tr><th>名称</th><th>类型</th><th>必填</th><th>默认值</th><th>约束</th><th>说明</th></tr>
291
+ </thead>
292
+ <tbody>
293
+ <tr><td><code>type</code></td><td><code>&quot;wgs84&quot; | &quot;gcj02&quot;</code></td><td>否</td><td><code>gcj02</code></td><td>wgs84 表示 WGS-84 坐标系,gcj02 表示 GCJ-02 坐标系</td><td>坐标系类型,支持 wgs84 或 gcj02。iOS:省略 type 时调用失败。</td></tr>
294
+ </tbody>
295
+ </table>
296
+
297
+ ## 调用示例
298
+
299
+ ```typescript
300
+ import { startLocationUpdate } from '@doubao-dev/framework/api';
301
+
302
+ await startLocationUpdate({ type: 'gcj02' });
303
+ ```
304
+
305
+ ## 成功返回
306
+
307
+ 无返回字段。
308
+
309
+ ### 返回示例
310
+
311
+ ```json
312
+ {}
313
+ ```
314
+
315
+ ## 错误处理
316
+
317
+ 错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。
318
+
319
+ ### 失败示例
320
+
321
+ ```json
322
+ {
323
+ "errNo": 1700001,
324
+ "errMsg": "location permission denied"
325
+ }
326
+ ```
327
+
328
+ ### 错误码
329
+
330
+ <table>
331
+ <thead>
332
+ <tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
333
+ </thead>
334
+ <tbody>
335
+ <tr><td><code>103</code></td><td><code>feature not support</code></td><td>Android、iOS</td><td>当前豆包客户端未提供持续定位能力(location service 不可用)</td><td>请在支持持续定位的豆包版本中调用</td></tr>
336
+ <tr><td><code>114</code></td><td><code>operation cancelled</code></td><td>Android、iOS</td><td>启动过程中被取消(用户取消授权,或授权返回前已调用 stopLocationUpdate)</td><td>需要时重新调用 startLocationUpdate</td></tr>
337
+ <tr><td><code>118</code></td><td><code>already exists</code></td><td>Android、iOS</td><td>持续定位已启动,重复调用 startLocationUpdate</td><td>先调用 stopLocationUpdate 再重新启动</td></tr>
338
+ <tr><td><code>1700001</code></td><td><code>location permission denied</code></td><td>Android、iOS</td><td>用户拒绝应用位置授权或系统定位权限被拒</td><td>调用 authorize 重新发起授权并在系统设置中开启定位权限后重试</td></tr>
339
+ <tr><td><code>1700002</code></td><td><code>location network error</code></td><td>Android、iOS</td><td>位置授权过程中发生网络错误</td><td>检查网络连接后重试</td></tr>
340
+ <tr><td><code>104</code></td><td><code>invalid parameter</code></td><td>iOS</td><td>位置授权 scope 非法</td><td>检查应用权限声明中配置的 scope 后重试</td></tr>
341
+ </tbody>
342
+ </table>
343
+
344
+ #### 通用错误码
345
+
346
+ <table>
347
+ <thead>
348
+ <tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
349
+ </thead>
350
+ <tbody>
351
+ <tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android、iOS</td></tr>
352
+ </tbody>
353
+ </table>
354
+
355
+ ## 平台差异
356
+
357
+ - **Android**:用户拒绝授权返回 1700001、取消返回 114、授权网络失败返回 1700002;当前豆包客户端不支持持续定位时返回 103;其他失败统一返回 102。
358
+ - **iOS**:用户拒绝授权返回 1700001、取消返回 114、授权网络失败返回 1700002、非法 scope 返回 104;当前豆包客户端不支持持续定位时返回 103;其他失败统一返回 102。
359
+
360
+ <a id="stoplocationupdate"></a>
361
+ ### stopLocationUpdate()
362
+
363
+ # stopLocationUpdate
364
+
365
+ 停止接收位置更新。
366
+
367
+ ## 支持版本
368
+
369
+ 前端库版本不低于 `0.0.32`。
370
+
371
+ ## 支持平台
372
+
373
+ <table>
374
+ <thead>
375
+ <tr><th>平台</th><th>支持情况</th></tr>
376
+ </thead>
377
+ <tbody>
378
+ <tr><td>Android</td><td>支持</td></tr>
379
+ <tr><td>iOS</td><td>支持</td></tr>
380
+ <tr><td>PC</td><td>不支持</td></tr>
381
+ <tr><td>HarmonyOS</td><td>不支持</td></tr>
382
+ </tbody>
383
+ </table>
384
+
385
+ ## 支持场景
386
+
387
+ <table>
388
+ <thead>
389
+ <tr><th>场景</th><th>支持情况</th></tr>
390
+ </thead>
391
+ <tbody>
392
+ <tr><td>页面</td><td>支持</td></tr>
393
+ <tr><td>卡片</td><td>不支持</td></tr>
394
+ </tbody>
395
+ </table>
396
+
397
+ ## 接入准备
398
+
399
+ ### 前置条件
400
+
401
+ - 无额外前置条件;通常在 `startLocationUpdate` 成功后调用
402
+
403
+ ## 使用说明
404
+
405
+ - 尚未启动或启动仍在授权阶段时调用会直接成功,可用于安全清理持续定位状态
406
+
407
+ ## 调用方式
408
+
409
+ ### 异步 API
410
+
411
+ ```typescript
412
+ stopLocationUpdate(): Promise<LocationOperationResult>
413
+ ```
414
+
415
+ ## 入参
416
+
417
+ 无。
418
+
419
+ ## 调用示例
420
+
421
+ ```typescript
422
+ import { stopLocationUpdate } from '@doubao-dev/framework/api';
423
+
424
+ await stopLocationUpdate();
425
+ ```
426
+
427
+ ## 成功返回
428
+
429
+ 无返回字段。
430
+
431
+ ### 返回示例
432
+
433
+ ```json
434
+ {}
435
+ ```
436
+
437
+ ## 错误处理
438
+
439
+ 错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。
440
+
441
+ ### 失败示例
442
+
443
+ ```json
444
+ {
445
+ "errNo": 103,
446
+ "errMsg": "feature not support"
447
+ }
448
+ ```
449
+
450
+ ### 错误码
451
+
452
+ <table>
453
+ <thead>
454
+ <tr><th>errNo</th><th>errMsg</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
455
+ </thead>
456
+ <tbody>
457
+ <tr><td><code>103</code></td><td><code>feature not support</code></td><td>Android、iOS</td><td>当前豆包客户端未提供持续定位能力(location service 不可用),无法停止</td><td>请在支持持续定位的豆包版本中调用</td></tr>
458
+ </tbody>
459
+ </table>
460
+
461
+ #### 通用错误码
462
+
463
+ <table>
464
+ <thead>
465
+ <tr><th>errNo</th><th>errMsg</th><th>说明</th><th>平台</th></tr>
466
+ </thead>
467
+ <tbody>
468
+ <tr><td><code>102</code></td><td><code>internal error</code></td><td>内部错误</td><td>Android、iOS</td></tr>
469
+ </tbody>
470
+ </table>
471
+
472
+ ## 平台差异
473
+
474
+ - 未启动或仍在授权阶段调用直接返回成功;仅在已启动后停止失败时返回错误码,其他失败统一返回 102。
475
+
476
+ <a id="onlocationchange"></a>
477
+ ### onLocationChange()
478
+
479
+ # onLocationChange
480
+
481
+ 注册地理位置变化回调。
482
+
483
+ ## 支持版本
484
+
485
+ 前端库版本不低于 `0.0.32`。
486
+
487
+ ## 支持平台
488
+
489
+ <table>
490
+ <thead>
491
+ <tr><th>平台</th><th>支持情况</th></tr>
492
+ </thead>
493
+ <tbody>
494
+ <tr><td>Android</td><td>支持</td></tr>
495
+ <tr><td>iOS</td><td>支持</td></tr>
496
+ <tr><td>PC</td><td>不支持</td></tr>
497
+ <tr><td>HarmonyOS</td><td>不支持</td></tr>
498
+ </tbody>
499
+ </table>
500
+
501
+ ## 支持场景
502
+
503
+ <table>
504
+ <thead>
505
+ <tr><th>场景</th><th>支持情况</th></tr>
506
+ </thead>
507
+ <tbody>
508
+ <tr><td>页面</td><td>支持</td></tr>
509
+ <tr><td>卡片</td><td>不支持</td></tr>
510
+ </tbody>
511
+ </table>
512
+
513
+ ## 使用说明
514
+
515
+ - 建议在调用 `startLocationUpdate` 前注册;不再使用时调用返回的取消函数释放当前监听
516
+ - 定位信息属于敏感数据,仅在业务确有需要时监听和使用;事件回调频率不固定
517
+
518
+ ## 调用方式
519
+
520
+ ### 事件监听 API
521
+
522
+ ```typescript
523
+ onLocationChange(callback: LocationChangeListener): () => void
524
+ ```
525
+
526
+ ## 入参
527
+
528
+ 无。
529
+
530
+ ## 调用示例
531
+
532
+ ```typescript
533
+ import { onLocationChange } from '@doubao-dev/framework/api';
534
+
535
+ const unsubscribe = onLocationChange(({ latitude, longitude }) => {
536
+ console.log(latitude, longitude);
537
+ });
538
+
539
+ unsubscribe();
540
+ ```
541
+
542
+ ## 回调参数
543
+
544
+ <table>
545
+ <thead>
546
+ <tr><th>名称</th><th>类型</th><th>必返</th><th>说明</th></tr>
547
+ </thead>
548
+ <tbody>
549
+ <tr><td><code>event.accuracy</code></td><td><code>number</code></td><td>否</td><td>位置精确度,单位 m</td></tr>
550
+ <tr><td><code>event.altitude</code></td><td><code>number</code></td><td>否</td><td>高度,单位 m</td></tr>
551
+ <tr><td><code>event.city</code></td><td><code>string</code></td><td>否</td><td>城市信息</td></tr>
552
+ <tr><td><code>event.horizontalAccuracy</code></td><td><code>number</code></td><td>否</td><td>水平精度,单位 m。Android 固定返回 0。</td></tr>
553
+ <tr><td><code>event.latitude</code></td><td><code>number</code></td><td>是</td><td>纬度</td></tr>
554
+ <tr><td><code>event.longitude</code></td><td><code>number</code></td><td>是</td><td>经度</td></tr>
555
+ <tr><td><code>event.speed</code></td><td><code>number</code></td><td>否</td><td>速度,单位 m/s</td></tr>
556
+ <tr><td><code>event.verticalAccuracy</code></td><td><code>number</code></td><td>否</td><td>垂直精度,单位 m。Android 固定返回 0。</td></tr>
557
+ </tbody>
558
+ </table>
559
+
560
+ ## 返回值
561
+
562
+ 返回取消当前监听函数的函数。
563
+
564
+ ### 回调示例
565
+
566
+ ```json
567
+ {
568
+ "latitude": 39.908823,
569
+ "longitude": 116.39747,
570
+ "speed": 0,
571
+ "accuracy": 12,
572
+ "altitude": 45,
573
+ "verticalAccuracy": 0,
574
+ "horizontalAccuracy": 12,
575
+ "city": "北京"
576
+ }
577
+ ```
578
+
579
+ ## 平台差异
580
+
581
+ - **Android**:verticalAccuracy 和 horizontalAccuracy 固定返回 0,不表示实际定位精度
582
+ - **Android**:豆包以 1000 毫秒为期望间隔请求位置更新,实际回调频率仍可能受系统影响
583
+ - **iOS**:位置更新频率由系统定位服务调度
584
+
585
+ <a id="onlocationchangeerror"></a>
586
+ ### onLocationChangeError()
587
+
588
+ # onLocationChangeError
589
+
590
+ 注册位置更新异常回调。
591
+
592
+ ## 支持版本
593
+
594
+ 前端库版本不低于 `0.0.32`。
595
+
596
+ ## 支持平台
597
+
598
+ <table>
599
+ <thead>
600
+ <tr><th>平台</th><th>支持情况</th></tr>
601
+ </thead>
602
+ <tbody>
603
+ <tr><td>Android</td><td>支持</td></tr>
604
+ <tr><td>iOS</td><td>支持</td></tr>
605
+ <tr><td>PC</td><td>不支持</td></tr>
606
+ <tr><td>HarmonyOS</td><td>不支持</td></tr>
607
+ </tbody>
608
+ </table>
609
+
610
+ ## 支持场景
611
+
612
+ <table>
613
+ <thead>
614
+ <tr><th>场景</th><th>支持情况</th></tr>
615
+ </thead>
616
+ <tbody>
617
+ <tr><td>页面</td><td>支持</td></tr>
618
+ <tr><td>卡片</td><td>不支持</td></tr>
619
+ </tbody>
620
+ </table>
621
+
622
+ ## 使用说明
623
+
624
+ - 建议在调用 `startLocationUpdate` 前注册;不再使用时调用返回的取消函数释放当前监听
625
+
626
+ ## 调用方式
627
+
628
+ ### 事件监听 API
629
+
630
+ ```typescript
631
+ onLocationChangeError(callback: LocationChangeErrorListener): () => void
632
+ ```
633
+
634
+ ## 入参
635
+
636
+ 无。
637
+
638
+ ## 调用示例
639
+
640
+ ```typescript
641
+ import { onLocationChangeError } from '@doubao-dev/framework/api';
642
+
643
+ const unsubscribe = onLocationChangeError(({ errMsg, errCode }) => {
644
+ console.log(errMsg, errCode);
645
+ });
646
+
647
+ unsubscribe();
648
+ ```
649
+
650
+ ## 回调参数
651
+
652
+ <table>
653
+ <thead>
654
+ <tr><th>名称</th><th>类型</th><th>必返</th><th>说明</th></tr>
655
+ </thead>
656
+ <tbody>
657
+ <tr><td><code>event.errCode</code></td><td><code>number</code></td><td>否</td><td>错误码</td></tr>
658
+ <tr><td><code>event.errMsg</code></td><td><code>string</code></td><td>是</td><td>错误信息</td></tr>
659
+ </tbody>
660
+ </table>
661
+
662
+ ## 返回值
663
+
664
+ 返回取消当前监听函数的函数。
665
+
666
+ ### 回调示例
667
+
668
+ ```json
669
+ {
670
+ "errMsg": "location_timeout",
671
+ "errCode": 0
672
+ }
673
+ ```
674
+
675
+ ## 错误处理
676
+
677
+ 错误对象和通用错误码见 [通用错误处理](./common-errors.md#错误返回)。
678
+
679
+ ### 失败示例
680
+
681
+ ```json
682
+ {
683
+ "errMsg": "location_timeout",
684
+ "errCode": 0
685
+ }
686
+ ```
687
+
688
+ ### 错误码
689
+
690
+ #### 事件错误码
691
+
692
+ <table>
693
+ <thead>
694
+ <tr><th>错误字段</th><th>值</th><th>错误信息</th><th>平台</th><th>触发条件</th><th>处理建议</th></tr>
695
+ </thead>
696
+ <tbody>
697
+ <tr><td><code>event.errCode</code></td><td><code>0</code></td><td>-</td><td>Android</td><td>持续定位过程中发生异常</td><td>结合 errMsg 检查系统定位服务、权限和网络环境</td></tr>
698
+ <tr><td><code>event.errCode</code></td><td><code>0</code></td><td><code>location_timeout</code></td><td>iOS</td><td>系统定位超时</td><td>稍后重试,并检查定位环境</td></tr>
699
+ <tr><td><code>event.errCode</code></td><td><code>1</code></td><td><code>location_service_disabled</code></td><td>iOS</td><td>系统定位服务已关闭</td><td>在系统设置中开启定位服务</td></tr>
700
+ <tr><td><code>event.errCode</code></td><td><code>25</code></td><td><code>location_permission_denied</code></td><td>iOS</td><td>尚未完成系统定位授权</td><td>重新发起授权后重试</td></tr>
701
+ <tr><td><code>event.errCode</code></td><td><code>27</code></td><td><code>location_permission_denied</code></td><td>iOS</td><td>用户拒绝系统定位权限</td><td>引导用户在系统设置中开启定位权限</td></tr>
702
+ <tr><td><code>event.errCode</code></td><td><code>29</code></td><td><code>location_permission_denied</code></td><td>iOS</td><td>系统限制定位权限</td><td>提示用户检查系统限制设置</td></tr>
703
+ </tbody>
704
+ </table>
705
+
706
+ ## 平台差异
707
+
708
+ - **iOS**:其他系统定位异常会保留原始 errCode 并返回 location_fail;位置结果无效时事件中可能不包含 errCode
709
+
710
+ ## 相关类型
711
+
712
+ <a id="getlocationparams"></a>
713
+ ### GetLocationParams
714
+
715
+ #### Properties
716
+
717
+ • **source?**: `string` - 调用业务方
718
+ • **mode?**: `number` - 定位模式 0:低功耗 1:仅设备 2:高精度(默认)
719
+ • **acceptLightLocation?**: `boolean` - 是否接受轻定位结果。轻定位会直接利用设备已有的 Wi-Fi 扫描缓存,由服务端快速计算当前位置,缩短定位耗时
720
+ • **timeoutMs?**: `number` - 超时时间,单位毫秒,默认 30000
721
+ • **maxCacheMs?**: `number` - 兼容保留字段,当前不生效
722
+
723
+ <a id="getlocationresponse"></a>
724
+ ### GetLocationResponse
725
+
726
+ #### Properties
727
+
728
+ • **latitude?**: `number` - 纬度
729
+ • **longitude?**: `number` - 经度
730
+ • **timestamp?**: `string` - 定位时间戳,单位毫秒
731
+ • **speed?**: `number` - 行进速度,单位:米/秒
732
+ • **accuracy?**: `number` - 定位精度,单位:米
733
+
734
+ <a id="startlocationupdateparams"></a>
735
+ ### StartLocationUpdateParams
736
+
737
+ #### Properties
738
+
739
+ • **type?**: `'wgs84' | 'gcj02'` - 坐标系类型,支持 wgs84 或 gcj02
740
+
741
+ <a id="locationoperationresult"></a>
742
+ ### LocationOperationResult
743
+
744
+ 定位操作成功时返回的空结果。 @public。
745
+
746
+ #### Type
747
+
748
+ `Record<string, never>`
749
+
750
+ <a id="locationchangelistener"></a>
751
+ ### LocationChangeListener
752
+
753
+ #### Type
754
+
755
+ `(event: LocationChangeEvent) => void`
756
+
757
+ <a id="locationchangeevent"></a>
758
+ ### LocationChangeEvent
759
+
760
+ #### Properties
761
+
762
+ • **latitude**: `number` - 纬度
763
+ • **longitude**: `number` - 经度
764
+ • **speed?**: `number` - 速度,单位 m/s
765
+ • **accuracy?**: `number` - 位置精确度,单位 m
766
+ • **altitude?**: `number` - 高度,单位 m
767
+ • **verticalAccuracy?**: `number` - 垂直精度,单位 m。Android 固定返回 0
768
+ • **horizontalAccuracy?**: `number` - 水平精度,单位 m。Android 固定返回 0
769
+ • **city?**: `string` - 城市信息
770
+
771
+ <a id="locationchangeerrorlistener"></a>
772
+ ### LocationChangeErrorListener
773
+
774
+ #### Type
775
+
776
+ `(event: LocationChangeErrorEvent) => void`
777
+
778
+ <a id="locationchangeerrorevent"></a>
779
+ ### LocationChangeErrorEvent
780
+
781
+ #### Properties
782
+
783
+ • **errMsg**: `string` - 错误信息
784
+ • **errCode?**: `number` - 错误码