Інтеграція Magic Link для аутентифікації в криптографічному мобільному додатку
Magic (magic.link) — SDK, який поєднує безпарольну аутентифікацію електронної пошти зі створенням некастодіального гаманця. Користувач вводить email, отримує магічне посилання, торкається його — і миттєво авторизується із готовою адресою Ethereum. Без паролів, без seed.
Механіка Magic SDK
Magic використовує власні HSM (Hardware Security Modules) для зберігання частин приватного ключа. Повний ключ збирається лише на пристрої користувача в ізольованому контексті після верифікації електронної пошти. Ця схема називається Delegated Key Management.
На відміну від Privy та Web3Auth, Magic не підтримує відновлення через інший пристрій без додаткових методів (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 додайте Associated Domains у Info.plist: applinks:your-app.link. На сервері — файл apple-app-site-association. Magic Dashboard дозволяє налаштувати користувацький URL переспрямування.
На Android — Intent Filter з autoVerify="true" та .well-known/assetlinks.json на домені. Без цього магічне посилання відкривається в браузері замість додатку.
Часта проблема: посилання відкривається в 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 — користувач бачить деталі та підтверджує. Без Enterprise-плану ви не можете налаштувати цей UI.
Інтеграція Magic Link + налаштування Deep Links + підписування транзакцій — 1–2 тижні. Вартість розраховується індивідуально.







