对于实施此方案的任何帮助将不胜感激。
我的“广告客户”同行需要发送一个简短的文字作为DiscoveryInfo。
然后“浏览器”对等方将显示表格中所有可用广告商的DisplayName和DiscoveryInfo。
我已经编写了一个自定义的SessionContainer并且它可以正常工作,但我不知道如何通过广告商发送DiscoveryInfo并将其显示在浏览器对等中。 (我正在使用MCNearbyServiceBrowser)
任何帮助将不胜感激!
答案 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];