私が開発している iOS アプリでは、複数の電話を相互に接続し、それらのデバイス間で音声チャットできるようにしたいと考えています。
両方のデバイスが同じネットワーク上にある場合に機能します。これは非常に簡単で、私がやりたいことのほとんどは可能です。
しかし今、私はインターネットサポートを追加していますが、これはかなり面倒です. 最初に、セットアップした小さな Web サービスを使用して、デバイスを一致させる方法を説明します。
サーバ
- セッションモードの GKSessionModePeer を使用して、新しい GameKit セッションを開始します
- 作成したばかりのセッションでサーバーの「ピア ID」を見つけます
- 空いているポートに新しい CFSocketRef を作成し、接続を受け入れる準備を整えます
- 外部サーバーで実行されている Web サービスにピア ID とポート番号を送信します。
ウェブサービス
- Webservice はその情報を受け取り、クライアントの ID と IP アドレスとともにデータベースに格納します。
- ID をサーバーに送り返すと、ID が表示されます
クライアント
- ユーザーが GameKit の「オンライン」機能を使用してゲームを検索することを選択した場合、ユーザーに ID (サーバーが受け取る ID を入力する必要があります) を尋ねます。
- クライアントは、ID を提供する Web サービスに接続します。Web サービスは、サーバーのセッション (IP、ポート、ピア ID) に関する情報を返します。
- ユーザーは、ポート情報を使用して IP アドレスに接続し、サーバーとの入出力ストリームを設定しようとします。
私のネットワークは(外部ネットワークからの)着信接続とランダムポートを許可していないため、これはもちろん機能しません。
しかし今問題は、これをどのように解決するかです。2 つのデバイス間でピアツーピア接続をセットアップできるようにしたいのですが、これらのデバイスは同じネットワーク上にある可能性がありますが、別のネットワーク上にある可能性もあります。
これを行う方法を示すフレームワーク、例、または何かがありますか? 最初にサーバーに送信せずに、デバイスからデバイスにデータを送信できるようにしたいと考えています。