Ios XCode Swift-MultiPeerConnectivity/McAdvertiseAssistant未显示连接的接受/拒绝对话
目前正在尝试使多点连接正常工作。当前的问题是会话主机。加入会话的视图控制器工作正常,因为它显示主机的名称并允许我尝试连接,但是没有在主机设备上显示接受或拒绝的对话框,什么也没有发生,等待几秒钟后,尝试加入会话的设备超时,并显示主机已拒绝。我不明白我可能做错了什么,下面代码的相关部分 查看加入会话的控制器:Ios XCode Swift-MultiPeerConnectivity/McAdvertiseAssistant未显示连接的接受/拒绝对话,ios,swift,xcode,Ios,Swift,Xcode,目前正在尝试使多点连接正常工作。当前的问题是会话主机。加入会话的视图控制器工作正常,因为它显示主机的名称并允许我尝试连接,但是没有在主机设备上显示接受或拒绝的对话框,什么也没有发生,等待几秒钟后,尝试加入会话的设备超时,并显示主机已拒绝。我不明白我可能做错了什么,下面代码的相关部分 查看加入会话的控制器: import MultipeerConnectivity class DisplayActualViewController: UIViewController, MCSessionDele
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)")
}
}
查看承载会话的控制器:
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)")
}
}
这对我很有用:
从使用SceneDelegate降级,不要使用UIScene
- 从Info.plist中完全删除“应用程序场景清单”条目
- 移除SceneDelegate类,并移除AppDelegate中与场景相关的方法
- 将“var窗口:UIWindow?”添加到AppDelegate类
iOS 13下的应用程序将具有与iOS 12相同的生命周期。而且,多电话连接应该按照最初设计的方式工作。不会显示用于接受邀请的MCAdvertiseAssistant警报。因此,邀请超时,您会收到拒绝的回复 您可以通过将McAdvertiseAssistant替换为MCNearbyServiceAdvertiser来解决此问题 以下是一种通过3个步骤实现的方法:
var mcNearbyServiceAdvertiser:mcNearbyServiceAdvertiser!
func startHosting(){
mcnearbyservicecadvertiser=mcnearbyservicecadvertiser(对等方:peerID,discoveryInfo:nil,服务类型:“硬件测试”)
mcNearbyServiceAdvertiser.delegate=self
mcNearbyServiceAdvertiser.startAdvertisingPeer()
}
func广告商(\uAdvertiser:mcnearbyservicecavertiser,direceiveinvitationfrompeer peerID:mcpeerind,上下文:Data?,invitationHandler:@escaping(Bool,MCSession?->Void){
让appName=Bundle.main.infoDictionary?[“CbundLename”]作为?字符串??“收到邀请”
让ac=UIAlertController(标题:appName,消息:“\(peerID.displayName)”想要连接。”,首选样式:。警报)
让declineAction=UIAlertAction(标题:“拒绝”,样式:。取消){[weak self]\uUin invitationHandler(false,self?.mcSession)}
让acceptAction=UIAlertAction(标题:“Accept”,样式:。默认值){[weak self]\uUin invitationHandler(true,self?.mcSession)}
ac.addAction(去线性化)
ac.addAction(验收)
当前(ac,动画:真)
}