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