For AI agents: a documentation index is available at /llms.txt. A markdown version of this page is available at the same URL with .md appended (or via Accept: text/markdown).
Skip to main content

Android SDK v9 Migration Guide

This guide upgrades Embedded Wallets Android SDK integrations from v4 through v8 directly to v9.

AI-assisted migration​

For the best results, install the MetaMask Embedded Wallets skill and MCP server before you migrate. See Build with AI for setup (npx skills add web3auth/skill and MCP at https://mcp.web3auth.io).

Copy the prompt below into your AI coding assistant (Cursor, Claude Code, Codex, Antigravity, or similar):

Migrate my MetaMask Embedded Wallets Android (web3auth-android-sdk) project to v9.

Before changing code:
1. Use the web3auth skill and MCP tools (search_docs, get_doc, get_example, get_sdk_reference).
2. Read the migration guide: https://docs.metamask.io/embedded-wallets/migration-guides/android-v9
3. Detect my current SDK version from build.gradle and list which breaking changes apply.

Then migrate my codebase directly to v9:
- Update the JitPack dependency to com.github.web3auth:web3auth-android-sdk:9.1.2 (or latest v9).
- Set compileSdk and targetSdk to 34.
- Add mandatory redirectUrl to Web3AuthOptions ({YOUR_APP_PACKAGE_NAME}://auth).
- Update AndroidManifest.xml (allowBackup=false, tools:replace, deep link intent filter, singleTop).
- Replace getSignResponse() with the SignResponse returned from request().
- Remove loginParams from launchWalletServices and request; pass chainConfig instead.
- Update WhiteLabelData fields (appName, mode, buildEnv) if whitelabeling is configured.
- Do not change my Client ID or Sapphire network unless I ask; that would change wallet addresses.

After migrating, list every file you changed and any manual dashboard steps I still need to do.
tip

Use planning mode (where available) for the initial prompt. Review the plan before generating code; config mistakes can change wallet addresses in production.

Install v9​

Add JitPack to your project-level build.gradle if it is not already present:

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url "https://jitpack.io" }
}
}

Update the dependency in your app-level build.gradle:

dependencies {
implementation 'com.github.web3auth:web3auth-android-sdk:9.1.2'
}

Set compileSdk and targetSdk to 34:

android {
compileSdk 34

defaultConfig {
minSdk 24
targetSdk 34
}
}

Breaking changes​

Apply the sections below that match your current version. If you're already on v8, focus on the v9 changes.

Network and SDK requirements (from v5)​

Use Sapphire networks instead of legacy OpenLogin networks:

val web3Auth = Web3Auth(
Web3AuthOptions(
context = this,
clientId = getString(R.string.web3auth_project_id),
network = Network.SAPPHIRE_MAINNET, // or Network.SAPPHIRE_DEVNET
redirectUrl = Uri.parse("{YOUR_APP_PACKAGE_NAME}://auth"),
)
)

Add buildEnv when you need a non-production auth environment:

buildEnv = BuildEnv.PRODUCTION // PRODUCTION, STAGING, or TESTING

Whitelabel configuration (from v5)​

WhiteLabelData field names changed:

v4 and earlierv5 and later
nameappName
darkmode (ThemeModes.LIGHT, ThemeModes.DARK, or auto)

New optional fields include appUrl and useLogoLoader. Prefer dashboard customization for new projects.

Mandatory redirect URL (from v7.4)​

redirectUrl is required in Web3AuthOptions:

redirectUrl = Uri.parse("{YOUR_APP_PACKAGE_NAME}://auth")

Allowlist {SCHEME}://{YOUR_APP_PACKAGE_NAME} on the Embedded Wallets dashboard.

AndroidManifest changes (from v7.1.2)​

From v7.1.2, set android:allowBackup to false and add tools:replace:

<application
android:allowBackup="false"
tools:replace="android:fullBackupContent"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher">
</application>

Set your main activity launchMode to singleTop and add the deep link intent filter. See the Android SDK get started for the full manifest setup.

launchWalletServices signature (from v7.2)​

Remove loginParams. Pass only chainConfig:

val launchWalletCompletableFuture = web3Auth.launchWalletServices(
chainConfig = ChainConfig(
chainId = "0x1",
rpcTarget = "https://rpc.ethereum.org",
ticker = "ETH",
chainNamespace = ChainNamespace.EIP155,
)
)

request signature (from v7.3)​

Remove loginParams. Pass chainConfig, method name, and request parameters:

val params = JsonArray().apply {
add("Hello, World!")
add(address)
}

val signMsgCompletableFuture = web3Auth.request(
chainConfig = ChainConfig(
chainId = "0x1",
rpcTarget = "https://rpc.ethereum.org",
ticker = "ETH",
chainNamespace = ChainNamespace.EIP155,
),
"personal_sign",
requestParams = params,
)

v9 changes​

getSignResponse() is removed. The request() method returns SignResponse directly:

signMsgCompletableFuture.whenComplete { signResult, error ->
if (error == null) {
Log.d("Sign Result", signResult.toString())
} else {
Log.d("MainActivity_Web3Auth", error.message ?: "Something went wrong")
}
}

v9 also adds support for Web3Auth Auth Service v9 and Wallet Services v3 (including swap in the prebuilt wallet UI).

New APIs (non-breaking)​

These APIs were added in intermediate versions. If you're upgrading from an older SDK, adopt the v9 signatures shown above.

APIAdded inPurpose
enableMFA()v6Initiate MFA setup for logged-in users
launchWalletServices()v6Open the templated wallet UI
request()v6.1Sign transactions with confirmation screens
SMS Passwordless loginv7.2Provider.SMS_PASSWORDLESS with login_hint
Farcaster loginv7.2Provider.farcaster

See Wallet Services and MFA for usage details.

Summary table​

AreaBefore v5v5-v7.3v9
NetworkMainnet, Cyan, etc.Sapphire supportedSapphire recommended
compileSdk / targetSdk333434
redirectUrlOptionalMandatory (v7.4+)Mandatory
Whitelabel namenameappNameappName
launchWalletServicesN/ADrops loginParams (v7.2)chainConfig only
requestN/ADrops loginParams (v7.3)Returns SignResponse
Sign resultN/AgetSignResponse()Return value of request()

Next steps​