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