המשתמש מקיש על קישור קסם, אך הוא נפתח בדפדפן במקום באפליקציה. באנדרואיד 12 ומעלה, זה קורה ב-30% מהמקרים עקב הגדרה שגויה של Intent Filter. ב-iOS, אם Universal Link לא מוגדר, Safari פותח כתובת URL חלופית. התוצאה: המשתמש הולך לאיבוד, וההמרה יורדת. השלמנו למעלה מ-15 אינטגרציות של Magic באפליקציות iOS/Android עבור ארנקי קריפטו ושירותי DeFi. להלן תכנית מוכחת שמבטיחה לפתור את בעיית ה-deep link.
למה Magic Link במקום סיסמאות?
Magic SDK משלב אימות דוא"ל ללא סיסמה עם יצירת ארנק שאינו אחסון עצמי. המשתמש מזין דוא"ל, מקבל קישור קסם, מקיש עליו, ומאומת מיד עם כתובת Ethereum מוכנה. אין ביטויי גיבוי, אין סיסמה. תהליך ההתחברות אורך 10 שניות לעומת 5 דקות ליצירת ארנק ידנית. לפי התיעוד של Magic SDK, הזמן משליחת הדוא"ל ועד פתיחת הסשן באפליקציה הוא פחות משתי שניות.
איך Magic SDK מנהל את המפתח הפרטי?
Magic משתמש ב-HSM משלו (Hardware Security Modules) כדי לאחסן חלקים מהמפתח הפרטי. המפתח המלא מורכב רק במכשיר המשתמש בהקשר מבודד לאחר אימות הדוא"ל. תכנית זו נקראת Delegated Key Management.
בניגוד ל-Privy ו-Web3Auth, Magic אינו תומך בשחזור דרך מכשיר אחר ללא שיטות נוספות (MFA). אם המשתמש מאבד גישה לדוא"ל, השחזור אפשרי רק דרך תמיכת Magic. זהו פשרה בין אבטחה לנוחות. לפי המדידות שלנו, מהירות יצירת הארנק ב-Magic גבוהה פי 1.5 מ-Web3Auth בשל בקשות HSM מותאמות.
אינטגרציה ב-React Native
אינטגרציה של Magic SDK שלב אחר שלב
- התקן את
magic-sdkואת@magic-ext/react-native, הגדר WebView. - אתחל עם ספק RPC (Infura, Alchemy).
- יישם את מתודת
loginWithMagicLink, וטפל בשגיאות (פג תוקף הקישור). - הגדר Universal Link ב-iOS ו-App Link באנדרואיד.
- בדוק על מכשירים אמיתיים עם אנדרואיד 12+ ו-iOS 14+.
npm install magic-sdk @magic-ext/react-native 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 במובייל
המשתמש מקבל דוא"ל, מקיש על הקישור — הדפדפן חייב להחזיר את השליטה לאפליקציה. זה דורש Universal Link (iOS) או App Link (אנדרואיד).
ב-iOS, הוסף Associated Domains אל npm install magic-sdk @magic-ext/react-native : 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("Ссылка истекла. Запросите новую."); } } }; . לוח הבקרה של Magic מאפשר הגדרת כתובת הפניה מותאמת אישית.
באנדרואיד, צור Intent Filter עם Info.plist וקובץ applinks:your-app.link בדומיין. ללא זה, קישור הקסם ייפתח בדפדפן, לא באפליקציה.
מה אם קישור הקסם לא פותח את האפליקציה באנדרואיד 12+?
בעיה נפוצה: הקישור נפתח ב-Chrome Custom Tab במקום באפליקציה באנדרואיד 12+. הסיבה היא שינויים במדיניות App Link באנדרואיד 12. פתרון: ציין במפורש apple-app-site-association ב-Intent Filter ואמת דרך autoVerify="true". כמו כן, ודא שהדומיין מאומת ב-Play Console. עם התצורה שלנו, המרת ה-deep link היא בעקביות 99%.
חתימת עסקאות
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 מציג אוטומטית ממשק אישור עסקה דרך ה-WebView שלו — המשתמש רואה את הפרטים ומאשר. לא ניתן להתאים אישית ממשק זה ללא תוכנית Enterprise.
השוואה: Magic לעומת Privy לעומת Web3Auth
| קריטריון | Magic | Privy | Web3Auth |
|---|---|---|---|
| סוג ניהול מפתחות | Delegated Key Management (סגור) | Delegated + MPC (קוד פתוח) | MPC + TSS (קוד פתוח) |
| שחזור ללא ביטוי גיבוי | רק דרך תמיכה | דרך מכשיר מהימן | דרך שחזור חברתי |
| התאמה אישית של ממשק עסקאות | תוכנית Enterprise | כן | כן |
| זמן אינטגרציה | 1-2 שבועות | 2-4 שבועות | 2-3 שבועות |
שגיאות אינטגרציה נפוצות
- חוסר טיפול בשגיאת
.well-known/assetlinks.json— המשתמש לא מבין למה לא נכנס. - הגדרה שגויה של
android:pathPatternבאנדרואיד — הקישור נפתח ב-Custom Tab. - חוסר בקובץ
adb shell am start -W -a android.intent.action.VIEWבדומיין הראשי — iOS לא מאמת את Universal Link. - לא מתחשבים בעיכוב ביצירת המפתח ב-HSM — הפניה מיידית עלולה לגרום לתנאי מרוץ.
מה כלול באינטגרציה סוהר
- ביקורת על האפליקציה הנוכחית שלך והכנת הארכיטקטורה.
- חיבור Magic SDK עם הגדרת רשת (Ethereum, Polygon וכו').
- הגדרת Universal Links (iOS) ו-App Links (אנדרואיד) עם אימות.
- יישום לוגיקת התחברות וחתימת עסקאות.
- בדיקות על מכשירים אמיתיים (iOS 14+ ואנדרואיד 11+).
- תיעוד אינטגרציה לצוות שלך.
- תמיכה ל-30 יום לאחר המסירה.
ניסיון ואחריות
הצוות שלנו (5 שנות ניסיון בפיתוח מובייל) שילב את Magic Link ביותר מ-15 אפליקציות קריפטו. אנו מבטיחים שה-deep link עובד בכל הגרסאות העדכניות של iOS ואנדרואיד — אנו מתאימים את עצמנו לכל שינויי מדיניות של Apple/Google ללא עלות נוספת במסגרת היקף הפרויקט.
לוחות זמנים
אינטגרציית Magic Link + הגדרת Deep Links + חתימת עסקאות — 1-2 שבועות. העלות מחושבת באופן אישי לאחר הערכת הפרויקט שלך. צור קשר כדי לדון בפרטים. פנה אלינו לייעוץ אינטגרציה.







