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