2017-05-19 13 views
0

iOSでwebRTCを使用するSDKを使用してビデオ通話を許可するアプリを開発しています。他のVOIPコール(iOS)を検出するにはどうすればよいですか?

私のアプリがコールをインスタンス化した後に別のコールがインスタンス化されると、コールが終了してオーディオが復元されるまで、自分のアプリでコールの両方向にオーディオをミュートする必要があります。

VOIP通話を行う他の通話(WeChatやFacebook Messengerなど)を検出したいという問題が発生しました。

私はWeChatの場合、(AVAudioSessionの)共有オーディオセッションを中断することを利用してこの問題を解決しました。これを処理するコードは次のとおりです。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector 
    (audioSessionInterrupted:) 
... 

name:AVAudioSessionInterruptionNotification object:nil]; 
- (void) audioSessionInterrupted:(NSNotification*)notification 
{ 
    if(notification.name == AVAudioSessionInterruptionNotification) 
    { 
     NSDictionary* userInfo = notification.userInfo; 
     int result = userInfo[AVAudioSessionInterruptionTypeKey]; 
     if(result == AVAudioSessionInterruptionTypeBegan) 
     { 
      [[AVAudioSession sharedInstance] setActive:NO error:nil]; 
      [self setAudioEnabled:NO]; 
     } 
     else if (result == AVAudioSessionInterruptionTypeEnded) 
     { 
      [[AVAudioSession sharedInstance] setActive:YES error:nil]; 
      [self setAudioEnabled:YES]; 

     } 
    } 
} 

ただし、Facebook Messengerの場合、このメソッドは呼び出されません。私は、WeChatが共有オーディオセッションへの排他的アクセスを要求している可能性があることから、Facebook Messengerはオーディオをミックスするか、コールがインスタンス化されたときに別のオーディオセッションを使用するのに対し、私のアプリではオーディオセッションの中断を引き起こす可能性があると推測します。 。

私の質問は、おそらくCallKitフレームワークを使用して、他のVOIP呼び出しを検出する別の方法がありますか?私のアプリはCallKitを使用してユーザに着信コールを促し、着信/発信コールをiOS電話ログに記録します。

答えて

0

現在のすべてのネイティブコールを確認することをお勧めします。 CallKitを通じて登録されているすべてのコールはまた、ネイティブの呼び出しを考慮し、CoreTelephonyから、このオブジェクトの呼び出しをトリガーされます。

CTCallCenter *callCenter = [[CTCallCenter alloc] init]; 
callCenter.callEventHandler = ^(CTCall* call) { 
    //Native call changes are triggered here 
}; 

CallKitをサポートしていないアプリケーションからのVOIPコールを検出するために、これは困難です。 AVAudioUnitの変更をリッスンする可能性があります。