3

アプリでマルチピア接続機能を使用したいと考えています。アプリの機能の簡単な紹介: アプリは、アプリを (バックグラウンドで) 実行している他のデバイスをスキャンし、それらに接続して、少しのデータを転送する必要があります。ユーザーとの対話なしですべて。

質問: マルチピアを使用して他のデバイスに接続できますが、別のデバイスが接続を望んでいるというアラート ビューを表示したり、ユーザーに接続を受け入れるか拒否させたりする必要はありませんか? 他のデバイスからのすべての着信接続をプログラムで受け入れる方法はありますか? もしそうなら、どのように?

よろしくお願いします!

4

1 に答える 1

9

ここで 2 つの質問があります。

アプリは、アプリを実行している他のデバイスをスキャンする必要があります (バックグラウンドで)

ここでの答えは NO です。MPC はバックグラウンドでは動作しません (この応答を参照してください) 。

2 番目の質問:

マルチピアを使用して他のデバイスに接続できますが、アラートを表示する必要はありません

答えはイエスです。必要なすべての詳細は、アップルのドキュメントに記載されています。ここに私がしていることのいくつかのスニペットがあります:

1 つのデバイスで - ブラウザを起動します

_serviceBrowser = [[MCNearbyServiceBrowser alloc] initWithPeer:_peerID
                                                       serviceType:_sessionName];

[_serviceBrowser startBrowsingForPeers];

他のデバイスで - 広告主を開始します

_serviceAdvertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:_peerID
                                                           discoveryInfo:nil
                                                             serviceType:_sessionName];
[_serviceAdvertiser startAdvertisingPeer];

これらのサービスはデリゲート関数を実装して、接続の可能性をアプリに通知します。ここで、ブラウザは広告主に通知され、ピアをセッションに参加するように招待します

- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID     withDiscoveryInfo:(NSDictionary *)info
{
    [browser invitePeer:peerID toSession:_session withContext:nil timeout:30.0];

}

その後、広告主は応答します。

- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:    (MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler
{
    invitationHandler(YES, _session);
}

これで、セッション デリゲート コールを受信して​​、ピア接続の状態を通知します。この時点で、接続されているはずです。「実際の」ユーザー操作は必要ありません。

- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state
于 2014-03-15T22:35:10.133 に答える