Mobile Wallet Adapter (MWA)
Conecte apps React Native a carteiras mobile para authorize e sign.
Receita
npm install @solana-mobile/mobile-wallet-adapter-protocol-web3js
# Prefira bindings MWA compatíveis com kit em apps novos junto com @solana/kit@7.0.0Quando usar isso:
- dApps Solana React Native / Expo Android.
- Alvos de dispositivos Seeker e Saga.
- Qualquer fluxo mobile precisando de app de carteira externo.
Exemplo de Trabalho
import { transact } from "@solana-mobile/mobile-wallet-adapter-protocol-web3js";
async function connectMobileWallet() {
await transact(async (wallet) => {
const auth = await wallet.authorize({
cluster: "devnet",
identity: { name: "My dApp", uri: "https://example.com", icon: "favicon.ico" },
});
console.log("accounts", auth.accounts);
// sign transactions with wallet.signTransactions during same session
});
}O que isso demonstra:
transactdelimita sessão da carteira ao callback.- Metadata de identity exibida na UI de aprovação da carteira.
- Cluster deve corresponder ao endpoint RPC no app.
Mergulho Profundo
Como Funciona
- Intents Android lançam app de carteira e retornam resultados.
- Autorização de sessão pode persistir entre chamadas transact com auth token armazenado.
- Suporte iOS evolui - verifique docs Solana Mobile para status atual.
- Combine com bytes de transação kit para assinatura.
Armadilhas
- Teste somente em emulador - intents quebram sutilmente. Correção: laboratório em dispositivo físico.
- Campos identity ausentes - carteira rejeita authorize. Correção: name/uri/icon completos.
- Mismatch de cluster - erros de simulação. Correção: devnet em todo lugar no dev.
- Callback transact longo - timeout da carteira. Correção: minimize trabalho dentro da sessão.
- Assumir APIs de extensão - MWA não é window.solana.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Carteira embutida no app | Onboarding de consumidor | Power users de carteira externa |
| Mobile web + deep link de carteira | Sem instalação de app | Necessidades de performance nativa |
FAQs
App Router?
Providers em client layout.tsx; páginas misturam componentes server + client.
Secrets?
Env server somente para keypairs; NEXT_PUBLIC_ para URLs RPC.
kit 7.0.0?
Todos os exemplos usam @solana/kit, não web3.js v1.
Carteira?
Assinatura somente em componentes client.
Cache?
Revalide leituras on-chain com cuidado - chain é fonte da verdade.
Actions?
Endpoints HTTPS retornando JSON Solana Actions.
Mobile?
App React Native separado com MWA.
Testes?
Surfpool para integração; mock RPC em testes unitários.
Mainnet?
Arquivos env separados e IDs de programa.
Erros?
Decodifique logs de simulação para mensagens voltadas ao usuário.
Relacionados
- Construindo um dApp Mobile - setup Expo
- Noções Básicas de Carteira - conceitos
- Deep Links e Tratamento de Sessão - intents
Versões da stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 e LiteSVM 0.6.x.