マルチピア接続フレームワークと Nearby Services (ブラウザーと広告主の両方) を使用して、デバイス間で自動接続して少量のデータを交換するアプリを実装します。
すべての接続の詳細を処理するセッション マネージャーを作成しました。そのデリゲートは、データを受信したときに UI の更新を処理するためのビュー コントローラーです。
セッション マネージャーは以下を構築します。
- サービス アドバタイザー、デリゲートはセッション マネージャーです
- デリゲートがセッション マネージャーでもあるサービス ブラウザー
2 つのデバイス (1 つは Xcode でログを取得し、もう 1 つはスタンドアロン) でアプリを起動すると、サービス ブラウザーのデリゲートに対応するメソッドを介して Found Peer メッセージを受け取ります。
別のメッセージで述べたように、MCPeerID の displayName プロパティ (ローカルと受信ピアの両方) を比較して、どちらが招待を送信するかを決定し、相互招待を回避します。
ここの別のメッセージで述べたように、「オプションの」MCSessionデリゲートメソッドも追加しました- (void)session:didReceiveCertificate:fromPeer:certificateHandler:
ただし、(void)advertiser:didReceiveInvitationFromPeer:withContext:invitationHandler:
MCNearbyServiceAdvertiser のデリゲート メソッドは呼び出されません。(void)session:peer:didChangeState:
メソッドでタイムアウトを設定した後、MCSession デリゲート メソッドによって受信される NotConnected メッセージのみがありますinvitePeer:toSession:withContext:timeout:
。
提案されたさまざまなオプションで:
- セッションはセキュリティ nil および MCEncryptionNone で初期化されます。
- discoveryInfo は nil です。
- 招待状で送信される context は、NSData としてアーカイブされた単なる短い文字列です。
トラブルシューティングするには:
- すべてのアイテムが存在することを確認しました (セッションとそのデリゲート、広告主とそのデリゲート)。
- アプリがアクティブである限り、Service Browser と Advertiser が停止することはありません。
どこを見渡せばいいのかわからない!