私が取り組んでいるアプリでは、wifiネットワークを使用して音声を送受信するため、wifiを常にオンにする必要があります。次に、オーディオを再生します。ユーザーが停止することを選択するまで、これを継続的に行う必要があります。
問題: iOSは30分後にWiFiをオフにするため、ソケットが閉じてAudioQueuesが停止します。Appleのドキュメントからの抜粋は次のとおりです。
Wi-Fiハードウェアが過度の電力を使用するのを防ぐために、iOSにはタイマーが組み込まれており、実行中のアプリがUIRequiresPersistentWiFiキーを介して使用を要求していない場合、30分後にハードウェアを完全にオフにします。ユーザーがキーを含むアプリを起動すると、iOSはアプリのライフサイクルの間タイマーを効果的に無効にします。ただし、そのアプリが終了または一時停止されるとすぐに、システムはタイマーを再度有効にします。
注: UIRequiresPersistentWiFiの値がtrueの場合でも、デバイスがアイドル状態のとき(つまり、画面がロックされているとき)は効果がないことに注意してください。アプリは非アクティブと見なされ、一部のレベルでは機能する可能性がありますが、Wi-Fi接続はありません。
すでに実装されているもの:
オーディオセッションはデバイスでアクティブ化されます。ユーザーがオーディオの停止を選択するまで、または接続が失われてAudioQueuesも停止されるまで、この方法が維持されます。
UIRequiresPersistentWiFiが.plistファイルでtrueに設定されている
到達可能性APIは、接続損失を検出し、必要な処理を行うために実装されています。
.plistファイルで「アプリケーションがバックグラウンドで実行されない」が「false」に設定されている
「必要なバックグラウンドモード」には、.plistファイルの配列に「アプリがオーディオを再生します」という項目があります。
NSStreamNetworkServiceTypeVoiceforKeyは、両方のデバイスのソケットのプロパティNSStreamNetworkServiceTypeに設定されます。
ソケットでkCFBooleanTrueの値に設定されたkCFStreamPropertyNoCellularプロパティは役に立ちません
役立つ唯一の設定は、NSStreamNetworkServiceTypeをNSStreamNetworkServiceTypeVoIPに設定し、.plistファイルの[必須のバックグラウンドモード]フィールドに[アプリがVoiceoverIPサービスを提供する]を追加することです。ただし、Appleは、アプリにVoIPサービスを実装していないためにアプリを拒否します。
私はこの問題についてAppleDTSと話していましたが、彼らによると、この問題を支援するAPIレベルのサポートはありません。ただし、この主張については疑問があります。この機能を必要とするアプリがアプリストアにいくつかあります(たとえば、Pandora)。