Интеграция Privy для аутентификации в мобильном криптоприложении
Privy — провайдер embedded wallet с акцентом на UX. В отличие от MetaMask или WalletConnect, Privy создаёт кошелёк прозрачно для пользователя: email-логин или социальная авторизация, и кошелёк уже готов. Никакого "установи расширение" или "сохрани seed-фразу". Для крипто-приложений, ориентированных на массовую аудиторию, это существенное снижение барьера входа.
Архитектура Privy
Приватный ключ кошелька шифруется и хранится в инфраструктуре Privy с шифрованием на стороне клиента — Privy не имеет доступа к plain-text ключу. При аутентификации ключ расшифровывается на устройстве пользователя с использованием данных от OAuth-провайдера и hardware-токена Privy.
Схема ближе к кастодиальной, чем Web3Auth с MPC, но значительно проще в реализации и даёт более гладкий UX.
Интеграция в React Native
Privy предоставляет официальный @privy-io/expo SDK для Expo и @privy-io/react-native для bare React Native.
// App.tsx
import { PrivyProvider } from "@privy-io/expo";
export default function App() {
return (
<PrivyProvider
appId="your-privy-app-id"
config={{
loginMethods: ["email", "google", "apple"],
embeddedWallets: {
createOnLogin: "users-without-wallets",
},
}}
>
<Navigation />
</PrivyProvider>
);
}
// LoginScreen.tsx
import { useLoginWithOAuth, usePrivy } from "@privy-io/expo";
const { user, logout } = usePrivy();
const { login: loginWithGoogle } = useLoginWithOAuth({ provider: "google" });
// После логина:
const wallet = user?.linkedAccounts.find(
(acc) => acc.type === "wallet" && acc.walletClientType === "privy"
);
// wallet.address — адрес кошелька
Embedded wallet создаётся автоматически при первом логине (если createOnLogin: "users-without-wallets"). Повторный логин восстанавливает тот же адрес.
Подписание транзакций
Privy предоставляет useEmbeddedWallet для подписания через встроенный UI (пользователь подтверждает транзакцию в Privy-окне) или через прямой доступ к провайдеру:
const { wallets } = useEmbeddedWallet();
const embeddedWallet = wallets.find((w) => w.walletClientType === "privy");
await embeddedWallet.switchChain(8453); // Base
const provider = await embeddedWallet.getEthereumProvider();
const ethersProvider = new ethers.BrowserProvider(provider);
const signer = await ethersProvider.getSigner();
const tx = await signer.sendTransaction({
to: recipientAddress,
value: ethers.parseEther("0.01"),
});
Важный момент: Privy SDK работает через WebView под капотом на мобильных платформах. Это означает дополнительный overhead на cold start и потенциальные проблемы с жизненным циклом приложения на Android (Activity recreation при повороте экрана). Нужно тестировать сценарий: фоновый режим → foreground во время активной Privy-сессии.
Настройка в Dashboard
В Privy Dashboard: App Settings → Login Methods — включить нужные провайдеры. Для Google: OAuth Client ID из Google Cloud Console. Для Apple: Service ID, private key, key ID.
Allowed origins для production — домен вашего приложения. Для мобильных — bundle ID (iOS) и package name (Android) в разделе Mobile Apps.
Интеграция Privy Auth в React Native / Expo приложение — 1-2 недели. Стоимость рассчитывается индивидуально после анализа требований к поддерживаемым сетям и методам аутентификации.







