1# Managing Domain Account Plugins 2 3The system provides APIs for registering and unregistering a domain account plugin, which is used to customize domain account management. 4 5## Before You Start 6 71. Request the following permissions. For details, see [Requesting Permissions for system_basic Applications](../security/AccessToken/determine-application-mode.md#requesting-permissions-for-system_basic-applications). 8 - ohos.permission.MANAGE_LOCAL_ACCOUNTS 9 - ohos.permission.GET_DOMAIN_ACCOUNTS 10 112. Import the **osAccount** module. 12 13 ```ts 14 import account_osAccount from '@ohos.account.osAccount'; 15 import { AsyncCallback, BusinessError } from '@ohos.base'; 16 ``` 17 183. Obtains an **AccountManager** instance. 19 20 ```ts 21 let accountMgr = account_osAccount.getAccountManager() 22 ``` 23 24## Registering a Domain Account Plugin 25 26The domain account plugin prototype is [DomainPlugin](../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#domainplugin9). The domain account plugin must inherit and implement the **DomainPlugin** APIs. You can use [registerPlugin](../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#registerplugin9) to register a plugin. 27 28**Procedure** 29 301. Define the plugin. 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. Use [registerPlugin](../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#registerplugin9) to register the plug-in. 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## Unregistering a Domain Account Plugin 160 161Use [unregisterPlugin](../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#unregisterplugin9) to unregister a domain account plugin that is not required. 162 163**Example** 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