סנכרון נתונים דרך Google Drive API באפליקציה לנייד

משתמשים מאבדים עריכות וקבצים כאשר האפליקציה מנתקת את הקשר עם הענן. אנו מפתחים ומגדירים סנכרון Google Drive במסלול מלא: מתכננים קונפליקטים, מצב לא מקוון ושחזור. העריכות מפסיקות להיעלם, והתמיכה מפסיקה לטפל בתלונות חוזרות.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
סנכרון נתונים דרך Google Drive API באפליקציה לנייד
בינוני
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

סנכרון Google Drive באפליקציה לנייד: היכן זה נשבר

סנכרון Google Drive באפליקציה לנייד נשבר לא על "לוגיקה מורכבת", אלא על דברים יומיומיים: המשתמש מזער את האפליקציה במעלית, הרשת נעלמה באמצע ההעלאה, הקובץ שונה שמו בשני מכשירים בו-זמנית.

Drive API מחזיר זאת כמערכת של שגיאות ורוויזיות מפוזרות, ובלי טיפול מפורש כל מצב כזה הופך לקונפליקט גרסאות של קבצים או לאובדן שקט של שינויים.

היקר ביותר הוא ניתוק הסנכרון ברשת סלולרית. העלאה של קובץ גדול דרך סשן resumable נפסקת, והאפליקציה או מתחילה את ההעלאה מחדש, או משאירה את הקובץ במצב ביניים — והמשתמש רואה "הועלה", למרות שבפועל חצי מהנתונים בדיסק. בערוץ חלש זה חוזר על עצמו בכל ניסיון, ואוכל תעבורה וסוללה.

הסוג השני של כשלים — כפילויות של קבצים בענן. בקשה חוזרת לאחר timeout יוצרת עותק שני, כי האפליקציה לא השוותה את המזהה של הקובץ שכבר נשלח. עם הזמן התיקייה מתמלאת בגרסאות "מסמך (1)", "מסמך (2)", ואף אחד — לא המשתמש ולא התמיכה — כבר לא יכול להבין איזו מהן רלוונטית.

השלישי — תור תקוע של סנכרון מושהה. המשימות מצטברות באופן מקומי, חלקן מפנות לקבצים שנמחקו, חלקן ממתינות לרשת שלא תגיע. התור גדל, האפליקציה בהפעלה מבזבזת שניות על ניתוחו, וחלק מהפעולות כלל לא מגיע לשרת.

המחיר של שלושת הכשלים זהה: המשתמש מפסיק לסמוך על האפליקציה ומאמץ הרגל "לבדוק אם זה נשמר". בהמשך נפרק כיצד זה נסגר ברמת הארכיטקטורה של הסנכרון.

מה נותנת סנכרון מנוהל של Google Drive מבחינת האפקט

מצבי סנכרון והאפקט המדיד שלהם

סנכרון מלא מושך את כל מערך הקבצים בכל הפעלה — בכניסה הראשונה מדובר בדקות של המתנה ובצריכת תעבורה ניכרת. סנכרון אינקרמנטלי נשען על יומן השינויים: האפליקציה מבקשת רק את מה שהשתנה מאז ההפעלה הקודמת, והטעינה הראשונה מתקצרת פי כמה, והחוזרות — לשניות.

תור שינויים במצב לא מקוון פותר את הכאב העיקרי של תרחישים ניידים — רשת שנעלמה. עריכות המשתמש נאספות לתור מקומי ונשלחות עם חידוש הקישור, ולכן אף עריכה לא הולכת לאיבוד בעת מעבר בין רשתות ומזעור האפליקציה.

פתרון קונפליקטים קובע מה יקרה כאשר קובץ אחד שונה בשני מכשירים. האסטרטגיה "העריכה האחרונה מנצחת" פשוטה, אך מאבדת נתונים בשקט; גרסאות עם מיזוג מפורש שומרות על שני הצדדים ומפחיתות את שיעור השינויים שאבדו לאפס.

זמן התכנסות הנתונים — מדד מפתח: כמה עובר מעריכה במכשיר אחד עד להופעתה במכשיר אחר. בסנכרון אינקרמנטלי ובעיבוד נכון של היומן הוא נמדד בשניות, ולא בדקות.

