Users can have multiple states in their wallet lifecycle: having a wallet, having wallet backups, having certain recovery methods available, and more.
After initializing Portal for your user, it's crucial to determine their wallet's lifecycle state to ensure a healthy wallet state. We provide several helper methods to easily derive the state of your users' wallets:
// Checks if the user has created a wallet on any device.await portal.doesWalletExist()// Checks if the user's wallet share is on their current device.await portal.isWalletOnDevice()// Checks if the user has backed up their wallet.await portal.isWalletBackedUp()// Checks if the user can recover their wallet.await portal.isWalletRecoverable()// Returns a list of available recovery methods based on the user's backups.await portal.availableRecoveryMethods()
These methods can be used together to understand the user's wallet state and determine the next steps. For example:
funcmanageWalletState(portal: Portal) async {do {// Determine the wallet's state.let walletExists =tryawait portal.doesWalletExist()let walletExistsOnDevice =tryawait portal.isWalletOnDevice()let walletIsRecoverable =tryawait portal.isWalletRecoverable()if!walletExists {// Create and back up the wallet using portal.createWallet() and portal.backup(). } elseif!walletExistsOnDevice {if walletIsRecoverable {// Recover the wallet using portal.recover(). } else {// Inform the user to back up the wallet on the original device. } } else {// The wallet is ready to use. } } catch {// Handle any errors that occur. }}
And that's it! You're now helping your users maintain a safe and secure experience with their wallets while using your apps.