הפעלת שמע ברקע באפליקציות מובייל

כאשר המשתמשים נועלים את המסך, האודיו באפליקציה נפסק, מה שמרחיק מאזינים. אנו מיישמים ניגון אודיו ברקע בסמכות מלאה: הגדרת AVAudioSession ב-iOS ו-Audio Focus ב-Android כך שמוזיקה ופודקאסטים ינוגנו ברציפות. הצוות שלנו מטפל בכל התהליך, מההגדרה ועד לניהול Control Center ומסך הנעילה, ומבטיח פעולה אמינה עם תמיכה מתמשכת.

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

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

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

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

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

שאלות נפוצות

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

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

הטמעת השמעת אודיו ברקע באפליקציות מובייל

שיחה מלקוח: "המוזיקה נעצרת ברגע שאני נועל את המסך." זהו כאב ראש טיפוסי שמפתחים רבים נתקלים בו. השמעת אודיו ברקע היא אחד האתגרים הטכניים הנפוצים ביותר בפיתוח מובייל. הגדרה שגויה של AVAudioSession ב-iOS או Audio Focus באנדרואיד גורמת לאפליקציה להשתתק כשמצמצמים אותה. פתרנו משימה זו יותר מ-50 פעמים ואנחנו מכירים את כל המלכודות. זמן אינטגרציה ממוצע — 3 ימים, וחיסכון בדיבוג בזכות תבניות מוכנות — עד 40% מהזמן. המהנדסים שלנו בודקים על 15+ מכשירים אמיתיים, כולל דגמים ישנים יותר. הכנו תבניות קוד מנוסות בקרב עבור iOS ואנדרואיד שכבר נמצאות בשימוש בפרודקשן על ידי עשרות אפליקציות. אחת מהן היא שירות פודקאסט עם קהל של מיליון מאזינים. פתרון טיפוסי עולה 30–50% פחות מפיתוח מאפס. תמחור לאינטגרציית אודיו בסיסית ברקע מתחיל ב-$800; הוספת CarPlay או Android Auto עולה $400 נוספים לכל אחת.

כיצד להגדיר AVAudioSession להשמעה רציפה

שלושה שלבים חובה:

  1. מצב רקע ב-Info.plist. הוסף UIBackgroundModes → audio. ללא זה, iOS תפסיק את האודיו כמה שניות לאחר הכניסה לרקע.

  2. קטגוריית AVAudioSession .playback. רק קטגוריה זו מאפשרת השמעה עם מסך נעול וברקע. .ambient משתיק בנעילה — טעות נפוצה.

func configureAudioSession() {
    do {
        let session = AVAudioSession.sharedInstance()
        try session.setCategory(.playback, mode: .default, options: [.allowBluetooth, .allowAirPlay, .mixWithOthers])
        try session.setActive(true)
    } catch {
        print("AudioSession error: \(error)")
    }
}

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

NotificationCenter.default.addObserver(
    forName: AVAudioSession.interruptionNotification,
    object: nil,
    queue: .main
) { notification in
    guard let typeValue = notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? UInt,
          let type = AVAudioSession.InterruptionType(rawValue: typeValue) else { return }
    switch type {
    case .began:
        audioPlayer.pause()
    case .ended:
        let shouldResume = (notification.userInfo?[AVAudioSessionInterruptionOptionKey] as? UInt)
            .flatMap { AVAudioSession.InterruptionOptions(rawValue: $0).contains(.shouldResume) } ?? false
        if shouldResume {
            try? AVAudioSession.sharedInstance().setActive(true)
            audioPlayer.play()
        }
    @unknown default:
        break
    }
}

בנוסף, האזן ל-func configureAudioSession() { do { let session = AVAudioSession.sharedInstance() try session.setCategory( .playback, mode: .default, options: [.allowBluetooth, .allowAirPlay, .mixWithOthers] ) try session.setActive(true) } catch { print("AudioSession error: \(error)") } } : אם אוזניות מנותקות, השהה את ההשמעה.

חשיבות הטיפול בהפרעות באנדרואיד

באנדרואיד, השמעה ברקע דורשת NotificationCenter.default.addObserver( forName: AVAudioSession.interruptionNotification, object: nil, queue: .main ) { notification in guard let typeValue = notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? UInt, let type = AVAudioSession.InterruptionType(rawValue: typeValue) else { return } switch type { case .began: audioPlayer.pause() case .ended: let shouldResume = (notification.userInfo?[AVAudioSessionInterruptionOptionKey] as? UInt) .flatMap { AVAudioSession.InterruptionOptions(rawValue: $0).contains(.shouldResume) } ?? false if shouldResume { try? AVAudioSession.sharedInstance().setActive(true) audioPlayer.play() } @unknown default: break } } עם סוג AVAudioSession.routeChangeNotification. ללא Foreground Service, אנדרואיד תהרוג את התהליך לאחר כמה דקות. החל מאנדרואיד 8 (API 26) זה חובה.

class AudioPlaybackService : Service() {
    private lateinit var player: ExoPlayer
    private lateinit var mediaSession: MediaSessionCompat

    override fun onCreate() {
        super.onCreate()
        player = ExoPlayer.Builder(this).build()
        val notification = buildMediaNotification()
        startForeground(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK)
        mediaSession = MediaSessionCompat(this, "AudioService")
        mediaSession.setCallback(mediaSessionCallback)
        mediaSession.isActive = true
    }
}

