LogoLogo
SupportGithubSign InGet Access
  • Introduction
  • GETTING STARTED
    • SDK Quick Start
    • API Quick Start
  • Guides
    • Web
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Web authentication methods
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Configure a custom subdomain
      • Eject a wallet
      • Using the EIP-1193 Provider
      • Legacy documentation
        • Back up a wallet
          • Backup Options
        • Recover a wallet
    • iOS
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Connect with WalletConnect
      • Build a WebView
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Manage ERC20 tokens
      • Eject a wallet
      • Legacy documentation
        • Back up a wallet
          • Backup Options
          • Passkey + Enclave Storage
        • Recover a wallet
      • Troubleshooting Tips
      • Feature Flags
    • Android
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Connect with WalletConnect
      • Build a WebView
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Eject a wallet
      • Legacy documentation
        • Back up a wallet
          • Backup Options
        • Recover a wallet
    • React Native
      • Create a wallet
      • Send tokens
      • Sign a transaction
      • Simulate a transaction
      • Back up a wallet
      • Recover a wallet
      • Cross-device sessions
      • Manage wallet lifecycle states
      • Connect with WalletConnect
      • Build a WebView
      • Perform swaps
      • Add custom signature hooks
      • MPC progress callbacks
      • Portal API methods
      • Eject a wallet
      • Legacy documentation
        • Back up a wallet
          • Backup Options
        • Recover a wallet
    • Enclave MPC API
      • Create a client
      • Create a wallet
      • Send tokens
      • Sign Ethereum transactions
      • Sign Solana transactions
      • Sign Tron transactions
      • Sign Stellar Transaction
      • Concurrent Transactions
      • Back up a wallet
      • Eject a wallet
  • Reference
    • iOS
      • createWallet
      • backupWallet
      • recoverWallet
      • ejectPrivateKeys
      • registerBackupMethod
      • setGDriveConfiguration
      • setPasskeyConfiguration
      • setPasskeyAuthenticationAnchor
      • setPassword
      • availableRecoveryMethods
      • doesWalletExist
      • isWalletBackedUp
      • isWalletOnDevice
      • isWalletRecoverable
      • getBalances
      • getAssets
      • getNftAssets
      • getTransactions
      • sendSol
      • evaluateTransaction
      • buildEip155Transaction
      • buildSolanaTransaction
      • getWalletCapabilities
    • Android
      • Reference Documentation
    • React Native
      • @portal-hq/core
      • Storage adapters
        • Cloud storage
          • @portal-hq/gdrive-storage
          • @portal-hq/icloud-storage
        • Mobile storage
          • @portal-hq/keychain
          • @portal-hq/mobile-key-values
    • Enclave MPC API
      • V1 endpoints
    • Client API
      • V3 endpoints
      • V1 endpoints
    • Custodian API
      • V3 endpoints
      • V1 endpoints
    • Swaps API
      • V3 endpoints
      • V1 endpoints
  • Resources
    • Flutter
      • iOS
      • Android
    • Error codes
      • Overview
      • MPC errors
      • Network errors
      • General errors
      • Encryption errors
      • Portal Connect errors
    • Portal's MPC architecture
    • Authentication and API Keys
    • Self-Managed Backups
    • Alert Webhooks
    • Wallet lifecycle
    • Backup options
      • Password/PIN
      • GDrive
      • iCloud
      • Passkey + Enclave
    • WalletConnect metadata
    • Advanced security scanning
    • Account abstraction
    • Security firewall
    • Eject
    • Security
    • Blockchain support
    • Chain ID formatting
    • Testnet faucets
    • Going to Production
    • Rate Limits
    • Multi-backup migration guide
    • Multi-wallet migration guides
      • Migrating from Android SDK v3.x.x to v4.x.x
      • Migrating from iOS SDK v3.0.x to v3.2.x
  • Support
    • Changelog
      • Android
      • iOS
      • React Native
      • Web
      • Past Releases
        • 2024 Releases
        • 2023 Releases
    • Celo Hackathon Hub
    • Glossary
Powered by GitBook
On this page

Was this helpful?

  1. Reference
  2. iOS

availableRecoveryMethods

Retrieves the list of available backup methods that can be used for wallet recovery.

Function Signature

public func availableRecoveryMethods(
    _ forChainId: String? = nil
) async throws -> [BackupMethods]

Parameters

  • forChainId: Optional chain identifier (e.g., "eip155:1" for Ethereum mainnet, "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" for Solana mainnet). If nil, returns backup methods from all wallets.

Returns

An array of BackupMethods representing completed backups, which may include:

  • .GoogleDrive: Google Drive backup

  • .iCloud: iCloud backup

  • .Password: Password-protected backup

  • .Passkey: Passkey backup

  • .local: Local backup

Throws

  • PortalClassError.clientNotAvailable if the client is not initialized

  • When a specific chainId is provided:

    • PortalClassError.unsupportedChainId if the chain's namespace is not supported

    • PortalClassError.noWalletFoundForChain if no wallet exists for the specified chain

Example Usage

// Check available recovery methods for all chains
do {
    let methods = try await portal.availableRecoveryMethods()
    print("Available recovery methods: \(methods)")
    
    // Check if specific backup method is available
    if methods.contains(.Password) {
        print("Password recovery is available")
    }
    if methods.contains(.GoogleDrive) {
        print("Google Drive recovery is available")
    }
} catch {
    print("Error checking recovery methods: \(error)")
}

// Check recovery methods for specific chain
do {
    // Check Ethereum mainnet
    let ethMethods = try await portal.availableRecoveryMethods("eip155:1")
    print("Available recovery methods for Ethereum: \(ethMethods)")
    
    // Check Solana mainnet
    let solMethods = try await portal.availableRecoveryMethods("solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp")
    print("Available recovery methods for Solana: \(solMethods)")
} catch {
    print("Error checking chain-specific recovery methods: \(error)")
}

// Complete example with recovery
do {
    let methods = try await portal.availableRecoveryMethods()
    
    for method in methods {
        switch method {
        case .Password:
            // Attempt password recovery
            try portal.setPassword("userPassword")
            let recovered = try await portal.recoverWallet(.Password)
            print("Recovered with password: \(recovered.ethereum)")
            
        case .GoogleDrive:
            // Attempt Google Drive recovery
            let recovered = try await portal.recoverWallet(.GoogleDrive)
            print("Recovered with Google Drive: \(recovered.ethereum)")
            
        case .iCloud:
            // Attempt iCloud recovery
            let recovered = try await portal.recoverWallet(.iCloud)
            print("Recovered with iCloud: \(recovered.ethereum)")
            
        default:
            print("Other recovery method available: \(method)")
        }
    }
} catch {
    print("Error in recovery process: \(error)")
}

Implementation Notes

  • The method only returns backup methods where the corresponding backup share pairs have a status of .completed

  • Methods with incomplete or pending backups are excluded

  • For chain-specific queries, the method validates the chain ID format and namespace support

  • The function is useful for determining which recovery options to present to users

Related Documentation

For more information about recovery methods and chain support, see:

PrevioussetPasswordNextdoesWalletExist

Last updated 3 months ago

Was this helpful?

Recover a wallet