任何帮助实现这种情况的帮助。


我的“广告商”对等方需要发送短文本作为DiscoveryInfo。
然后,“浏览器”对等方将在表中显示所有可用广告商的DisplayName和DiscoveryInfo。


我已经编写了一个自定义SessionContainer,它可以工作,但是我不知道如何由广告客户发送DiscoveryInfo并将其显示在浏览器对等体中。 (我正在使用MCNearbyServiceBrowser)

任何帮助,将不胜感激!

最佳答案

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];

10-06 10:19