אפשרות מתי מתאימה מגבלות
סנכרון מלא מערכים קטנים, עריכות נדירות טעינה ראשונה ארוכה, גידול בתעבורה
אינקרמנטלי מערכים גדולים, עריכות תכופות נדרש יומן שינויים ועיבודו
תור במצב לא מקוון רשת לא יציבה, תרחיש נייד דורש לוגיקת שליחה חוזרת
גרסאות עם מיזוג עבודה משותפת על קבצים מורכב יותר למימוש

בפועל משלבים בין המצבים: סנכרון אינקרמנטלי כבסיס, תור במצב לא מקוון לעמידות, גרסאות לקונפליקטים. מערך כזה מסיר סוג שלם של כשלים — "עריכות נעלמו", "הנתונים התפצלו בין המכשירים", "האפליקציה נתקעה בטעינה הראשונה".

Google Drive API מספק לשם כך יומן שינויים וגרסאות של קבצים — עליהם נבנה סנכרון צפוי.

כיצד אנו מיישמים סנכרון: שלבי העבודה ההנדסית

סנכרון Google Drive נשבר לא בקריאת ה-API, אלא אי-התאמה של מודלים של נתונים: מסד נתונים מקומי שומר דבר אחד, הענן מחזיר דבר אחר, ובמקרה של קונפליקט גרסאות האפליקציה דורסת עריכות חדשות בישנות.

לכן אנו מתחילים את העבודה לא מהקוד, אלא מניתוח של האופן שבו הנתונים חיים כעת — ורק לאחר מכן מתכננים את החלפת הנתונים.

  1. ביקורת סכימת הנתונים. מנתחים את האחסון המקומי, את הישויות בצד השרת ואת מבנה הקבצים בענן: אילו שדות משתנים, מי הבעלים של הרשומה, היכן אפשריות עריכות בו-זמניות משני מכשירים. התוצר — מפת אי-ההתאמות ורשימת מקומות שבהם הסנכרון חייב לפתור קונפליקט, ולא לדרוס.
  2. תכנון מודל הסנכרון. מגדירים את יחידת ההחלפה, את הכיוון (חד-כיווני או דו-כיווני), את אסטרטגיית פתרון הקונפליקטים ואת כללי המחיקה. מתעדים מה קורה בעת עריכה במצב לא מקוון: השינויים נכנסים לתור ויוצאים לענן עם חידוש החיבור לרשת.
  3. הגדרת גישה לענן. מגדירים אימות באמצעות OAuth, את היקפי הגישה המינימליים הנדרשים, רענון טוקנים והתנהגות בעת שלילת הרשאות על ידי המשתמש. בנפרד בודקים את התרחיש של החלפת חשבון במכשיר.
  4. מימוש ההחלפה. כותבים את שכבת הסנכרון: טעינה דלתא במקום טעינה מלאה, טיפול בכשלים חלקיים, ניסיונות חוזרים עם השהיה גדלה. החלפה אינקרמנטלית במקום שאיבת כל עץ הקבצים.
  5. בדיקת עומס. מריצים תרחישים עם מספר רב של קבצים, ערוץ חלש וניתוק הקשר באמצע ההעברה. בודקים אם המצב משתחזר ללא כפילויות וללא אובדן.
  6. מסירת תיעוד. מוסרים את סכימת מודל הסנכרון, תיאור אסטרטגיית הקונפליקטים, הנחיות לגבי הרשאות גישה וניתוח של כשלים אופייניים — כדי שניתן יהיה לנהל את התמיכה בלעדינו.

תארו את המשימה — נחזור עם הערכה ותוכנית מותאמת לתרחיש שלכם.

במה שונה סנכרון דו-כיווני מסנכרון חד-כיווני?

סנכרון חד-כיווני הוא זרימה בכיוון אחד: האפליקציה או מעלה נתונים ל-Google Drive, או שולפת אותם משם, אך אינה משלבת את שני הכיוונים. מודל כזה צפוי מראש: לכל רשומה יש בעלים אחד, מקור האמת קבוע, ולכן קונפליקט עריכות אינו נוצר מלכתחילה.

בדיוק משום כך נוקטים בסכמה חד-כיוונית לגיבויים, לייצוא דוחות, לאספקת תוכן מתעדכן — במקומות שבהם רק צד אחד משנה את הנתונים. סנכרון Google Drive במצב זה מצטמצם למעקב אחר שינויים ולשליחה או שליפה חוזרת, ללא לוגיקת מיזוג.

