Интеграция Magic Link для аутентификации в мобильном криптоприложении
Magic (magic.link) — SDK, который совмещает passwordless email-аутентификацию с созданием некастодиального кошелька. Пользователь вводит email, получает magic link, тапает — и сразу авторизован с готовым Ethereum-адресом. Никаких паролей, никакого seed.
Механика Magic SDK
Magic использует собственные HSM (Hardware Security Modules) для хранения частей приватного ключа. Полный ключ собирается только на устройстве пользователя в изолированном контексте после прохождения email-верификации. Схема называется Delegated Key Management.
В отличие от Privy и Web3Auth, Magic не поддерживает recovery через другое устройство без дополнительных методов (MFA). Если пользователь теряет доступ к email — восстановление через поддержку Magic.
Интеграция в React Native
npm install magic-sdk @magic-ext/react-native
Magic SDK на React Native работает через встроенный WebView-компонент (magic-sdk). Нужно убедиться, что react-native-webview установлен и настроен.
import { Magic } from "@magic-sdk/react-native";
const magic = new Magic("pk_live_YOUR_PUBLISHABLE_KEY", {
network: {
rpcUrl: "https://mainnet.infura.io/v3/YOUR_KEY",
chainId: 1,
},
});
// Экспортируем провайдер для использования с ethers.js
export const magicProvider = new ethers.BrowserProvider(magic.rpcProvider);
// Логин через email
const loginWithMagic = async (email: string) => {
try {
await magic.auth.loginWithMagicLink({
email,
showUI: true, // Magic показывает свой экран ожидания
});
const userInfo = await magic.user.getInfo();
// userInfo.publicAddress — адрес кошелька
await saveUserSession(userInfo);
} catch (e) {
if (e instanceof RPCError && e.code === RPCErrorCode.MagicLinkExpired) {
showError("Ссылка истекла. Запросите новую.");
}
}
};
Deep Link для magic link на мобильном
Пользователь получает email, тапает ссылку — браузер должен вернуть управление в приложение. Для этого нужен Universal Link (iOS) или App Link (Android).
На iOS в Info.plist добавляем Associated Domains: applinks:your-app.link. На сервере — файл apple-app-site-association. Magic Dashboard позволяет настроить кастомный redirect URL.
На Android — Intent Filter с autoVerify="true" и .well-known/assetlinks.json на домене. Без этого magic link откроется в браузере, а не в приложении.
Проблема, которая встречается часто: ссылка открывается в Chrome Custom Tab вместо приложения на Android 12+. Причина — изменения в политике App Links в Android 12. Решение: явно указывать android:pathPattern в Intent Filter и проверять верификацию через adb shell am start -W -a android.intent.action.VIEW.
Подписание транзакций
const signTransaction = async (to: string, valueEth: string) => {
const signer = await magicProvider.getSigner();
const tx = await signer.sendTransaction({
to,
value: ethers.parseEther(valueEth),
gasLimit: 21000,
});
return tx.hash;
};
Magic автоматически вызывает UI подтверждения транзакции через свой WebView — пользователь видит детали и подтверждает. Кастомизировать этот UI нельзя без Enterprise-плана.
Интеграция Magic Link + настройка Deep Links + подписание транзакций — 1-2 недели. Стоимость рассчитывается индивидуально.







