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