Інтеграція Privy для аутентифікації в криптографічному мобільному додатку
Privy — постачальник вбудованого гаманця з акцентом на UX. На відміну від MetaMask або WalletConnect, Privy створює гаманець прозоро для користувача: вхід через email або соціальну авторизацію, і гаманець готовий. Ніяких "встановити розширення" або "зберегти seed-фразу". Для крипто-додатків, спрямованих на масову аудиторію, це суттєво знижує бар'єр входу.
Архітектура Privy
Приватний ключ гаманця шифрується та зберігається в інфраструктурі Privy з шифруванням на стороні клієнта—Privy не має доступу до простого текстового ключа. Під час аутентифікації ключ розшифровується на пристрої користувача за допомогою даних від OAuth-провайдера та апаратного токена Privy.
Схема ближча до кастодіальної, ніж Web3Auth з MPC, але суттєво простіша у реалізації та забезпечує плавніший UX.
Інтеграція в React Native
Privy надає офіційний SDK @privy-io/expo для 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 — адреса гаманця
Вбудований гаманець створюється автоматично при першому вході (якщо 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 при холодному старті та потенційні проблеми з життєвим циклом на Android (перестворення Activity при обертанні екрана). Потрібно тестувати сценарії: фоновий режим → основний під час активної сесії Privy.
Конфігурація на Dashboard
На Privy Dashboard: App Settings → Login Methods — увімкніть потрібних провайдерів. Для Google: OAuth Client ID з Google Cloud Console. Для Apple: Service ID, приватний ключ, ID ключа.
Дозволені джерела для виробництва — домен вашого додатку. Для мобільних — bundle ID (iOS) та назва пакета (Android) у розділі Mobile Apps.
Інтеграція Privy Auth у додаток React Native / Expo — 1–2 тижні. Вартість розраховується індивідуально після аналізу вимог щодо підтримуваних мереж та методів аутентифікації.







