В данный момент пытаюсь заставить MultiPeerConnectivity работать. Текущая проблема связана с хостом сеанса. Контроллер представления, который присоединяется к сеансу, работает правильно, так как он показывает имя хоста и позволяет мне попытаться подключиться, однако вместо появления диалога для принятия или отклонения на хост-устройстве ничего не происходит, и через несколько секунд ожидания, время ожидания устройства, пытающегося присоединиться к сеансу, истекает и показывает, что узел отказался. Я не понимаю, что я делаю неправильно, соответствующую часть приведенного ниже кода.
Контроллер представления присоединяется к сеансу:
import MultipeerConnectivity
class DisplayActualViewController: UIViewController, MCSessionDelegate, MCBrowserViewControllerDelegate {
var peerID: MCPeerID!
var mcSession: MCSession!
var mcAdvertiserAssistant: MCAdvertiserAssistant!
override func viewDidLoad() {
super.viewDidLoad()
peerID = MCPeerID(displayName: UIDevice.current.name)
mcSession = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
mcSession.delegate = self
}
func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {
}
func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {
}
func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {
}
func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
dismiss(animated: true)
}
func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
dismiss(animated: true)
}
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
switch state {
case MCSessionState.connected:
print("Connected: \(peerID.displayName)")
case MCSessionState.connecting:
print("Connecting: \(peerID.displayName)")
case MCSessionState.notConnected:
print("Not Connected: \(peerID.displayName)")
}
}
func joinSession() {
let mcBrowser = MCBrowserViewController(serviceType: "hws-testing", session: mcSession)
mcBrowser.delegate = self
present(mcBrowser, animated: true)
}
Контроллер представления, на котором размещен сеанс:
import MultipeerConnectivity
class CounterViewController: UIViewController, MCSessionDelegate, MCBrowserViewControllerDelegate {
var peerID = MCPeerID(displayName: UIDevice.current.name)
var mcSession: MCSession!
var mcAdvertiserAssistant: MCAdvertiserAssistant!
override func viewDidLoad() {
super.viewDidLoad()
mcSession = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
mcSession.delegate = self
startHosting()
}
func startHosting() {
mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "hws-testing", discoveryInfo: nil, session: mcSession)
mcAdvertiserAssistant.start()
}
func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {
}
func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {
}
func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {
}
func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
}
func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
dismiss(animated: true)
}
func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
dismiss(animated: true)
}
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
switch state {
case MCSessionState.connected:
print("Connected: \(peerID.displayName)")
case MCSessionState.connecting:
print("Connecting: \(peerID.displayName)")
case MCSessionState.notConnected:
print("Not Connected: \(peerID.displayName)")
}
}