iOS Multipeer Connectivity - 在自定义MCNearbyServiceBrowser中显示DiscoveryInfo

时间:2014-07-28 02:04:29

标签: ios multipeer-connectivity

对于实施此方案的任何帮助将不胜感激。

  1. 我的“广告客户”同行需要发送一个简短的文字作为DiscoveryInfo。

  2. 然后“浏览器”对等方将显示表格中所有可用广告商的DisplayName和DiscoveryInfo。

  3. 我已经编写了一个自定义的SessionContainer并且它可以正常工作,但我不知道如何通过广告商发送DiscoveryInfo并将其显示在浏览器对等中。 (我正在使用MCNearbyServiceBrowser)

    任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

MCBrowserViewController提供标准用户界面,允许用户选择附近的对等方添加到会话中。

如果您想要自定义浏览器,则应使用MCNearbyServiceBrowser。这使您的应用程序可以通过编程方式搜索附近设备,这些设备包含支持特定类型(您指定的)会话的应用程序。

创建浏览器如下所示:

self.thisPeer = [[MCPeerID alloc] initWithDisplayName:@"Peer Name"];
self.session = [[MCSession alloc] initWithPeer:self.thisPeer ];
self.session.delegate = self;

self.serviceBrowser = [[MCNearbyServiceBrowser alloc] initWithPeer:self.thisPeer serviceType:<lowercase 1-15 chars>
self.serviceBrowser.delegate = self;
[self.serviceBrowser startBrowsingForPeers];

广告客户的创建如下所示:

NSString *deviceName = [[UIDevice currentDevice] name];
MCPeerID *peerID = [[MCPeerID alloc] initWithDisplayName:deviceName];
self.session = [[MCSession alloc] initWithPeer:peerID];
self.session.delegate = self;

NSMutableDictionary *info = [NSMutableDictionary dictionaryWithObject:@"other info" forKey:@"peerInfo"];
self.advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:peerID discoveryInfo:info serviceType:<same service name as browser>];
self.advertiser.delegate = self;
[self.advertiser startAdvertisingPeer];

当浏览器听到附近的对等方时,会调用其委托方法:

- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info {
    NSLog(@"Found a nearby advertising peer %@ withDiscoveryInfo %@", peerID, info);
    [[NSNotificationCenter defaultCenter] postNotificationName:@"peerConnectionChanged" object:info];
}

在这里,您可能会发布表视图控制器可以监听的通知。然后,您的UITableView可以显示discoveryInfo字典中包含的任何信息。请注意,您需要切换到主线程以更新UI

当您准备邀请对等方加入会话时,您可以致电

[self.serviceBrowser invitePeer:peerID toSession:self.session withContext:nil timeout:30];