משימות רקע ב-iOS: מדריך יישום BGTaskScheduler

משתמשים מתלוננים על נתונים לא מעודכנים כשהם חוזרים לאפליקציה? אנחנו מיישמים משימות רקע ב-iOS באמצעות BGTaskScheduler, הכלי הרשמי של Apple לסנכרון נתונים ברקע. הצוות שלנו מגדיר BGAppRefreshTask ו-BGProcessingTask במלואם, ומבטיח עדכוני תוכן אמינים ללא הפרעות ועם תמיכה מתמשכת.

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
משימות רקע ב-iOS: מדריך יישום BGTaskScheduler
בינוני
~2-3 ימים

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

שאלות נפוצות

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

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

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

מדוע iOS מגביל משימות רקע?

iOS מייעל באגרסיביות את צריכת החשמל: אפליקציה ברקע מקבלת 30 שניות לסיים עבודה נוכחית, ולאחר מכן מושעית. BGTaskScheduler מספק שני סוגי משימות שהמערכת מפעילה ברגעים מתאימים (לדוגמה, בזמן טעינה או Wi-Fi). זה אמין פי 10 משיטות ישנות כמו UIApplication backgroundTasks, מכיוון שהמערכת מאזנת עומס וסוללה. כ-90% מהאפליקציות המודרניות ל-iOS משתמשות ב-BGTaskScheduler לעדכוני נתונים.

אילו סוגי משימות מציע BGTaskScheduler?

BGAppRefreshTask — משימה קצרה (עד 30 שניות). המערכת מפעילה אותה בתנאים מתאימים: מכשיר בטעינה או Wi-Fi, משתמש פעיל. מתאים לעדכון נתוני ממשק.

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

פרמטר BGAppRefreshTask BGProcessingTask
זמן מקסימלי 30 שניות מספר דקות
תנאי הפעלה טעינה או Wi-Fi (אופציונלי) טעינה + Wi-Fi
תרחישים אופייניים עדכוני נתוני ממשק מיגרציית DB, הורדת תוכן, ML
תדירות הפעלה עד מספר פעמים בשעה פחות תכוף

כיצד ליישם רישום ותזמון?

ב-Info.plist הוסף מזהי משימות תחת BGTaskSchedulerPermittedIdentifiers:

<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
  <string>com.yourapp.refresh</string>
  <string>com.yourapp.processing</string>
</array>

רישום ב-AppDelegate לפני applicationDidFinishLaunching:

import BackgroundTasks 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 
    BGTaskScheduler.shared.register( 
        forTaskWithIdentifier: "com.yourapp.refresh", 
        using: nil 
    ) { task in 
        self.handleRefresh(task: task as! BGAppRefreshTask) 
    } 
    BGTaskScheduler.shared.register( 
        forTaskWithIdentifier: "com.yourapp.processing", 
        using: nil 
    ) { task in 
        self.handleProcessing(task: task as! BGProcessingTask) 
    } 
    return true 
}

תזמון — כשהאפליקציה נכנסת לרקע:

func scheduleAppRefresh() {
    let request = BGAppRefreshTaskRequest(identifier: "com.yourapp.refresh")
    request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

func scheduleProcessing() {
    let request = BGProcessingTaskRequest(identifier: "com.yourapp.processing")
    request.requiresNetworkConnectivity = true
    request.requiresExternalPower = true
    request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)
    try? BGTaskScheduler.shared.submit(request)
}

תזמן בכל כניסה של האפליקציה לרקע דרך sceneDidEnterBackground או applicationDidEnterBackground. קריאת submit אחת מזמנת משימה אחת.

כיצד לטפל נכון במשימה וב-expirationHandler?

func handleRefresh(task: BGAppRefreshTask) {
    scheduleAppRefresh()
    let syncTask = Task {
        do {
            try await DataSyncService.shared.sync()
            task.setTaskCompleted(success: true)
        } catch {
            task.setTaskCompleted(success: false)
        }
    }
    task.expirationHandler = {
        syncTask.cancel()
        task.setTaskCompleted(success: false)
    }
}

expirationHandler הוא הטעות הנפוצה ביותר שמתעלמים ממנה. אם setTaskCompleted לא נקרא לפני שהזמן מסתיים, המערכת הורגת את התהליך ומסמנת את האפליקציה כמנצלת לרעה את ביצוע הרקע. לאחר מספר מקרים כאלה, iOS מפסיק להפעיל את משימות האפליקציה. ביותר מ-90% מהמקרים, expirationHandler שגוי מוביל לדחיית משימה. תמיד הגדר expirationHandler בתוך ה-handler, בטל את כל הפעולות האסינכרוניות, וקרא ל-setTaskCompleted עם false. כמו כן, תזמן מחדש את המשימה לעתיד.

מתי המערכת מפעילה משימות וכיצד לבצע דיבוג?

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

דיבוג ב-Xcode: ניתן לאלץ משימות דרך תפריט הדיבוג בזמן דיבוג על מכשיר פיזי: Xcode → Debug → Simulate Background Fetch או דרך lldb:

e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.yourapp.refresh"] 

הסימולטור אינו תומך ב-BackgroundTasks — נדרש מכשיר פיזי.

כיצד להשתמש ב-URLSession להורדות רקע?

להעלאות והורדות קבצים ברקע, אין צורך ב-BackgroundTasks — השתמש ב-URLSessionConfiguration.background(withIdentifier:). המערכת מנהלת את ההעברה, והאפליקציה מקבלת קריאה חוזרת בסיום דרך AppDelegate.application(_:handleEventsForBackgroundURLSession:completionHandler:). זה עובד גם אם האפליקציה הופסקה.

יישום שלב אחר שלב:

  1. הוסף מצבי רקע ב-Capabilities.
  2. ציין מזהים ב-Info.plist.
  3. רשום handlers ב-AppDelegate.
  4. יישם תזמון בכניסה לרקע.
  5. כתוב לוגיקת משימה עם expirationHandler.
  6. בדוק על מכשיר פיזי דרך Debug.
  7. העלה ל-App Store Connect ועבור את הבדיקה.

תהליך יישום משימות רקע

  • הגדר פרופיל provisioning וחתימת קוד לתמיכה במצבי רקע
  • רשום Permitted Identifiers ב-Info.plist
  • יישם handlers של BGAppRefreshTask ו-BGProcessingTask עם expirationHandler תקין
  • שלב תצורת רקע של URLSession להעברת קבצים
  • תזמן משימות לפי מחזור חיי האפליקציה
  • בצע דיבוג על מכשירים פיזיים, הגדר APNs במידת הצורך
  • ספק תיעוד וסקירת קוד

מה כלול בשירות שלנו

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

לוח זמנים ועלות

משימה לוח זמנים
יישום BGAppRefreshTask (סנכרון נתונים) יום אחד
יישום BGProcessingTask (פעולות כבדות) 1–2 ימים
העברת רקע עם URLSession +0.5–1 יום
תשתית רקע מלאה 2–3 ימים

העלות מתחילה מ-$1,500 ליישום בסיסי, המחירים משתנים לפי מורכבות. אנו מספקים פתרון מפתח — פשוט כתבו לנו להערכת פרויקט חינמית. עם ניסיון של למעלה מ-5 שנים בפיתוח iOS ויותר מ-50 אינטגרציות מוצלחות, אנו מבטיחים שהאפליקציה שלך תעבור את בדיקת App Store ותעבוד כראוי ברקע.