External wallets — also called externally owned accounts (EOAs) — are wallets users bring to your app, such as MetaMask, Phantom, or Rainbow. They are different from embedded wallets, which Dynamic creates and manages for the user.
When external wallet login is enabled, users can sign up or log in by connecting an existing wallet through the Dynamic auth UI. The SDK handles the wallet app handoff and returns the connected wallet.
Prerequisites
- Dynamic Swift SDK initialized (see Quickstart)
ClientProps configured with appOrigin and redirectUrl
- Chains enabled in your Dynamic dashboard
- Wallet login enabled under External Wallets in the dashboard
Dashboard configuration
- Go to Chains & Networks in the Dynamic dashboard and enable the chains you want to support (e.g. EVM, Solana).
- Go to Log in & User Profile in the Dynamic dashboard and toggle on Wallet Log in under External Wallets.
- Go to Security → Whitelist Mobile Deeplink and add the same URL you use for
redirectUrl (e.g. myapp://). This is required for the wallet app to return to your app after approval.
appOrigin is required for external wallet connections. Use the HTTPS origin that represents your app (for example, https://your-app.com).
SDK configuration
Make sure ClientProps includes appOrigin and redirectUrl when you initialize the SDK:
Deep link setup
External wallet connections open the wallet app using deep links. The wallet app then redirects back to your app using the redirectUrl you configured.
Add your URL scheme to Info.plist:
Show the auth UI
The simplest way to let users connect an external wallet is to show the Dynamic auth UI. The SDK presents available wallet options, opens the selected wallet app, and handles the redirect automatically.
Listen for connected wallets
After a wallet is connected, it appears in the user’s wallet list. Use userWalletsChanges to react to new or updated wallets:
Filter connected wallets
You can separate EVM and Solana wallets by chain:
Set the primary wallet
If a user connects multiple wallets, you can set one as the primary wallet:
Troubleshooting
- Wallet app does not open: Verify
redirectUrl matches the URL scheme in Info.plist, and that the deep link is whitelisted in the dashboard.
- Wallet does not appear after connection: Ensure you are listening to
userWalletsChanges.
- Connection fails after redirect: Confirm
appOrigin is set and matches the origin registered in the dashboard.
Next steps