概要
広告を実装したアプリを使っていると、裏でミュージックアプリで流している音楽が止まる場合があります。
その対処法になります。
音楽が止まる理由
iOSでアプリが音声を発する場合、デフォルトではアプリが音声を発した場合に他の音声を中断する となっています。
そのため、広告を実装したことにより、何かの拍子で広告側が音楽をコントロールしようとして、その結果ミュージックアプリが流す音楽が止まるといったことが考えられます。
音楽が止まる問題の対処
自分のアプリで音声再生を行ったとしても中断しないようにします。
一番簡単な方法はCategoryの変更です。
iOSには AudioSessionというものがあり、アプリやOS間での音声のコントロールをしています。
AudioSessionにはCategoryというものがあり、ここでサイレントスイッチONで無音になるか、他の音声の中断をするか、が決定されます。
このCategoryを、アプリが音声を発した場合に他の音声を中断しないように設定することでミュージックアプリの音声の中断を行わないようにします。
このCategoryのデフォルト値は .soloAmbient となっており、他の音楽を中断するものになっています。
ですので、このカテゴリを音声を中断しないものに変更すればいいわけです。
以下、簡単な表になりますが、他の音声を中断しないものは .ambient になるので、Categoryを.ambientに変更します。
| AVAudioSession.Category | サイレントスイッチONで無音になるか | 他の音声の中断をするか |
|---|---|---|
| .ambient | Yes | No |
| .soloAmbient (Default) | Yes | Yes |
| .playback | No | Yes |
| .record | No | Yes |
| .playAndRecord | No | Yes |
| .multiRoute | No | Yes |
公式のカテゴリの一覧はこちらです。
Categoryの変更
以下のコードでCategoryを変更すると、アプリの音声再生でミュージックアプリの音楽が中断するのを防げます。
do {
try AVAudioSession.sharedInstance().setCategory(.ambient)
try AVAudioSession.sharedInstance().setActive(true, options: [])
} catch {
}