4

アプリがバックグラウンドにある間、「生きている」ソケットを持つためのすべての要件があると思います。つまり、次のようになります。

  • 私のアプリケーションには、バックグラウンド モードとして voip と audio があります。
  • 「バックグラウンドで実行」プロパティを有効にしてCFReadStreamsを使用することになっているSIPライブラリとしてPJSIPを使用しています
  • アプリは TCP を使用して SIP サーバーとの接続を確立しています。

アプリケーションがバックグラウンドに送信されると、一定期間ごとに「keepAlive」メッセージを送信するバックグラウンド ハンドラーが追加されます。

そのキープアライブは機能しているようです。サーバーのログを確認すると、アプリケーションがフォアグラウンドでなくてもメッセージがどのように到着するかがわかります。

問題 (および質問) は、アプリケーションがバックグラウンドにある間、電話を受けないことです。

ソケットは生きているようで、フォアグラウンドでアプリを起動していない状態で携帯電話に電話をかけても何も起こりませんが、自分でアプリを起動すると、通話は自動的に検出されます。

ありがとう :)

4

2 に答える 2

4

問題が見つかりました。

現在の構成では、サーバーは別の接続を使用して、電話から最初のREGISTER要求を送信するために使用された最初のTCPソケットからINVITE要求を送信しました。

2つのソケットが異なるため、オペレーティングシステムはアプリケーションをウェイクアップしませんでした。

電話が最初のREGISTERを送信するために使用した最初のソケットを再利用するようにサーバー(この場合はKamailio)を構成すると、シームレスに機能します。

デフォルトでは、SIPサーバーは電話に送信するINVITE要求ごとに新しいソケットを作成するようです。この状況は、iPhoneのバックグラウンドモデルにとって問題です。

于 2011-09-27T10:21:13.537 に答える
0

再確認するために、これを読んだことがあります: http://trac.pjsip.org/repos/wiki/Getting-Started/iPhone#UnabletoacceptincomingcallinbackgroundmodeiOS4

また、Subversion リポジトリの最新の 1.x ブランチで試してみてください。iOS サポートにいくつかの修正が加えられています。

于 2011-09-22T20:23:54.260 に答える