ここで 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