סנכרון דו-כיווני הוא משימה אחרת: שני הצדדים יכולים לשנות את אותם אובייקטים, ובמוקדם או במאוחר אותה רשומה תשתנה בשני מקומות. כאן מופיע פתרון קונפליקטים של עריכות — שכבה הכרחית, ולא פרט מימוש.

הוא פועל מעל אסטרטגיית מיזוג: או שהעריכה האחרונה לפי זמן מנצחת, או שהעדיפות ניתנת לצד אחד, או שהשינויים ממוזגים לפי שדות, או שהקונפליקט מוצג למשתמש לבחירה. מהאסטרטגיה הנבחרת תלוי מה יראה האדם לאחר ההתפצלות: נתונים שנדרסו בשקט, רשומה מאוחדת או בקשה מפורשת "איזו גרסה להשאיר".

ההבדל מתבטא בתחזוקה. סכמה חד-כיוונית נשברת לעיתים רחוקות: התקלה מתוחמת לכיוון אחד, החזרה לאחור פשוטה, והמצב משוחזר בשליפה חוזרת. סכמה דו-כיוונית מחייבת לשמור תוויות גרסאות וזמן שינוי אחרון לכל אובייקט, אחרת המערכת לא תבחין בין עריכה זרה לעריכה עצמית ותתחיל לדרוס נתונים.

מתווספים תרחישים שאינם קיימים במודל חד-כיווני: מחיקה בצד אחד כשהעותק בצד השני חי, התפצלות בעבודה לא מקוונת, סנכרון חוזר לאחר היעדרות ארוכה של חיבור.

הבחירה נקבעת לא לפי נוחות, אלא לפי אופי הנתונים. אם רשומה משתנה על ידי משתמש אחד או מכשיר אחד — המודל החד-כיווני מספיק, והוא זול יותר לתחזוקה.

ברגע שהעריכות מגיעות ממספר מכשירים או מממשק ווב, יש צורך בסנכרון דו-כיווני עם אסטרטגיית מיזוג מפורשת ופתרון קונפליקטים של עריכות מחושב היטב. אפשרות ביניים — היברידי: נתונים כבדים בכיוון אחד, הגדרות משתמש קטנות בשני הכיוונים, עם עדיפות לשרת בעת התפצלות.

מקרה בוחן: כיצד הסנכרון הפסיק לאבד עריכות של משתמשים

לקוח הגיע עם תלונה קלאסית: משתמשים עורכים את אותו מסמך מהטלפון ומהטאבלט, וחלק מהשינויים נעלמים. האפליקציה כתבה את הקובץ בשלמותו לפי טיימר, בלי התחשבות בגרסאות, ולכן בעת קונפליקט ניצחה הכתיבה האחרונה — השאר נמחק בשקט.

במהלך רבעון הצטברו 340 פניות לתמיכה בנוסח "נעלמו עריכות", ושיעור השינויים שאבדו הגיע ל-6% מכלל פעולות הכתיבה.

מה חשף הניתוח

מדדנו מדדים על תעבורה אמיתית וראינו שלוש סיבות. הראשונה — כתיבה בלי בדיקת גרסה: הלקוח לא קרא את המטא-נתונים של הקובץ לפני השליחה ולא ידע שהגרסה בשרת כבר התקדמה. השנייה — תור הסנכרון חי רק בזיכרון: בעת מזעור האפליקציה פעולות שלא נשלחו אבדו. השלישית — שליחה חוזרת לאחר ניתוק ברשת יצרה כפילויות, כי לא היה מפתח אידמפוטנטיות.

מה שינו

העברנו את הכתיבה למודל עם בדיקת גרסה: לפני השליחה הלקוח מבקש את המטא-נתונים הנוכחיים, משווה לגרסת הבסיס המקומית, ובמקרה של אי-התאמה פותר את הקונפליקט לפי הכלל "מאחדים שדות, גרסאות מתנגשות נשמרות זו לצד זו". תור הפעולות הועבר לאחסון מקומי — הוא שורד הפעלה מחדש ומזעור. לכל פעולה הוספנו מפתח ייחודי, ולכן שליחה חוזרת לאחר ניתוק אינה יוצרת עותקים.

