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>12+</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](../apis/#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 125let storage: LocalStorage = LocalStorage.getShared(); 126let fillCallback: autoFillManager.FillRequestCallback | undefined = 127 storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 128let viewData: autoFillManager.ViewData | undefined = storage.get<autoFillManager.ViewData>('viewData'); 129 130@Entry 131@Component 132struct AutoFillPage { 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 (viewData) { 144 viewData.pageNodeInfos[0].value = 'user1'; 145 viewData.pageNodeInfos[1].value = 'user1 password'; 146 viewData.pageNodeInfos[2].value = 'user1 generate new password'; 147 hilog.info(0x0000, 'testTag', 'autofill success with viewData: %{public}s', JSON.stringify(viewData)); 148 try { 149 fillCallback?.onSuccess({ viewData: 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 217let storage: LocalStorage = LocalStorage.getShared(); 218let fillCallback: autoFillManager.FillRequestCallback | undefined = 219 storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 220 221@Entry 222@Component 223struct AutoFillPage { 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 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>12+</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 310let storage: LocalStorage = LocalStorage.getShared(); 311let fillCallback: autoFillManager.FillRequestCallback | undefined = 312 storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 313 314@Entry 315@Component 316struct AutoFillPage { 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 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 370import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 371import { hilog } from '@kit.PerformanceAnalysisKit'; 372 373export default class AutoFillAbility extends AutoFillExtensionAbility { 374 onCreate(): void { 375 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onCreate'); 376 } 377 378 onDestroy(): void { 379 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onDestroy'); 380 } 381 382 onSessionDestroy(session: UIExtensionContentSession) { 383 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSessionDestroy'); 384 hilog.info(0x0000, 'testTag', 'session content: %{public}s', JSON.stringify(session)); 385 } 386 387 onForeground(): void { 388 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onForeground'); 389 } 390 391 onBackground(): void { 392 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onBackground'); 393 } 394 395 onUpdateRequest(request: autoFillManager.UpdateRequest): void { 396 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onUpdateRequest'); 397 console.log(`get fill request viewData: ${JSON.stringify(request.viewData)}.`); 398 let storage = LocalStorage.getShared(); 399 let fillCallback = storage.get<autoFillManager.FillRequestCallback>('fillCallback'); 400 401 if (fillCallback) { 402 try { 403 hilog.info(0x0000, 'testTag', 'pageNodeInfos.value: ' + JSON.stringify(request.viewData.pageNodeInfos[0].value)); 404 fillCallback.setAutoFillPopupConfig({ 405 popupSize: { 406 width: 400 + request.viewData.pageNodeInfos[0].value.length * 10, 407 height: 200 + request.viewData.pageNodeInfos[0].value.length * 10 408 }, 409 placement: autoFillManager.PopupPlacement.TOP 410 }); 411 } catch (err) { 412 hilog.info(0x0000, 'testTag', 'autoFillPopupConfig err: ' + err.code); 413 } 414 } 415 } 416 417 onFillRequest(session: UIExtensionContentSession, request: autoFillManager.FillRequest, callback: autoFillManager.FillRequestCallback) { 418 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest'); 419 hilog.info(0x0000, 'testTag', 'Fill RequestCallback: %{public}s ', JSON.stringify(callback)); 420 console.log(`testTag. Get fill request viewData: ${JSON.stringify(request.viewData)}.`); 421 console.log(`testTag. Get fill request type: ${JSON.stringify(request.type)}.`); 422 423 try { 424 let localStorageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData | autoFillManager.AutoFillType> = { 425 'message': 'AutoFill Page', 426 'fillCallback': callback, 427 'viewData': request.viewData, 428 'autoFillType': request.type 429 } 430 let storage_fill = new LocalStorage(localStorageData); 431 console.info(`testTag. Session: ${JSON.stringify(session)}.`); 432 let size: autoFillManager.PopupSize = { 433 width: 400, 434 height: 200 435 }; 436 callback.setAutoFillPopupConfig({ 437 popupSize: size 438 }); 439 session.loadContent('pages/SelectorList', storage_fill); 440 } catch (err) { 441 hilog.error(0x0000, 'testTag', '%{public}s', 'autofill failed to load content: ' + JSON.stringify(err)); 442 } 443 } 444 445 onSaveRequest(session: UIExtensionContentSession, request: autoFillManager.SaveRequest, callback: autoFillManager.SaveRequestCallback) { 446 hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSaveRequest'); 447 try { 448 let localStorageData: Record<string, string | autoFillManager.SaveRequestCallback> = { 449 'message': 'AutoFill Page', 450 'saveCallback': callback 451 }; 452 let storage_save = new LocalStorage(localStorageData); 453 if (session) { 454 session.loadContent('pages/SavePage', storage_save); 455 } else { 456 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 457 } 458 } catch (err) { 459 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 460 } 461 } 462} 463``` 464 465## SaveRequestCallback 466 467自动保存或者手动保存请求回调。 468 469### SaveRequestCallback.onSuccess 470 471onSuccess(): void 472 473通知保存请求已成功处理。 474 475**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 476 477**错误码:** 478 479以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 480 481| 错误码ID | 错误信息 | 482| ------- | -------------------------------- | 483| 202 | Permission denied, non-system app called system api. | 484| 16000050 | Internal error. | 485 486**示例:** 487 488```ts 489// MyAutoFillExtensionAbility.ts 490import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 491import { hilog } from '@kit.PerformanceAnalysisKit'; 492class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 493 onSaveRequest(session: UIExtensionContentSession, 494 request: autoFillManager.SaveRequest, 495 callback: autoFillManager.SaveRequestCallback) { 496 hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest'); 497 try { 498 let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = { 499 'message': 'AutoFill Page', 500 'saveCallback': callback, 501 'viewData': request.viewData 502 }; 503 let storage_save = new LocalStorage(storageData); 504 if (session) { 505 session.loadContent('pages/SavePage', storage_save); 506 } else { 507 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 508 } 509 } catch (err) { 510 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 511 } 512 } 513} 514``` 515 516```ts 517// SavePage.ets 518import { autoFillManager } from '@kit.AbilityKit'; 519import { BusinessError } from '@kit.BasicServicesKit'; 520import { hilog } from '@kit.PerformanceAnalysisKit'; 521 522let storage: LocalStorage = LocalStorage.getShared(); 523let saveCallback: autoFillManager.SaveRequestCallback | undefined = 524 storage.get<autoFillManager.SaveRequestCallback>('saveCallback'); 525 526@Entry 527@Component 528struct SavePage { 529 build() { 530 Row() { 531 Column() { 532 Text('SavePage') 533 .fontSize(50) 534 .fontWeight(FontWeight.Bold) 535 } 536 537 Button('onSuccess') 538 .onClick(() => { 539 hilog.info(0x0000, 'testTag', 'autosave success'); 540 try { 541 saveCallback?.onSuccess(); 542 } catch (error) { 543 console.error(`catch error, code: ${(error as BusinessError).code}, 544 message: ${(error as BusinessError).message}`); 545 } 546 }) 547 .width('100%') 548 } 549 .height('100%') 550 } 551} 552``` 553 554### SaveRequestCallback.onFailure 555 556onFailure(): void 557 558通知保存请求处理失败。 559 560**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 561 562**错误码:** 563 564以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 565 566| 错误码ID | 错误信息 | 567| ------- | -------------------------------- | 568| 202 | Permission denied, non-system app called system api. | 569| 16000050 | Internal error. | 570 571**示例:** 572 573```ts 574// MyAutoFillExtensionAbility.ts 575import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit'; 576import { hilog } from '@kit.PerformanceAnalysisKit'; 577 578class MyAutoFillExtensionAbility extends AutoFillExtensionAbility { 579 onSaveRequest(session: UIExtensionContentSession, 580 request: autoFillManager.SaveRequest, 581 callback: autoFillManager.SaveRequestCallback) { 582 hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest'); 583 try { 584 let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = { 585 'message': 'AutoFill Page', 586 'saveCallback': callback, 587 'viewData': request.viewData 588 } 589 let storage_save = new LocalStorage(storageData); 590 if (session) { 591 session.loadContent('pages/SavePage', storage_save); 592 } else { 593 hilog.error(0x0000, 'testTag', '%{public}s', 'session is null'); 594 } 595 } catch (err) { 596 hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content'); 597 } 598 } 599} 600``` 601 602```ts 603// SavePage.ets 604import { autoFillManager } from '@kit.AbilityKit'; 605import { BusinessError } from '@kit.BasicServicesKit'; 606import { hilog } from '@kit.PerformanceAnalysisKit'; 607 608let storage: LocalStorage = LocalStorage.getShared(); 609let saveCallback: autoFillManager.SaveRequestCallback | undefined = 610 storage.get<autoFillManager.SaveRequestCallback>('saveCallback'); 611 612@Entry 613@Component 614struct SavePage { 615 build() { 616 Row() { 617 Column() { 618 Text('Save Page') 619 .fontSize(50) 620 .fontWeight(FontWeight.Bold) 621 } 622 623 Button('onFailure') 624 .onClick(() => { 625 hilog.info(0x0000, 'testTag', 'autofill failure'); 626 try { 627 saveCallback?.onFailure(); 628 } catch (error) { 629 console.error(`catch error, code: ${(error as BusinessError).code}, 630 message: ${(error as BusinessError).message}`); 631 } 632 }) 633 .width('100%') 634 } 635 .height('100%') 636 } 637} 638``` 639