僕が開発したiOSアプリにユーザーから
「AppleのMusicアプリをバックグラウンド音楽再生中にアプリを使用したらAppleMusicの音楽が止まってしまう」
という問い合わせがありました。
実際に確認してみると、確かにAppleMusicアプリで音楽のバックグラウンド再生中にアプリを操作すると音楽が止まることを確認できました。
そのアプリではBGMはありませんが、ボタンタップ時の効果音はついており、バックグラウンドで音楽を再生しながらアプリを使うという人が結構いるようなので、解決方法を検討しました。
今回はこの問題についての調査結果と、対処法についてまとめておこうと思います。
AVAudioPlayerとミュージックアプリのバックグラウンド再生は共存できないっぽい
僕のアプリでは音楽再生の為にAVAudioPlayerを使っていましたが、調べて見ると、AVAudioPlayerの再生でバックグラウンドミュージックが止まってしまったという現象に遭遇した人は他にもいるようです。
調査を進めた結果、以下の記事にあった回答が参考になりました。
You can't run AVAudioPlayer and the iPod player or MPMusicPlayer or MPMoviePlayer at the same time, without doing a bit more work. If you want easy, then use Audio Toolbox's System Sounds.
If you want to do some extra work, then you should look at Audio Sessions:
要は、AVAudioPlayerとAppleのMusicアプリなどで使われているMPMusicPlayerは同時に動かすことができないということのようです。
僕のアプリでは、AVAudioPlayerを再生しようとするとバックグラウンド再生中のアプリが停止するのですが、音楽再生しなければ(AVAudioPlayerで再生しなければ)バックグラウンド再生中のアプリはそのまま再生されるので、上記内容の信憑性は高そうです。
アプリのバックグラウンドで音楽再生中にAVAudioPlayerを再生させると音楽が止まる現象の対処法
バックグラウンド再生中のアプリが止まる原因はわかったので、あとは対処法です。
対処法を調べた結果、2つの方法がありそうです。
1.AVAudioSessionを使う
一つ目は、AVAudioSessionを使う方法です。
Apple Developer Documentation
今回は採用しなかったので使ってませんが、調べた感じだと、AVAudioSessionを使えばBackground再生中のアプリがあっても普通に音を再生できそうです。
以下あたりが参考になりそうです。
blog.meteor.ne.jp
2.バックグラウンド再生中の音楽アプリがあるかチェックする
二つ目は、バックグラウンド再生中の音楽アプリがあるか「isOtherAudioPlaying 」でチェックする方法です。
if AVAudioSession.sharedInstance().isOtherAudioPlaying { // バックグラウンド再生中 return }
バックグラウンド再生中のアプリがあるかチェックして、もしあったら音を鳴らさないようにすればBackground再生中のアプリの音楽が止まらないようにできそうです。
簡単に対処できるので、今回はこの方法で対応しました。
バックグラウンドで再生中の音楽アプリがあるかチェックする方法があったのは今回初めて知りました。
長いことiOSアプリ開発を続けてますが、まだまだ知らないことがたくさんあるんだなーと思います。