ByAUJay
Mobile Web3: Adding WalletConnect to Your Native iOS and Android Apps
Mobile WalletConnect integration has really evolved since 2024, especially with the Reown migration, Link Mode, and some deep-linking constraints on iOS and Android. Here’s a straightforward, code-centric guide to getting your native iOS/Android app up and running with WalletConnect, all while ensuring you meet SOC2 requirements.
Mobile Web3: Integrating WalletConnect into Native iOS/Android Apps
Pain
Your mobile app team has "Connect Wallet" on the agenda, but there are three hurdles that keep delaying the launch:
- SDK churn and breaking changes: So, WalletConnect’s v2 SDKs got the axe during the rebrand to Reown. The Swift and Kotlin repositories hit their end-of-life back in February 2025. If you want to keep getting security updates and support, you’ve got to migrate--there’s no option to stick with the old versions. Check out more details here.
- Mobile linking instability: With iOS 17, things got a bit tricky for app hopping between wallets and dApps. Universal links often end up bouncing you to the browser, and deep-link redirects are acting differently compared to how they worked in iOS 16. For the nitty-gritty, take a look here.
- Background/network limits: Android 14 has tightened the rules on foreground service types and how background activities can be launched. If you’re relying on sockets to keep alive during signing flows, you might run into trouble under Doze/App Standby unless you plan for it specifically. Want to know more? Head over to this link.
Plus, there’s still some confusion around the App Store and Play policies when it comes to NFTs and crypto, which means procurement has to give their stamp of approval. Check it out here: (appleinsider.com).
Agitation
By overlooking these changes, you’re putting yourself at risk of more than just some annoying UX hiccups:
- Missed deadlines and rework: If you're still shipping on those deprecated WalletConnect packages, you're gonna run into some trouble since there won't be any patches after February 2025. Just imagine, a critical bug in your wallet or relay could totally jeopardize your launch. Check out more about this here.
- App-store rejection loops: Apple’s got some strict rules when it comes to NFTs, especially banning alternative purchase methods in most regions. They only allow external links in U.S. storefronts after that injunction, and one little mistake with scoping links or payment flows can lead to big delays in your review process. It's a real mess! You can read the details here.
- Security audit failures: If you don’t allowlist your WalletConnect Project ID and skip out on enforcing SIWE nonce/origin checks or using hardware-backed key stores, you’re basically setting yourself up for failure with SOC2 controls on key management and request integrity. Seriously, don’t take this lightly; check the specifics here.
- Engagement loss: Those dreaded background suspensions on both Android and iOS can totally kill your “silent” sign prompts. If you're not using push notifications combined with Link Mode, your users are never going to see that request, which means your pairing-to-sign conversion rates could really take a dive. Get the full scoop on this here.
In a nutshell: the "it worked in our dev build" demo doesn't hold up during store reviews, battery policies on devices, and the expectations we have for modern wallet user experiences.
Solution
Here’s the straightforward guide from 7Block Labs on how to seamlessly integrate WalletConnect into your native mobile app while keeping everything reliable and compliant. If you’re looking for hands-on help, our team is ready to assist with comprehensive web3 development services, blockchain integration, and thorough security audit services.
1) Choose the right SDKs (Reown, not legacy WalletConnect v2)
- iOS: For iOS, you'll want to use the Reown Swift packages called “WalletKit” and AppKit from
reown-com/reown-swiftthrough SPM. Just a heads up--the oldWalletConnectSwiftV2has been deprecated. You can find more details in the documentation here. - Android: If you're working on Android, switch to using the
com.reown:*coordinates, which includes the BOM along withandroid-core,walletkit, andappkit. Just a reminder, the Kotlin v2 repo is also deprecated, so be sure to migrate before you start counting on updates. Check out the documentation for more info.
Just a heads up: this migration opens up AppKit's “Link Mode” and gives you some awesome new Notify/Push features that your growth team is definitely going to love. Check it out here: (docs.reown.com).
2) Configure Cloud Project ID and lock it down
- Grab a Project ID from the WalletConnect/Reown dashboard and use it for your SDK initialization. Don't forget to enable origin/bundle-id allowlisting to keep your Project ID safe from any sneaky builds. (docs.walletconnect.network)
Why It Matters for SOC2
Allowlisting and environment scoping (like dev, stage, and prod) are super important when it comes to controlling the blast radius if your keys accidentally leak in CI or if a test build slips through the cracks. Here’s why these controls are essential:
- Allowlisting: This means only giving access to specific IP addresses, applications, or users. If your keys are compromised, having allowlisting in place limits who can use them, which reduces potential damage.
- Environment Scoping: By clearly defining your development, staging, and production environments, you can minimize the risk of sensitive data leaking. If a test build goes rogue, having a separate staging environment ensures that it doesn’t have access to all production resources.
Together, these practices help safeguard your systems and maintain compliance with SOC2 standards, reducing the fallout from any security missteps.
3) Mobile linking that actually returns users to your app
- When it comes to wallet and app transitions, it's usually better to go with deep links instead of universal links. Universal links tend to redirect to a browser, especially if you’re on iOS 17 or later. You can check out more about this here.
- Setting up deep links on iOS (Info.plist):
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>yourapp</string>
</array>
</dict>
</array>
- Set up openURL in SceneDelegate:
func scene(_ scene: UIScene, openURLContexts contexts: Set<UIOpenURLContext>) {
guard let url = contexts.first?.url else { return }
// hand URL to Reown AppKit/WalletKit
}
- Android Manifest Intent-Filters:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="yourapp"/>
</intent-filter>
- For wallet app owners, make sure to include wallet deep links (like
examplewallet://wc?uri={pairingUri}) and set the Redirect metadata when you initialize the SDK. This allows the wallet to navigate back to the dApp easily. Check out the details in the official docs.
iOS 17 Caveat
Just a heads up: with iOS 17, you might find that automatic redirection back to browser-based dApps isn't going to work as smoothly as before. To tackle this, make sure to display a clear "Return to [App]" button. It's also a good idea to depend on deep links for smooth app-to-app navigation. Check out the details here: (docs.reown.com)
4) Enable Link Mode to cut latency and survive flaky networks
- The AppKit/WalletKit Link Mode is pretty cool because it lets you send session/1-click auth envelopes over Universal/App Links instead of just relying on a Relay WebSocket. This means less lag time, and it can even work if you're offline during the transfer. Check it out here: (docs.reown.com).
- Here’s what you’ll need to get started:
- Make sure to set up
redirect.universaland enablelinkMode: truein your metadata. - Just a heads up, Link Mode is currently set up for One-Click Auth + SIWE and is designed for EVM only. You can find more info here: (docs.reown.com).
- Make sure to set up
5) Initialize SDKs with redirect metadata (mandatory in recent versions)
- Swift (WalletKit):
import WalletKit
let metadata = AppMetadata(
name: "Acme Mobile",
description: "Enterprise dApp",
url: "https://acme.example",
icons: ["https://acme.example/icon.png"],
redirect: .init(
native: "yourapp://",
universal: "https://acme.example/wc"
)
)
try await WalletKit.instance.initialize(projectId: "<PROJECT_ID>", metadata: metadata)
Reown points out that using redirect is a must in the latest SDKs to prevent those pesky redirection problems. You can find more details here.
- Android (AppKit Core):
dependencies {
implementation(platform("com.reown:android-bom:<BOM_VERSION>"))
implementation("com.reown:android-core")
implementation("com.reown:appkit")
}
Make sure to set up your ProGuard rules according to the documentation to prevent any minification issues with JNA/uniffi. Check out the details here: docs.reown.com.
6) Pairing and approving sessions
- iOS (WalletKit) - set up namespaces and give the green light:
// On session proposal
let ns = try AutoNamespaces.build(
sessionProposal: proposal,
chains: [Blockchain("eip155:1")!, Blockchain("eip155:137")!],
methods: ["eth_sendTransaction", "personal_sign"],
events: ["accountsChanged", "chainChanged"],
accounts: [Account("eip155:1:0x...")!]
)
try await WalletKit.instance.approve(proposalId: proposal.id, namespaces: ns)
// Optional: direct user back with Router if native URI is present
You can check out the details about AutoNamespaces and session approval flow in the Reown WalletKit usage documentation. Just head over to docs.reown.com for all the info!
- Android (WalletKit) - create the approved namespaces:
val sessionNamespaces = WalletKit.generateApprovedNamespaces(sessionProposal, supportedNamespaces)
walletKit.approveSession(Wallet.Params.SessionApprove(sessionProposal.id, sessionNamespaces))
- Whether you're using React Native or Flutter, both implementations stick to the same events (
session_proposal,pair), which makes them super handy for in-app WebView flows. You can check out some examples from Reown to get started. (docs.reown.com)
7) Make sign-in auditable and phishing‑resistant with SIWE
- Go for ERC‑4361 SIWE when you're handling off‑chain authentication. Make sure you cover these bases:
- Use a server-generated nonce to prevent replay attacks.
- Ensure domain binding by checking the
scheme+domainagainst the request origin. - Implement expiration/not-before parameters when needed.
This approach not only boosts your security but also helps you meet SOC2 logical access controls. (eips.ethereum.org)
Implementation Tip
When dealing with the “not-before” timestamp, it’s best to consider it invalid until its designated time arrives. Some developers might permit signing before this time, but they’ll actually reject it during server verification until the timestamp becomes valid. For more details, check out this discussion on Ethereum Stack Exchange.
8) Reduce taps and errors with EIP‑5792 batched calls (where supported)
- Adoption is really picking up speed: EIP‑5792 is rolling out
wallet_sendCalls,wallet_getCallsStatus, and some cool capability discovery features. It hit “Last Call” in 2025 and is already showing up in a bunch of major wallets and ecosystems. (eips.ethereum.org) - Why should you care about this for your ROI? Well, it combines “approve + swap” or “permit + trade” into a single confirmation, which helps cut down on abandonment rates and the number of support tickets we have to handle.
- Here’s a quick example request (pseudo):
await provider.request({
method: "wallet_sendCalls",
params: [{
from: user,
chainId: "0x1",
calls: [
{ to: token, data: approveCalldata },
{ to: router, data: swapCalldata }
],
capabilities: { /* optional: paymaster, atomicity */ }
}]
})
Even if it’s not officially supported, you can still use wallet_getCapabilities to check for features and make a smooth transition when they aren't available. Check out more details here.
9) Deliver requests reliably with encrypted push notifications
- When it comes to wallets, set up the Reown Push Server along with FCM v1/APNs. Using encrypted payloads allows you to show request context without risking sensitive data during transit. Just a heads up, the legacy FCM is no longer supported--make sure to switch to v1. (docs.reown.com)
- For iOS registration:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Task { try await WalletKit.instance.register(deviceToken: deviceToken, enableEncrypted: true) }
}
- If you're working with Android or React Native, we've got you covered with support through FCM device token registration. Check it out here: (docs.reown.com)
Strategic Benefit
The push + Link Mode helps tackle those pesky background socket limits on Android 14 and also works around flaky mobile networks. You can read more about it here.
10) Handle WebView and in‑app browsers correctly
When you load a dApp in WKWebView or Android WebView, make sure to grab those deep or universal links and send them over to AppKit for your wallet to handle. Relying on the default OS behavior isn't a great idea. Check out Reown--they’ve got some handy recipes for each platform. (docs.reown.com)
11) App-store compliance checkpoints for procurement
- Apple: If you're diving into crypto exchanges, make sure that functionality is only available in regions where you’ve got the proper licenses. For NFT sales and any “unlockable” features, you’ll need to use in-app purchases (IAP) in most storefronts. But hey, there’s some good news! External payment links are allowed thanks to a U.S.-specific injunction update--just be sure to double-check your storefront target and wording. (appleinsider.com)
- Google Play: You can totally have digital assets and NFTs on your platform, as long as you’re being upfront about everything (no “earn” claims) and following the gambling regulations. (techcrunch.com)
We usually keep a region matrix (US/EU/ROW) and use feature flags to steer clear of any unexpected rejections during the review process.
12) Key management and device security that pass SOC2
- iOS: Make sure to stash your secrets in the Keychain. If you've got multiple app targets, don't forget to use access groups. And whenever you can, go for Secure Enclave-backed keys! (support.apple.com)
- Android: Generate your keys using the Android Keystore, and keep an eye on the hardware security level (like TEE or StrongBox). For high-risk scenarios, enable attestation. Just a heads-up, StrongBox might slow things down a bit, so pick what's best for your threat model. (developer.android.com)
- Android 14: Be sure to adhere to the foreground service type rules (like remoteMessaging) and the background launch restrictions. Instead of trying to “wake the app” for signing, it's better to use push notifications combined with Link Mode. (developer.android.com)
These controls fit nicely into SOC2 CC6/CC7, which cover logical access and change control, as well as CC5, focused on control activities around key custody.
13) Example end‑to‑end flow (native app + external wallet)
- The user hits “Connect Wallet” in your app. Using Reown, you whip up a WC URI and open the selected wallet with a deep link.
- The wallet gets a session proposal, the user gives it the thumbs up, and then the wallet calls your app back using
redirect.native. Check out the details here. - Your app goes ahead and requests a SIWE. The backend does some checks on the signature, nonce, and origin, and voilà, the session is live! More info can be found here.
- When it comes to transactions, you give the EIP‑5792 batch a shot; if that doesn’t fly, you can always revert to the old-school RPC. More about it here.
- If the app is in the background, a fresh sign request gets pushed via encrypted notifications; just tap on it and the wallet pops up to finish things off. For further details, check this out.
14) Practical iOS/Android snippets you can drop in
- For installing Reown Swift SPM, just add
https://github.com/reown-com/reown-swiftand pick AppKit/WalletKit. You can find more info here. - When it comes to Reown Kotlin dependencies, you'll want to include this line:
implementation(platform("com.reown:android-bom:$BOM_VERSION")); implementation("com.reown:android-core"); implementation("com.reown:appkit"). Get all the details here. - To set up metadata with link mode (this example is for React Native, but the same idea works for native), you’ll need to configure
redirect.native,redirect.universal, and setlinkMode: true. More information can be found here.
15) Gas and cost optimization considerations
- Even in Enterprise, "gas optimization" plays a huge role in mobile user experience and lifetime value (LTV). Make sure to use EIP-5792 batching if you can; if that's not an option, try pre-building approvals with Permit2 or using meta-transactions, and show the total cost before signing. If you're using Account Abstraction, think about implementing sponsored transactions through wallet or bundler paymasters. (eips.ethereum.org)
16) Governance, logging, and vendor controls
- Turn on Verify SDK in the Reown Dashboard to check dApp origins--this helps cut down on phishing and makes auditing easier. (docs.reown.com)
- Organize Cloud Project IDs based on different environments; set up allowlists for bundle IDs/package names; regularly rotate your secrets and stay alert for any suspicious origins. (docs.walletconnect.network)
How 7Block Labs executes (and why it minimizes delivery risk)
- Architecture and threat model (Weeks 1-2): Start by picking your SDKs, laying out deep/universal links, figuring out SIWE flows, and working with your compliance team on region gating.
- Dual-track build:
- Mobile: Get into deep link plumbing, set up Link Mode, handle push registration, do WebView intercepts, and implement EIP‑5792 feature-detection.
- Backend: Focus on SIWE endpoints, maintain a nonce store, validate origins, build a metrics pipeline, and add AB test toggles for batch versus legacy flows.
- Security and store-readiness: Nail down Keychain/Keystore policies, create Reown allowlists, check out the Verify SDK, handle logging redaction, and prep a compliance checklist for Apple/Google before submission.
- We ship, then scale: Once your core funnel is solid, think about adding optional cross‑chain solutions, DeFi integrations, or asset tokenization.
If you’re looking into fundraising or ecosystem grants, our fundraising support team can help. We take your technical milestones and turn them into deliverables that are all set for grant applications.
Proof: GTM metrics we commit to instrument on Day 1
We steer clear of vanity metrics and focus on the stuff that actually matters to procurement:
- Reliability and Latency
- We’re looking at TTFP (time to first pairing), with median and P95 stats.
- Check out the Link Mode benefit: it shows the difference in connect latency when compared to relay-only paths. (docs.reown.com)
- Conversion
- Let’s track the journey from pairing to session approval rates.
- Then, from approval to the first successful RPC (or EIP‑5792 batch) rate. (eips.ethereum.org)
- Notification Efficacy
- For sign requests delivered via push notifications, we’ll assess open and completion rates (with encrypted push enabled). (docs.reown.com)
- Compliance
- We’ll dive into app store review outcomes based on different storefronts--like U.S. external-link allowances compared to others, plus how they flag NFT/IAP content. (theverge.com)
- Security Posture
- Check what percentage of requests come with verified origins (thanks to the Verify SDK).
- Also, look at the % of devices using hardware-backed keys (like TEE, StrongBox, or Secure Enclave). (docs.reown.com)
These all come together in a dashboard that CFOs can easily read, linking engineering efforts directly to user conversion rates and the deflection of support costs.
Procurement quick notes (SOC2, SOW, timelines)
- SOC2: Make sure to document key custody (like Keychain or Keystore), verify the origin of your data, and handle information properly (no PII in logs and keep those push payloads encrypted). You can read more about it here.
- App-store policy memo: Don’t forget to add Apple and Google references along with a region matrix in the SOW. This way, you can steer clear of any last-minute scope creep. Check out the details here.
- Timeline: If you’re going for a native-only approach (iOS/Android), you’re typically looking at about 6 to 10 weeks to get to the MVP stage, plus an additional 2 to 3 weeks for a staged rollout and any necessary store tweaks.
- Addenda: If your workflows require some changes in Solidity, we also offer optional smart contract development and custom blockchain development services.
Common pitfalls (and how to avoid them)
- Shipping on deprecated WalletConnect v2 repos? Time to update! Make sure to migrate to Reown before you start coding your app. Check out the details here: docs.reown.com.
- If you think universal links will always bring users back to your app on iOS 17+, think again! It’s a good idea to prioritize deep-linking first and let users know when they might need to return manually. More info can be found at: docs.reown.com.
- Counting on background sockets on Android 14? Not recommended! Shift to using push notifications along with Link Mode, and make sure to follow the FGS/background rules. You can find the latest guidelines here: developer.android.com.
- Forgetting to allowlist Project IDs? That’s a no-go! Be sure to secure your origins and bundle IDs in Reown Cloud. You can get the scoop here: docs.walletconnect.network.
- Are your SIWE checks a bit weak? It’s crucial to check the domain, nonce, and expiry meticulously on the server side. Get the full rundown here: eips.ethereum.org.
Looking for a solid implementation that shows real returns and has audit-ready controls? We've got your back! We can take charge of the entire process, handling everything from engineering to security and store submission. Check out our dApp development solutions for more info. And if you're thinking about cross-chain expansion, don't miss our blockchain bridge development options!
Bold outcomes we’re aiming for:
- Fewer failed sign-ins and fewer stuck transactions thanks to Link Mode, push notifications, and EIP‑5792 batching. Check it out here: (docs.reown.com).
- Lower support volume by implementing origin verification, encrypted pushes, and predictable redirects. You can read more about it here: (docs.reown.com).
- Store-ready compliance right from the get-go, not scrambling at the last minute. More details can be found here: (appleinsider.com).
A smooth mobile wallet experience is not just a tech challenge; it can have a big impact on your business. When you nail it, turning sign-ins into a seamless process can actually give you a leg up on the competition, rather than being just another item to worry about in your audit plan.
Book a 90-Day Pilot Strategy Call
Ready to kick things off? Let’s dive into a 90-Day Pilot Strategy Call and set the stage for your success. Here’s how to get started:
- Choose Your Date: Pick a time that works for you. We’re flexible and want to make this as easy as possible.
- Fill Out the Form: Just a few quick questions to get to know you better. This helps us tailor the call to your needs.
- Confirm Your Spot: After you submit the form, you’ll get a confirmation right away. Keep an eye on your inbox!
We can’t wait to brainstorm and collaborate on your pilot strategy!
Like what you're reading? Let's build together.
Get a free 30-minute consultation with our engineering team.
Related Posts
ByAUJay
Building 'Private Social Networks' with Onchain Keys
Creating Private Social Networks with Onchain Keys
ByAUJay
Tokenizing Intellectual Property for AI Models: A Simple Guide
## How to Tokenize “Intellectual Property” for AI Models ### Summary: A lot of AI teams struggle to show what their models have been trained on or what licenses they comply with. With the EU AI Act set to kick in by 2026 and new publisher standards like RSL 1.0 making things more transparent, it's becoming more crucial than ever to get this right.
ByAUJay
Creating 'Meme-Utility' Hybrids on Solana: A Simple Guide
## How to Create “Meme‑Utility” Hybrids on Solana Dive into this handy guide on how to blend Solana’s Token‑2022 extensions, Actions/Blinks, Jito bundles, and ZK compression. We’ll show you how to launch a meme coin that’s not just fun but also packs a punch with real utility, slashes distribution costs, and gets you a solid go-to-market strategy.

