• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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