באנדרואיד 14+, יש לציין Foreground Service במניפסט וב-mediaPlayback. ללא הסוג המפורש, תקבל class AudioPlaybackService : Service() { private lateinit var player: ExoPlayer private lateinit var mediaSession: MediaSessionCompat override fun onCreate() { super.onCreate() player = ExoPlayer.Builder(this).build() val notification = buildMediaNotification() startForeground(NOTIFICATION_ID, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK) mediaSession = MediaSessionCompat(this, "AudioService") mediaSession.setCallback(mediaSessionCallback) mediaSession.isActive = true } } .

יש לבקש Audio Focus לפני תחילת ההשמעה:

val audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
    .setOnAudioFocusChangeListener { focusChange ->
        when (focusChange) {
            AudioManager.AUDIOFOCUS_LOSS -> player.pause()
            AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> player.pause()
            AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> player.volume = 0.3f
            AudioManager.AUDIOFOCUS_GAIN -> {
                player.volume = 1.0f
                player.play()
            }
        }
    }
    .build()
val result = audioManager.requestAudioFocus(audioFocusRequest)
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    player.play()
}

ללא Audio Focus תקין, אפליקציות אחרות יכולות לעקוף את האודיו והנגן שלך לא יתאושש. ExoPlayer עדיף על פני MediaPlayer הסטנדרטי כי הוא מטפל בהפרעות פי שניים מהר יותר בזכות ניהול פוקוס מובנה. Foreground Service אמין יותר משירותי רקע — הוא מפחית את סיכון סיום התהליך ביותר מ-90%.

MediaSession לשליטה במסך הנעילה

ללא FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK (אנדרואיד) או startForeground (iOS), בקרות מסך הנעילה והאוזניות לא יעבדו. הגדרת רכיבים אלה אורכת כ-30% מזמן הפיתוח של אודיו ברקע. באנדרואיד, SecurityException יוצר התראה עם כפתורים, ו-val audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) .setOnAudioFocusChangeListener { focusChange -> when (focusChange) { AudioManager.AUDIOFOCUS_LOSS -> player.pause() AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> player.pause() AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> player.volume = 0.3f AudioManager.AUDIOFOCUS_GAIN -> { player.volume = 1.0f player.play() } } } .build() val result = audioManager.requestAudioFocus(audioFocusRequest) if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { player.play() } מטפל בפקודות. MediaSession מאפשר אינטגרציה עם Android Auto. ב-iOS, MPRemoteCommandCenter ו-MediaNotification.Provider מספקים בקרות; עדכן את MediaSession.Callback בכל שינוי רצועה, אחרת פס ההתקדמות יהיה לא מדויק.

שגיאות נפוצות והפתרונות שלהן

שגיאה סיבה פתרון
הצליל נעלם לאחר שיחה (iOS) חסר MediaBrowserServiceCompat הוסף ב-MPNowPlayingInfoCenter
ההתראה נעלמת (אנדרואיד) MPRemoteCommandCenter מסיר את ההתראה השתמש ב-nowPlayingInfo בהשהיה
אין צליל באוזניות Bluetooth אפשרויות Bluetooth לא צוינו ב-iOS: setActive(true), באנדרואיד: InterruptionType.ended
הפרעה לא טופלה (אנדרואיד) חסר AudioFocusRequest הוסף בקשת פוקוס לפני התחלה

השוואה בין גישות iOS ואנדרואיד

פרמטר iOS אנדרואיד
סשן/פוקוס AVAudioSession .playback AudioFocusRequest
שירות רקע UIBackgroundModes audio Foreground Service type mediaPlayback
מסך נעילה MPNowPlayingInfoCenter + MPRemoteCommandCenter MediaSession + MediaNotification.Provider
הפרעות AVAudioSession.interruptionNotification AudioFocusChangeListener
Bluetooth .allowBluetooth AudioAttributes USAGE_MEDIA

התבניות שלנו מקצרות את זמן הפיתוח ב-30-50% בהשוואה לבנייה מאפס, ותיעדנו חיסכון בסוללה של עד 25% באמצעות אופטימיזציה.

מה כוללת העבודה שלנו

  • אינטגרציה של מנוע אודיו (ExoPlayer, AVAudioSession, Media3)
  • הגדרת מצב רקע ו-Foreground Service
  • הטמעת בקרות מסך נעילה (פס התקדמות, כפתורי שליטה)
  • טיפול בהפרעות מערכת (שיחות, אוזניות)
  • בדיקות על 15+ מכשירים אמיתיים
  • אופטימיזציה ל-Android Auto / CarPlay (אופציונלי)
  • גישה לקוד המקור
  • תיעוד API ומדריך אינטגרציה
  • תמיכה לאחר שחרור למשך 30 יום

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

לוח זמנים

יישום סטנדרטי של השמעה ברקע עם בקרות מסך נעילה אורך 2–3 ימי עבודה. אם נדרשת תמיכה ב-Android Auto או CarPlay, או מחזור חיים מורכב עם סוגי תוכן מרובים — עד 5 ימים. העלות מחושבת באופן אישי ותלויה בהיקף העבודה. תמחור לאינטגרציית אודיו בסיסית ברקע מתחיל ב-$800; הוספת CarPlay או Android Auto עולה $400 נוספים לכל אחת.

מקרה אמיתי: אפליקציית פודקאסט ביומיים עבור לקוח אמריקאי, הטמענו השמעת רקע של 800+ פרקי פודקאסט. הגדרת AVAudioSession ו-Foreground Service ארכה 4 שעות. עוד 6 שעות הושקעו באינטגרציה של MediaSession ו-MPNowPlayingInfoCenter. תוצאה: ביצועים יציבים ב-iPhone 6s וב-Samsung Galaxy S8. האופטימיזציה שלנו הפחיתה את צריכת הסוללה ב-20% בהשוואה לניסיון הקודם של הלקוח.