מדד לפני אחרי
שיעור השינויים שאבדו 6% 0,2%
זמן התכנסות הנתונים עד 40 שניות 2-4 שניות
פניות לתמיכה ברבעון 340 28
כפילויות קבצים באופן קבוע מקרים בודדים

בנפרד הגדרנו סנכרון רקע עם הגבלה על צריכת תעבורה: קבצים כבדים נטענים רק ב-Wi-Fi, קלים — מיד. זה הסיר את התלונות על פריקת סוללה שהופיעו לאחר הגרסה הראשונה של הפתרון.

Google Drive API מספק לכך סט מוכן — גרסאות, מטא-נתונים ותפוקה מדורגת של שינויים — אבל הנכונות כולה בצד הלקוח: השרת לא יפתור קונפליקט במקומכם.

ספקות בנוגע לתאימות, מיגרציה וחזרה לאחור של סנכרון

סנכרון דרך Google Drive API כמעט תמיד משולב באפליקציה שבה הנתונים כבר נמצאים באופן מקומי או בענן אחר. לכן השאלה המרכזית של הלקוח אינה "האם זה יעבוד", אלא "מה יקרה למה שכבר נצבר, ואיך לחזור לאחור אם משהו ישתבש". להלן — כיצד אנו סוגרים את הסיכונים הללו ברמת הארכיטקטורה, ולא בהבטחות.

מה יקרה לנתונים שכבר הועלו? מיגרציית הנתונים מתבצעת לפי סכמת "קריאה — התאמה — כתיבה": תחילה נלקחת העתקה מלאה של המאגר הנוכחי, לאחר מכן רשומות ישנות מותאמות למבנה החדש לפי מזהים יציבים, ורק לאחר בדיקת סכומי ביקורת הנתונים מועברים. המאגר המקורי נשאר ללא שינוי עד לאישור שלמות הנתונים, ולכן אובדן נתונים בשלב זה בלתי אפשרי.

כיצד בנויה חזרה לאחור של סנכרון? כל פעולת כתיבה עוברת דרך ניהול גרסאות: לפני שינוי קובץ נוצרת הגרסה הקודמת שלו, ומצב הסנכרון נרשם בנקודת שחזור נפרדת. החזרה לאחור מחזירה את האפליקציה למצב עקבי — לא "לפי העין", אלא לתגית מסוימת שממנה אין אי-התאמות בין ההעתקה המקומית לענן.

אילו הרשאות גישה לענן נדרשות? האפליקציה מבקשת את הסט המינימלי הנדרש — גישה רק לתיקיית האפליקציה שלה, ללא קריאה של כל הדיסק של המשתמש. זה מסיר שאלות של מודרציה ומפחית את הסיכון בעת ביטול ההסכמה: המשתמש מנתק את הגישה, והאפליקציה ממשיכה לפעול במצב מקומי.

מה אם המשתמש יבטל את הגישה או יחליף חשבון?

הסנכרון עובר למצב מקומי ללא אובדן נתונים: תור השינויים נשמר במכשיר ונשלח שוב בהרשאה הבאה. החלפת חשבון מטופלת כמאגר חדש — התיקייה הישנה אינה נדרסת, קונפליקטים נפתרים לפי זמן השינוי, ולא לפי "מי האחרון".

הלקוח מקבל לידיו:

  • סכמת מיגרציית נתונים עם נקודות בדיקה וסדר ההעברה;
  • תקנון חזרה לאחור של סנכרון עם תיאור תגיות השחזור;
  • מטריצת הרשאות גישה לענן ונימוק לאזורים המינימליים;
  • קונפיגורציות האפליקציה עם פרמטרי סנכרון וקונפליקטים;
  • הוראות להעברת קונפיגורציות בין סביבות (בדיקה, פרודקשן);
  • תיעוד לטיפול בקונפליקטים ולמצב לא מקוון;
  • צ'קליסט קבלה של סנכרון עם בדיקת שלמות לאחר חזרה לאחור.

תארו את המשימה שלכם — המאגר הנוכחי, נפח הנתונים ודרישות הגישה. נחזור עם הערכה ותוכנית למיגרציה, חזרה לאחור והפרדת הרשאות.