1# AutoFillRequest (系统接口) 2 3当AutoFillExtensionAbility触发回调函数时,提供给开发者的页面数据和回调接口。 4 5> **说明:** 6> 7> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 本模块接口均为系统接口。 9> 本模块接口仅可在Stage模型下使用。 10 11## 导入模块 12 13```ts 14import { autoFillManager } from '@kit.AbilityKit'; 15``` 16 17## FillRequest 18 19自动填充信息。 20 21**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 22 23| 名称 | 类型 | 必填 | 说明 | 24| ----------- | -------------------- | ---- | ------------------------------------------------------------ | 25| type | [AutoFillType](js-apis-inner-application-autoFillType-sys.md) | 是 | 自动填充类型。 | 26| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | 是 | 页面数据。 | 27| isPopup<sup>12+</sup> | boolean | 是 | 自动填充服务是否拉起popup窗口。<br>true:当前拉起popup窗口。<br>false:当前拉起模态窗。 | 28 29## SaveRequest 30 31自动保存请求信息。 32 33**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 34 35| 名称 | 类型 | 必填 | 说明 | 36| ----------- | -------------------- | ---- | ------------------------------------------------------------ | 37| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | 是 | 页面数据。 | 38 39## UpdateRequest<sup>12+</sup> 40 41自动填充更新信息。 42 43**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 44 45| 名称 | 类型 | 必填 | 说明 | 46| ----------- | -------------------- | ---- | ------------------------------------------------------------ | 47| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | 是 | 页面数据。 | 48 49## FillResponse 50 51自动填充响应。 52 53**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 54 55| 名称 | 类型 | 必填 | 说明 | 56| ----------- | -------------------- | ---- | ------------------------------------------------------------ | 57| viewData | [ViewData](js-apis-inner-application-viewData-sys.md) | 是 | 页面数据。 | 58 59## FillRequestCallback 60 61自动填充或者生成密码时的回调对象,可以通过此回调通知客户端成功或者失败。 62 63### FillRequestCallback.onSuccess 64 65onSuccess(response: FillResponse): void 66 67通知自动填充请求已成功完成。 68 69**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 70 71**参数:** 72 73| 参数名 | 类型 | 必填 | 说明 | 74| -------- | -------- | -------- | ------------------------------ | 75| response | [FillResponse](../apis/#fillresponse) | 是 | 自动填充响应信息。 | 76 77**错误码:** 78 79以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 80 81| 错误码ID | 错误信息 | 82| ------- | -------------------------------- | 83| 401 | Parameter error. Possible causes: Mandatory parameters are left unspecified. | 84| 16000050 | Internal error. | 85 86**示例:** 87 88```ts 89// MyAutoFillExtensionAbility.ts 90import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 91import { hilog } from '@kit.PerformanceAnalysisKit'; 92 93class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 94 onFillRequest(session: UIExtensionContentSession, 95 request: autoFillManager.FillRequest, 96 callback: autoFillManager.FillRequestCallback) { 97 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 98 try { 99 let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = { 100 'fillCallback': callback, 101 'message': 'AutoFill Page', 102 'viewData': request.viewData, 103 } 104 let storage_fill = new LocalStorage(storageData); 105 if (session) { 106 session.loadContent('pages/AutoFillPage', storage_fill); 107 } else { 108 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 109 } 110 } catch (err) { 111 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 112 } 113 } 114} 115``` 116 117```ts 118// AutoFillPage.ets 119import { autoFillManager } from '@kit.AbilityKit'; 120import { BusinessError } from '@kit.BasicServicesKit'; 121import { hilog } from '@kit.PerformanceAnalysisKit'; 122 123let storage: LocalStorage = LocalStorage.getShared(); 124let fillCallback: autoFillManager.FillRequestCallback | undefined = 125 storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 126let viewData: autoFillManager.ViewData | undefined = storage.get<autoFillManager.ViewData>('viewData'); 127 128@Entry 129@Component 130struct AutoFillPage { 131 build() { 132 Row() { 133 Column() { 134 Text('AutoFill Page') 135 .fontSize(50) 136 .fontWeight(FontWeight.Bold) 137 } 138 139 Button('onSuccess') 140 .onClick(() => { 141 if (viewData) { 142 viewData.pageNodeInfos[0].value = 'user1'; 143 viewData.pageNodeInfos[1].value = 'user1 password'; 144 viewData.pageNodeInfos[2].value = 'user1 generate new password'; 145 hilog.info(0x0000, 'testTag', 'autofill success with viewData: %{public}s', JSON.stringify(viewData)); 146 try { 147 fillCallback?.onSuccess({ viewData: viewData }); 148 } catch (error) { 149 console.error(`catch error, code: ${(error as BusinessError).code}, 150 message: ${(error as BusinessError).message}`); 151 } 152 } 153 }) 154 .width('100%') 155 } 156 .height('100%') 157 } 158} 159``` 160 161### FillRequestCallback.onFailure 162 163onFailure(): void 164 165通知自动填充请求已失败。 166 167**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 168 169**错误码:** 170 171| 错误码ID | 错误信息 | 172| ------- | -------------------------------- | 173| 16000050 | Internal error. | 174 175**示例:** 176 177```ts 178// MyAutoFillExtensionAbility.ts 179import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 180import { hilog } from '@kit.PerformanceAnalysisKit'; 181 182class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 183 onFillRequest(session: UIExtensionContentSession, 184 request: autoFillManager.FillRequest, 185 callback: autoFillManager.FillRequestCallback) { 186 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 187 try { 188 let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = { 189 'fillCallback': callback, 190 'message': 'AutoFill Page', 191 'viewData': request.viewData, 192 } 193 let storage_fill = new LocalStorage(storageData); 194 if (session) { 195 session.loadContent('pages/AutoFill Page', storage_fill); 196 } else { 197 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 198 } 199 } catch (err) { 200 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 201 } 202 } 203} 204``` 205 206```ts 207// AutoFillPage.ets 208import { autoFillManager } from '@kit.AbilityKit'; 209import { BusinessError } from '@kit.BasicServicesKit'; 210import { hilog } from '@kit.PerformanceAnalysisKit'; 211 212let storage: LocalStorage = LocalStorage.getShared(); 213let fillCallback: autoFillManager.FillRequestCallback | undefined = 214 storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 215 216@Entry 217@Component 218struct AutoFillPage { 219 build() { 220 Row() { 221 Column() { 222 Text('AutoFill Page') 223 .fontSize(50) 224 .fontWeight(FontWeight.Bold) 225 } 226 227 Button('onFailure') 228 .onClick(() => { 229 hilog.info(0x0000, 'testTag', 'autofill failure'); 230 try { 231 fillCallback?.onFailure(); 232 } catch (error) { 233 console.error(`catch error, code: ${(error as BusinessError).code}, 234 message: ${(error as BusinessError).message}`); 235 } 236 }) 237 .width('100%') 238 } 239 .height('100%') 240 } 241} 242``` 243 244### FillRequestCallback.onCancel 245 246onCancel(fillContent?: string): void 247 248通知自动填充已被取消。 249 250**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 251 252**参数:** 253 254| 参数名 | 类型 | 必填 | 说明 | 255| ------------------------- | ------ | ---- | -------------------- | 256| fillContent<sup>12+</sup> | string | 否 | 表示通知自动填充取消后,返回给输入法框架的填充内容。 | 257 258**错误码:** 259 260以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 261 262| 错误码ID | 错误信息 | 263| ------- | -------------------------------- | 264| 401 | Parameter error. Possible causes: 1. The input parameter is not valid parameter;2. Mandatory parameters are left unspecified. | 265| 16000050 | Internal error. | 266 267**示例:** 268 269```ts 270// MyAutoFillExtensionAbility.ts 271import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 272import { hilog } from '@kit.PerformanceAnalysisKit'; 273 274class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 275 onFillRequest(session: UIExtensionContentSession, 276 request: autoFillManager.FillRequest, 277 callback: autoFillManager.FillRequestCallback) { 278 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 279 try { 280 let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = { 281 'fillCallback': callback, 282 'message': 'AutoFill Page', 283 'viewData': request.viewData, 284 } 285 let storage_fill = new LocalStorage(storageData); 286 if (session) { 287 session.loadContent('pages/AutoFillPage', storage_fill); 288 } else { 289 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 290 } 291 } catch (err) { 292 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 293 } 294 } 295} 296``` 297 298```ts 299// AutoFillPage.ets 300import { autoFillManager } from '@kit.AbilityKit'; 301import { BusinessError } from '@kit.BasicServicesKit'; 302import { hilog } from '@kit.PerformanceAnalysisKit'; 303 304let storage: LocalStorage = LocalStorage.getShared(); 305let fillCallback: autoFillManager.FillRequestCallback | undefined = 306 storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 307 308@Entry 309@Component 310struct AutoFillPage { 311 build() { 312 Row() { 313 Column() { 314 Text('Hello World') 315 .fontSize(50) 316 .fontWeight(FontWeight.Bold) 317 } 318 319 Button('onCancel') 320 .onClick(() => { 321 hilog.info(0x0000, 'testTag', 'autofill cancel'); 322 try { 323 fillCallback?.onCancel(); 324 } catch (error) { 325 console.error(`catch error, code: ${(error as BusinessError).code}, 326 message: ${(error as BusinessError).message}`); 327 } 328 }) 329 .width('100%') 330 } 331 .height('100%') 332 } 333} 334``` 335 336### FillRequestCallback.setAutoFillPopupConfig 337 338setAutoFillPopupConfig(autoFillPopupConfig: AutoFillPopupConfig ): void 339 340动态调整气泡弹窗的尺寸和位置。 341 342**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 343 344**参数:** 345 346| 参数名 | 类型 | 必填 | 说明 | 347| -------- | -------- | -------- | ------------------------------ | 348| autoFillPopupConfig | [AutoFillPopupConfig](js-apis-inner-application-autoFillPopupConfig-sys.md) | 是 | 气泡弹窗尺寸和位置信息。 | 349 350**错误码:** 351 352以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 353 354| 错误码ID | 错误信息 | 355| ------- | -------------------------------- | 356| 401 | Parameter error. Possible causes: Mandatory parameters are left unspecified. | 357| 202 | Permission verification failed. Possible causes: non-system app called system api. | 358| 16000050 | Internal error. | 359 360**示例:** 361 362```ts 363// MyAutoFillExtensionAbility.ts 364import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 365import { hilog } from '@kit.PerformanceAnalysisKit'; 366 367export default class AutoFillAbility extends AutoFillExtensionAbility { 368 onCreate(): void { 369 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onCreate'); 370 } 371 372 onDestroy(): void { 373 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onDestroy'); 374 } 375 376 onSessionDestroy(session: UIExtensionContentSession) { 377 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSessionDestroy'); 378 hilog.info(0x0000, 'testTag', 'session content: %{public}s', JSON.stringify(session)); 379 } 380 381 onForeground(): void { 382 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onForeground'); 383 } 384 385 onBackground(): void { 386 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onBackground'); 387 } 388 389 onUpdateRequest(request: autoFillManager.UpdateRequest): void { 390 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onUpdateRequest'); 391 console.log(`get fill request viewData: ${JSON.stringify(request.viewData)}.`); 392 let storage = LocalStorage.getShared(); 393 let fillCallback = storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 394 395 if (fillCallback) { 396 try { 397 hilog.info(0x0000, 'testTag', 'pageNodeInfos.value: ' + JSON.stringify(request.viewData.pageNodeInfos[0].value)); 398 fillCallback.setAutoFillPopupConfig({ 399 popupSize: { 400 width: 400 + request.viewData.pageNodeInfos[0].value.length * 10, 401 height: 200 + request.viewData.pageNodeInfos[0].value.length * 10 402 }, 403 placement: autoFillManager.PopupPlacement.TOP 404 }); 405 } catch (err) { 406 hilog.info(0x0000, 'testTag', 'autoFillPopupConfig err: ' + err.code); 407 } 408 } 409 } 410 411 onFillRequest(session: UIExtensionContentSession, request: autoFillManager.FillRequest, callback: autoFillManager.FillRequestCallback) { 412 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 413 hilog.info(0x0000, 'testTag', 'Fill RequestCallback: %{public}s ', JSON.stringify(callback)); 414 console.log(`testTag. Get fill request viewData: ${JSON.stringify(request.viewData)}.`); 415 console.log(`testTag. Get fill request type: ${JSON.stringify(request.type)}.`); 416 417 try { 418 let localStorageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData | autoFillManager.AutoFillType> = { 419 'message': 'AutoFill Page', 420 'fillCallback': callback, 421 'viewData': request.viewData, 422 'autoFillType': request.type 423 } 424 let storage_fill = new LocalStorage(localStorageData); 425 console.info(`testTag. Session: ${JSON.stringify(session)}.`); 426 let size: autoFillManager.PopupSize = { 427 width: 400, 428 height: 200 429 }; 430 callback.setAutoFillPopupConfig({ 431 popupSize: size 432 }); 433 session.loadContent('pages/SelectorList', storage_fill); 434 } catch (err) { 435 hilog.error(0x0000, 'testTag', '%{public}s', 'autofill failed to load content: ' + JSON.stringify(err)); 436 } 437 } 438 439 onSaveRequest(session: UIExtensionContentSession, request: autoFillManager.SaveRequest, callback: autoFillManager.SaveRequestCallback) { 440 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSaveRequest'); 441 try { 442 let localStorageData: Record<string, string | autoFillManager.SaveRequestCallback> = { 443 'message': 'AutoFill Page', 444 'saveCallback': callback 445 }; 446 let storage_save = new LocalStorage(localStorageData); 447 if (session) { 448 session.loadContent('pages/SavePage', storage_save); 449 } else { 450 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 451 } 452 } catch (err) { 453 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 454 } 455 } 456} 457``` 458 459## SaveRequestCallback 460 461自动保存或者手动保存请求回调。 462 463### SaveRequestCallback.onSuccess 464 465onSuccess(): void 466 467通知保存请求已成功处理。 468 469**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 470 471**错误码:** 472 473以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 474 475| 错误码ID | 错误信息 | 476| ------- | -------------------------------- | 477| 16000050 | Internal error. | 478 479**示例:** 480 481```ts 482// MyAutoFillExtensionAbility.ts 483import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 484import { hilog } from '@kit.PerformanceAnalysisKit'; 485class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 486 onSaveRequest(session: UIExtensionContentSession, 487 request: autoFillManager.SaveRequest, 488 callback: autoFillManager.SaveRequestCallback) { 489 hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest'); 490 try { 491 let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = { 492 'message': 'AutoFill Page', 493 'saveCallback': callback, 494 'viewData': request.viewData 495 }; 496 let storage_save = new LocalStorage(storageData); 497 if (session) { 498 session.loadContent('pages/SavePage', storage_save); 499 } else { 500 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 501 } 502 } catch (err) { 503 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 504 } 505 } 506} 507``` 508 509```ts 510// SavePage.ets 511import { autoFillManager } from '@kit.AbilityKit'; 512import { BusinessError } from '@kit.BasicServicesKit'; 513import { hilog } from '@kit.PerformanceAnalysisKit'; 514 515let storage: LocalStorage = LocalStorage.getShared(); 516let saveCallback: autoFillManager.SaveRequestCallback | undefined = 517 storage.get<autoFillManager.SaveRequestCallback>('saveCallback'); 518 519@Entry 520@Component 521struct SavePage { 522 build() { 523 Row() { 524 Column() { 525 Text('SavePage') 526 .fontSize(50) 527 .fontWeight(FontWeight.Bold) 528 } 529 530 Button('onSuccess') 531 .onClick(() => { 532 hilog.info(0x0000, 'testTag', 'autosave success'); 533 try { 534 saveCallback?.onSuccess(); 535 } catch (error) { 536 console.error(`catch error, code: ${(error as BusinessError).code}, 537 message: ${(error as BusinessError).message}`); 538 } 539 }) 540 .width('100%') 541 } 542 .height('100%') 543 } 544} 545``` 546 547### SaveRequestCallback.onFailure 548 549onFailure(): void 550 551通知保存请求处理失败。 552 553**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 554 555**错误码:** 556 557以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 558 559| 错误码ID | 错误信息 | 560| ------- | -------------------------------- | 561| 16000050 | Internal error. | 562 563**示例:** 564 565```ts 566// MyAutoFillExtensionAbility.ts 567import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 568import { hilog } from '@kit.PerformanceAnalysisKit'; 569 570class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 571 onSaveRequest(session: UIExtensionContentSession, 572 request: autoFillManager.SaveRequest, 573 callback: autoFillManager.SaveRequestCallback) { 574 hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest'); 575 try { 576 let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = { 577 'message': 'AutoFill Page', 578 'saveCallback': callback, 579 'viewData': request.viewData 580 } 581 let storage_save = new LocalStorage(storageData); 582 if (session) { 583 session.loadContent('pages/SavePage', storage_save); 584 } else { 585 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 586 } 587 } catch (err) { 588 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 589 } 590 } 591} 592``` 593 594```ts 595// SavePage.ets 596import { autoFillManager } from '@kit.AbilityKit'; 597import { BusinessError } from '@kit.BasicServicesKit'; 598import { hilog } from '@kit.PerformanceAnalysisKit'; 599 600let storage: LocalStorage = LocalStorage.getShared(); 601let saveCallback: autoFillManager.SaveRequestCallback | undefined = 602 storage.get<autoFillManager.SaveRequestCallback>('saveCallback'); 603 604@Entry 605@Component 606struct SavePage { 607 build() { 608 Row() { 609 Column() { 610 Text('Save Page') 611 .fontSize(50) 612 .fontWeight(FontWeight.Bold) 613 } 614 615 Button('onFailure') 616 .onClick(() => { 617 hilog.info(0x0000, 'testTag', 'autofill failure'); 618 try { 619 saveCallback?.onFailure(); 620 } catch (error) { 621 console.error(`catch error, code: ${(error as BusinessError).code}, 622 message: ${(error as BusinessError).message}`); 623 } 624 }) 625 .width('100%') 626 } 627 .height('100%') 628 } 629} 630``` 631