• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 管理域帐号插件
2
3OEM厂商可以采用插件方式定制化域帐号管理能力,系统提供了域帐号插件注册和注销能能力。
4
5## 开发准备
6
71. 申请权限,申请流程请参考:[申请应用权限](../../security/AccessToken/determine-application-mode.md#system_basic等级的应用申请权限)。
8   - ohos.permission.MANAGE_LOCAL_ACCOUNTS
9   - ohos.permission.GET_DOMAIN_ACCOUNTS
10
112. 导入系统帐号模块。
12
13   ```ts
14   import account_osAccount from '@ohos.account.osAccount';
15   import { AsyncCallback, BusinessError } from '@ohos.base';
16   ```
17
183. 获取系统帐号管理对象。
19
20   ```ts
21   let accountMgr = account_osAccount.getAccountManager()
22   ```
23
24## 注册插件
25
26域插件原型为[DomainPlugin](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#domainplugin9),域插件开发者需要继承并实现插件原型中定义的接口。开发者可以使用[registerPlugin](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#registerplugin9)接口完成插件注册操作。
27
28具体开发实例如下:
29
301. 定义插件。
31
32   ```ts
33   let plugin: account_osAccount.DomainPlugin = {
34     auth: (domainAccountInfo: account_osAccount.DomainAccountInfo, credential: Uint8Array,
35            callback: account_osAccount.IUserAuthCallback) => {
36       console.info("plugin auth domain" + domainAccountInfo.domain)
37       console.info("plugin auth accountName" + domainAccountInfo.accountName)
38       console.info("plugin auth accountId" + domainAccountInfo.accountId)
39
40       let result: account_osAccount.AuthResult = {
41         token: new Uint8Array([0]),
42         remainTimes: 5,
43         freezingTime: 0
44       };
45       callback.onResult(0, result);
46     },
47     authWithPopup: (domainAccountInfo: account_osAccount.DomainAccountInfo,
48                     callback: account_osAccount.IUserAuthCallback) => {
49       console.info("plugin authWithPopup domain" + domainAccountInfo.domain)
50       console.info("plugin authWithPopup accountName" + domainAccountInfo.accountName)
51       console.info("plugin authWithPopup accountId" + domainAccountInfo.accountId)
52
53       let result: account_osAccount.AuthResult = {
54         token: new Uint8Array([0]),
55         remainTimes: 5,
56         freezingTime: 0
57       };
58       callback.onResult(0, result);
59     },
60     authWithToken: (domainAccountInfo: account_osAccount.DomainAccountInfo, token: Uint8Array, callback: account_osAccount.IUserAuthCallback) => {
61       console.info("plugin authWithToken domain" + domainAccountInfo.domain)
62       console.info("plugin authWithToken accountName" + domainAccountInfo.accountName)
63       console.info("plugin authWithToken accountId" + domainAccountInfo.accountId)
64       let result: account_osAccount.AuthResult = {
65         token: new Uint8Array([0]),
66         remainTimes: 5,
67         freezingTime: 0
68       };
69       callback.onResult(0, result);
70     },
71     getAccountInfo: (options: account_osAccount.GetDomainAccountInfoPluginOptions,
72                      callback: AsyncCallback<account_osAccount.DomainAccountInfo>) => {
73       console.info("plugin getAccountInfo domain")
74       let domainAccountId = Date.now().toString()
75       let code: BusinessError = {
76         code: 0,
77         name: "mock_name",
78         message: "mock_message"
79       };
80       let accountInfo: account_osAccount.DomainAccountInfo = {
81         domain: options.domain,
82         accountName: options.accountName,
83         accountId: domainAccountId,
84         isAuthenticated: false
85       };
86       callback(code, accountInfo);
87     },
88     getAuthStatusInfo: (domainAccountInfo: account_osAccount.DomainAccountInfo,
89                         callback: AsyncCallback<account_osAccount.AuthStatusInfo>) => {
90
91       console.info("plugin getAuthStatusInfo domain" + domainAccountInfo.domain)
92       console.info("plugin getAuthStatusInfo accountName" + domainAccountInfo.accountName)
93       console.info("plugin getAuthStatusInfo accountId" + domainAccountInfo.accountId)
94
95       let code: BusinessError = {
96         code: 0,
97         name: "mock_name",
98         message: "mock_message"
99       };
100       let statusInfo: account_osAccount.AuthStatusInfo = {
101         remainTimes: 5,
102         freezingTime: 0
103       };
104       callback(code, statusInfo);
105     },
106     bindAccount: (domainAccountInfo: account_osAccount.DomainAccountInfo, localId: number,
107                   callback: AsyncCallback<void>) => {
108       console.info("plugin bindAccount domain" + domainAccountInfo.domain)
109       console.info("plugin bindAccount accountName" + domainAccountInfo.accountName)
110       console.info("plugin bindAccount accountId" + domainAccountInfo.accountId)
111       let code: BusinessError = {
112         code: 0,
113         name: "mock_name",
114         message: "mock_message"
115       };
116       callback(code);
117     },
118     unbindAccount: (domainAccountInfo: account_osAccount.DomainAccountInfo, callback: AsyncCallback<void>) => {
119       console.info("plugin unbindAccount domain" + domainAccountInfo.domain)
120       console.info("plugin unbindAccount accountName" + domainAccountInfo.accountName)
121       console.info("plugin unbindAccount accountId" + domainAccountInfo.accountId)
122     },
123     isAccountTokenValid: (domainAccountInfo: account_osAccount.DomainAccountInfo, token: Uint8Array,
124                           callback: AsyncCallback<boolean>) => {
125       console.info("plugin isAccountTokenValid domain" + domainAccountInfo.domain)
126       console.info("plugin isAccountTokenValid accountName" + domainAccountInfo.accountName)
127       console.info("plugin isAccountTokenValid accountId" + domainAccountInfo.accountId)
128       let code: BusinessError = {
129         code: 0,
130         name: "mock_name",
131         message: "mock_message"
132       };
133       callback(code, true);
134     },
135     getAccessToken: (options: account_osAccount.GetDomainAccessTokenOptions, callback: AsyncCallback<Uint8Array>) => {
136       console.info("plugin getAccessToken domain")
137       let code: BusinessError = {
138         code: 0,
139         name: "mock_name",
140         message: "mock_message"
141       };
142       let token: Uint8Array = new Uint8Array([0]);
143       callback(code, token);
144     }
145   }
146   ```
147
1482. 调用[registerPlugin](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#registerplugin9)注册插件。
149
150   ```ts
151   try {
152       account_osAccount.DomainAccountManager.registerPlugin(plugin)
153       console.info("registerPlugin success")
154   } catch (err) {
155       console.info("registerPlugin err: " + JSON.stringify(err));
156   }
157   ```
158
159## 注销插件
160
161当插件不再使用时,开发者可以使用[unregisterPlugin](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#unregisterplugin9)接口注销插件。
162
163具体开发实例如下:
164
165```ts
166try {
167  account_osAccount.DomainAccountManager.unregisterPlugin();
168  console.log('unregisterPlugin success.');
169} catch(err) {
170  console.log('unregisterPlugin err:' + JSON.stringify(err));
171}
172```
173