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