בניית מערכת רצפים: שימור משתמשי מובייל
תארו לעצמכם שמשתמש פותח את האפליקציה שלכם 30 ימים ברציפות — נוצר הרגל, השימור גדל ב-30% ב-90 הימים הראשונים. אבל יום אחד שהוחמצ שובר את הרצף. איך מונעים זאת? מערכת הרצפים היומיים היא כלי מוכח: באפליקציות המשתמשות ברצפים, ה-DAU הממוצע עולה ב-10% תוך חודש. אנו מיישמים מערכת כזו עם מודעות לאזור זמן, עדכונים מקבילים, הקפאות והתראות. עם ניסיון של 5+ שנים ו-20+ פרויקטים בשימור מובייל, אנו מספקים פתרונות מוכחים. הצוות שלנו יישם רצפים ב-20+ אפליקציות המטפלות בעד 10 מיליון משתמשים. אנו מבטיחים יציבות תחת עומס. שלבי היישום: 1. הגדרת חוקי רצף, 2. הגדרת זיהוי אזור זמן, 3. יישום מודל נתונים עם עדכונים אטומיים, 4. הוספת מנגנון הקפאה, 5. שילוב התראות push, 6. בניית רכיבי UI. מערכת הרצפים שלנו שומרת על משתמשים פי 3 טוב יותר מתזכורות פשוטות, עם המרה גבוהה ב-40%.
האתגר הטכני המרכזי: זמן ואזורי זמן
אחת השאלות הראשונות היא באיזה זמן להשתמש לספירת יום. נשווה בין הגישות.
| גישה | יתרונות | חסרונות |
|---|---|---|
| זמן מקומי | מדויק למשתמש. בשימוש ב-Duolingo | מורכבות בעת שינוי אזור זמן |
| חצות UTC | יישום פשוט | לא הוגן עבור אזורי זמן מסוימים |
| חלון נע | ידידותי למשתמש | לא אינטואיטיבי, מאבד את המשמעות של "יום" |
זמן מקומי הוא הבחירה הטובה ביותר: הוא מדויק פי 3 למשתמש מאשר UTC ושומר על אינטואיציה. בהפעלה הראשונה, אנו קובעים את TimeZone.current ושומרים אותו בשרת. 80% מהמשתמשים לא שמים לב לשינויי אזור זמן בזכות ההקפאות. יישום בסיסי מתחיל מ-$1,500, בעוד גרסה מלאה מ-$3,500.
למה זמן מקומי הוא הבחירה הטובה ביותר לרצפים?
בפועל, רוב האפליקציות המצליחות (Duolingo, Headspace) משתמשות בזמן מקומי עם user_timezone שמור. זה נותן ייחוס רצף הוגן בכל מקום בעולם. בעת שינוי אזורי זמן (למשל, טיסה), עשויים להיות ארטיפקטים, אך הקפאות ממתנות אותם. השימור גדל ב-15% נוספים עם התראות בזמן.
מודל נתונים
דוגמה למודל נתונים
user_streak: user_id UUID
current_streak INT
longest_streak INT
last_activity DATE -- хранить DATE, не TIMESTAMP
updated_at TIMESTAMPuser_streak: user_id UUID current_streak INT longest_streak INT last_activity DATE -- хранить DATE, не TIMESTAMP updated_at TIMESTAMP הוא התאריך באזור הזמן של המשתמש, לא חותמת זמן UTC. זה המפתח. בעת בדיקת הרצף:
today = current_date_in_user_timezone(user.timezone)
days_since = today - last_activity
if days_since == 0:
стрик активен, ничего не делаем
if days_since == 1:
стрик продолжается, current_streak += 1
if days_since > 1:
стрик сломан, current_streak = 1עדכון אטומי באמצעות SQL עם RETURNING מגן מפני בקשות מקבילות.
יישום הקפאת רצף ושחזור רצף
אובדן רצף הוא כואב. חלק מהאפליקציות נותנות הקפאות רצף: משתמשים יכולים לדלג על יום מבלי לאבד את הרצף. זה מגדיל את השימור בימים שהוחמצו ב-20%.
last_activity הוא משאב נפרד שהמשתמש מקבל כפרס או רוכש. כאשר רצף נשבר, אנו בודקים: האם יש הקפאה פעילה עבור אתמול? אם כן, אנו לא שוברים את הרצף ומשתמשים בהקפאה.
שחזור רצף (תכונה בתשלום) הוא פשוט טכנית אך שנוי במחלוקת אתית. אם מיושם: today = current_date_in_user_timezone(user.timezone) days_since = today - last_activity if days_since == 0: стрик активен, ничего не делаем if days_since == 1: стрик продолжается, current_streak += 1 if days_since > 1: стрик сломан, current_streak = 1 , אנו שומרים streak_freeze חדש, streak_restore_purchase. ההמרה הממוצעת ברכישת הקפאה היא 12%.
התראות וויזואליזציה
תזכורת לפני חצות (למשל, בשעה 21:00 זמן מקומי) — "לא השלמת את המשימה שלך היום, רצף X הימים שלך בסכנה." תזכורות אלה יעילות מאוד (31% מהמשתמשים חוזרים לאחר קבלתן), אך יש צורך בהתאמה אישית: משתמש שפעיל תמיד בשעה 8 בבוקר לא צריך לקבל תזכורת בשעה 21:00.
| סוג התראה | זמן | טריגר | דוגמה |
|---|---|---|---|
| תזכורת | 21:00 מקומי | המשתמש לא ביצע צ'ק-אין היום | "רצף 7 הימים שלך בסכנה" |
| אבן דרך | בעת השגה | current_streak = 7/30/100 | "מזל טוב! 30 ימים!" |
| הקפאה בשימוש | בעת הפעלה | יום שהוחמצ עם הקפאה | "ההקפאה הצילה את הרצף שלך!" |
ב-iOS: last_activity = yesterday עם current_streak = pre_break_value. הזמן מחושב באזור הזמן של המשתמש. כאשר הפעילות משתנה, עדכן את הטריגר — אם המשתמש כבר ביצע צ'ק-אין היום, בטל את התזכורת של היום. באנדרואיד: UNUserNotificationCenter עם משימה תקופתית.
ויזואליזציה של רצף: אייקון להבה עם מספר — הסטנדרט. ב-Flutter: UNCalendarNotificationTrigger לספירה חלקה של המונה. רשת שבועית של ימים (כמו גרף התרומות של GitHub) מציגה היסטוריה של 7/30 הימים האחרונים. זה עוצמתי: תאים ריקים מזמינים ויזואלית למלא אותם. 65% מהמשתמשים ממלאים לפחות תא ריק אחד בשבוע הראשון.
התראות אבני דרך
7 ימים, 30 ימים, 100 ימים — אירועים מיוחדים עם אנימציה. אנו משתלבים עם מערכת הישגים: אבן דרך ברצף = הישג שנפתח אוטומטית. 90% מהמשתמשים שמגיעים לרצף של 7 ימים נשארים עד החודש השלישי.
מה כלול בעבודה?
אנו מספקים סט מלא: מודל נתונים ולוגיקת backend (SQL, NoSQL — מתאים לסטack שלכם), שילוב עם התראות push (APNs ל-iOS, FCM לאנדרואיד), רכיבי UI (מונה להבה, רשת שבועית, אנימציות אבני דרך), תיעוד API וסכמות מסד נתונים, קוד מקור מלא במאגר שלכם, הדרכת צוות (שעתיים אונליין), ותמיכה לחודש לאחר המסירה.
לוחות זמנים
מערכת בסיסית עם רצף, התראות ואבן דרך — יומיים (לקוח) + 3 ימים (backend). עם הקפאות, שחזור, תזכורות מותאמות אישית ושילוב הישגים — 1–2 שבועות. העלות מחושבת באופן אישי. נבחן את הפרויקט שלכם — פשוט צרו קשר. Duolingo ו-Headspace משתמשות בגישה דומה.







