Audio Session — ang sentral na mekanismo ng iOS para sa pamamahala ng audio behavior ng aplikasyon: interaksyon sa system, paghawak ng mga interruptions, at pag-routing ng tunog. Bawat iOS application ay nakakakuha ng iisang audio session na nagtatakda kung paano kumikilos ang tunog sa pag-lock ng screen, mga tawag, at pagkonekta ng Bluetooth. Ayon sa Apple Developer Documentation, 2026, ang Audio Session ay naka-configure sa pamamagitan ng kategorya at mode — kung walang tamang configuration, maaaring hindi mag-play ng tunog sa background ang application.
Mga pangunahing punto
Audio Session — ay isang instance ng AVAudioSession na nilikha ng system sa paglunsad ng application at umiiral sa buong lifecycle nito. Ito ay kumikilos bilang tagapamagitan sa pagitan ng application at ng iOS audio system: ang configuration ng kategorya ay nagtatakda kung ang application ay pinapayagang mag-play ng tunog sa background, kung ang tunog ay pipigilin sa tawag, at sa anong mga device ilalabas ang audio.
Hindi tulad ng Android Audio Focus, kung saan ang bawat application ay independiyenteng humihiling at naglalabas ng focus, ang iOS Audio Session ay sentralisadong pinamamahalaan sa pamamagitan ng isang session bawat application. Sa pag-activate ng session, awtomatikong dina-deactivate ng system ang session ng nakaraang application, na nagpapadala ng notification ng interruption. Ang pagkakaibang ito sa arkitektura ay nagtatakda ng ibang approach sa paghawak ng audio sa dalawang platform.
Ayon sa WWDC 2024 Session 211, humigit-kumulang 40% ng mga problema sa audio sa iOS applications ay sanhi ng maling configuration ng Audio Session. Ang pinakakaraniwang pagkakamali — pagpili ng kategoryang ambient sa halip na playback, na nagiging sanhi ng pagkawala ng tunog sa pag-lock ng screen.
Sa paglunsad, ang application ay kumukuha ng sharedInstance ng session, itinatakda ang kategorya sa pamamagitan ng tawag na setCategory(_:mode:options:) at ina-activate ang session sa pamamagitan ng setActive(true). Pagkatapos ng activation, isinasaalang-alang ng iOS ang mga patakaran ng kategorya para sa routing. Kung ang ibang application ay nag-activate ng kanyang session, ang kasalukuyan ay tumatanggap ng notification na AudioSessionInterruptionType.began sa pamamagitan ng Notification.Name.AVAudioSessionInterruption.
Kategorya — ang pangunahing parameter ng Audio Session, na nagtatakda ng anim na paunang natukoy na variant ng behavior. Ang pagpili ng kategorya ay ang una at pinakamahalagang desisyon sa configuration ng audio sa iOS.
| Kategorya | Kailan gagamitin | Background audio | Pigil sa mute |
|---|---|---|---|
| ambient | Mga laro, background effects | Hindi | Oo |
| playback | Musika, podcast, audiobook | Oo | Hindi |
| record | Dictaphone, pag-record ng tunog | Hindi | N/A |
| playAndRecord | VoIP, voice message | Oo | Hindi |
| multiRoute | DJ mixer, karaoke | Oo | Hindi |
| soloAmbient | Default (iOS default) | Hindi | Oo |
Para sa mga music at video player, palaging gamitin ang playback. Ang kategoryang ito ay nagpapahintulot: mag-play ng tunog na naka-lock ang screen, na naka-off ang mute switch (physical button sa katawan ng iPhone) at naka-minimize ang application. Kung walang kategoryang playback, ang session ay dade-activate sa pag-lock ng screen o pag-minimize ng application.
Ang kategoryang ambient ay angkop para sa mga laro at application na may background sounds — pinapayagan nito ang ibang application na magpatuloy sa pag-play. Halimbawa, kung ang user ay nakikinig ng musika at nagbukas ng laro na may ambient session, ang musika ay patuloy na tumutugtog kasama ng mga tunog ng laro. Ito ay isang pangunahing pagkakaiba sa Android, kung saan ang ganitong senaryo ay nangangailangan ng tahasang pahintulot ng duck.
Ang configuration ng Audio Session ay dapat gawin bago magsimula ang anumang playback. Inirerekomenda na i-configure ang session sa method na application(_:didFinishLaunchingWithOptions:) o sa initializer ng player. Pagkatapos i-configure ang kategorya, kailangang i-activate ang session.
import AVFAudio
let session = AVAudioSession.sharedInstance
do {
try session.setCategory(
playback,
mode: default,
options: [allowBluetooth, defaultToSpeaker]
)
try session.setActive(true)
} catch {
print("Nag-fail ang setup ng Audio Session: \(error.localizedDescription)")
}
Ang parameter na options ay may kasamang allowBluetooth (output sa Bluetooth headset) at defaultToSpeaker (pag-play sa pamamagitan ng speaker, hindi earpiece). Ang opsyong allowBluetooth ay kinakailangan para sa mga application na sumusuporta sa Bluetooth headphones — kung wala ito, ang tunog ay maaaring ilabas sa pamamagitan ng internal speaker kahit na naka-konekta ang headset.
let session = AVAudioSession.sharedInstance
try session.setCategory(
playAndRecord,
mode: voiceChat,
options: [allowBluetooth, allowBluetoothA2DP]
)
try session.overrideOutputAudioPort(speaker)
try session.setActive(true)
Ang kategoryang playAndRecord na may mode na voiceChat ay nag-o-optimize ng audio path para sa voice communication: kasama ang echo suppression, automatic gain control (AGC), at pagpili ng optimal na codec. Ang OverrideOutputAudioPort(.speaker) ay pumipilit ng output sa pamamagitan ng speaker kahit na naka-konekta ang headset — kapaki-pakinabang para sa handsfree na tawag.
Ang tawag na setActive(true) ay nag-a-activate ng session at nagpapaalam sa system na ang application ay gagamit ng audio. Sa pag-pause ng playback, inirerekomenda na i-deactivate ang session upang ang ibang application ay makakuha ng audio stream. Exception — mga application na may mahabang background playback (musika, podcast), kung saan ang session ay nananatiling aktibo sa buong track.
Mahalagang hawakan ang mga error sa setActive. Kung ang ibang session na may mataas na priority ay aktibo (hal., Telepono sa tawag), ang setActive ay maaaring maglabas ng error. Sa kasong ito, kailangang maghintay ng notification na AudioSessionInterruptionType.ended at ulitin ang activation.
Ang mode ay nagpapalinaw ng kategorya at nag-o-optimize ng audio path para sa partikular na uri ng paggamit. Bawat mode ay nagbabago ng behavior ng AGC, echo suppression, at codec. Ang mga mode ay hindi pumapalit sa kategorya, kundi nagpupuno dito — isang kategorya ay maaaring gumana sa iba't ibang mode.
Ang mga opsyon ay nagbibigay ng fine-tuning ng behavior ng session. Bawat opsyon ay flag na pinagsama-sama sa iba sa array. Halimbawa, ang [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] ay nagpapahintulot ng output ng tunog sa Bluetooth headset, paggamit ng speaker bilang default, at pagmi-mix sa mga audiobook.
Sa iOS 17+ lumitaw ang opsyong spatialAudio, na nag-a-activate ng personalized na spatial sound para sa AirPods sa pamamagitan ng AVAudioSessionSpatialPreferences. Ayon sa WWDC 2024, ang spatial sound ay nagpapataas ng engagement ng mga user ng music applications ng 25% sa Apple tests.
Mga interruption — ang pangunahing pagkakaiba ng Audio Session at Android Audio Focus. Sa iOS, ang mga interruption ay hinahawakan sa pamamagitan ng NotificationCenter sa pag-subscribe sa AVAudioSession.interruptionNotification. Ang notification ay naglalaman ng diksyunaryo na may uri ng interruption: began o ended.
override func viewDidLoad() {
super.viewDidLoad()
let center = NotificationCenter.default
center.addObserver(
self,
selector: #selector(handleInterruption),
name: AVAudioSession.interruptionNotification,
object: nil
)
}
@objc func handleInterruption(_ notification: Notification) {
guard let userInfo = notification.userInfo,
let type = userInfo[AVAudioSession.interruptionTypeKey]
as? AVAudioSessionInterruptionType
else { return }
switch type {
case began:
pausePlayback()
case ended:
guard let options = userInfo[AVAudioSession.interruptionOptionKey]
as? AVAudioSessionInterruptionOptions
else { return }
if options.contains(shouldResume) {
resumePlayback()
}
}
Sa pagtanggap ng interruptionType.began, ang player ay dapat mag-pause ng playback. Sa interruptionType.ended, ang property na interruptionOptionKey ay nagpapakita kung ang player ay maaaring awtomatikong mag-resume (shouldResume). Kung tinapos ng user ang tawag, shouldResume = true. Kung ang tawag ay natapos dahil sa timeout — shouldResume = false, hindi pinapayagang mag-resume.
Kapag ang ibang application ay nag-activate ng kanyang Audio Session na may kategoryang playback, ang kasalukuyang session ay tumatanggap ng notification ng interruption. Kung ang ibang application ay gumagamit ng ambient, walang interruption na nangyayari — ang mga tunog ay nami-mix. Ang behavior na ito ay lubhang naiiba sa Android, kung saan ang bawat activation ng Audio Focus ay nagdudulot ng LOSS event.
Para sa mga application na dapat magpatuloy sa playback sa activation ng ibang session (hal., navigation habang nagpe-play ang musika), gamitin ang opsyong .mixWithOthers. Ang opsyong ito ay nagpapahintulot ng pagmi-mix ng tunog sa ibang application, at hindi ipinapadala ang mga interruption. Ang MixWithOthers — iOS counterpart ng duck mode sa Android.
Awtomatikong pinamamahalaan ng Audio Session ang pag-routing ng tunog sa pagitan ng internal speaker, headphones, Bluetooth headset, at AirPlay devices. Maaaring subaybayan ng application ang kasalukuyang ruta sa pamamagitan ng property na currentRoute at makatanggap ng mga notification ng pagbabago sa pamamagitan ng AVAudioSession.routeChangeNotification.
Sa pagkonekta ng Bluetooth headphones, awtomatikong inililipat ng iOS ang audio output sa mga ito kung ang session ay naka-configure na may opsyong allowBluetooth. Kung wala ang opsyong ito, ang tunog ay patuloy na dumadaloy sa pamamagitan ng internal speaker. Simula iOS 16, sa pagkonekta ng AirPods Pro, awtomatikong ina-activate ng system ang ProMotion synchronization para mabawasan ang latency.
Ang pag-subscribe sa routeChangeNotification ay nagpapahintulot ng reaksyon sa pagkonekta at pag-disconnect ng headphones. Sa pag-disconnect ng Bluetooth headset, ang player ay dapat mag-pause ng playback — maaaring hindi inaasahan ng user na magsisimulang tumugtog ang tunog mula sa speaker ng telepono. Ayon sa Apple HIG (2026), ito ay mandatoryong behavior para sa mga music application.
Ang mga property na availableInputs at availableOutputs ay nagbabalik ng listahan ng mga available na audio device kasama ang kanilang mga uri (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Ang developer ay maaaring programmatically pumili ng partikular na device sa pamamagitan ng overrideOutputAudioPort para sa custom routing scenarios.
Mga madalas itanong
Ang pangunahing pagkakaiba — arkitektura. Ang Audio Session ay isang sentralisadong session bawat application, na naka-configure nang isang beses. Ang Audio Focus sa Android ay nangangailangan ng manu-manong paghiling ng focus sa bawat playback. Bukod pa rito, sinusuportahan ng iOS ang pagmi-mix sa pamamagitan ng opsyong mixWithOthers, habang sa Android ang duck ay ang tanging alternatibo sa kumpletong paghinto.
Ang pinakakaraniwang dahilan — maling kategorya ng Audio Session. Kung napili ang ambient o soloAmbient, hihinto ang tunog sa pag-lock ng screen. Palitan ang kategorya sa playback at tiyaking idinagdag sa Info.plist ang Background Modes — Audio, AirPlay, and Picture in Picture.
Idagdag ang opsyong .mixWithOthers sa setCategory. Ito ay magpapahintulot sa pagmi-mix ng tunog ng iyong application sa iba pang aktibong session. Kung wala ang opsyong ito, ang bagong application ay maaaring makagambala sa kasalukuyan. Ang MixWithOthers — katumbas ng duck mode sa Android, ngunit may ganap na pagpapanatili ng volume.
Gamitin ang overrideOutputAudioPort na may nil para sa awtomatikong pagpili. Para sa sapilitang output sa Bluetooth: kumuha ng AVAudioSessionRouteDescription mula sa availableOutputs, pumili ng port na may uri na .bluetoothA2DP at ipasa ito sa overrideOutputAudioPort. Tiyaking naka-configure ang session na may allowBluetooth.
Para sa karamihan ng application — oo. Ang pag-deactivate ng session sa pause ay nagpapahintulot sa ibang application na makakuha ng audio focus. Exception — music player na may mahabang background playback. Kung ang pause ay maikli (mas mababa sa 5 segundo), mas mabuting iwanang aktibo ang session para sa mabilis na pag-resume.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din