MultiPeerConnectivity 以编程方式
Posted
技术标签:
【中文标题】MultiPeerConnectivity 以编程方式【英文标题】:MultiPeerConnectivity programmatically 【发布时间】:2021-07-13 18:05:57 【问题描述】:我正在制作一个在手机之间传输数据的应用程序。如何在没有 MCBrowserViewController 的情况下以编程方式连接并接受来自另一台设备的连接请求
【问题讨论】:
【参考方案1】:我曾在多点连接框架中工作,希望能对您有所帮助。
第 1 步:
您可以使用 MCNearbyServiceAdvertiser 使用您的自定义服务类型为自己做广告,例如:
let advertiser = MCNearbyServiceAdvertiser.init(peer: *peerID*, discoveryInfo: *dict*, serviceType: *custom_service_type*)
设置代理并开始为自己做广告。
第 2 步:
在其他设备中,用户 MCNearbyServiceBrowser
let browser = MCNearbyServiceBrowser.init(peer: *peerID*,serviceType: *custom_service_type*)
设置代理并开始浏览同行用户。
第 3 步:
当浏览器在同一个Wi-Fi网络中发现一些用户具有相同的服务类型时,你会得到一个委托回调
func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?)
第 4 步:
手动尝试连接到对等体
browser.invitePeer(*peerID*, to: *session*, withContext: nil, timeout: 30)
第 5 步:
在第一个设备中,您将在委托方法中收到一个回调,说明对等设备要连接
func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void)
使用真值调用完成处理程序并共享您的会话
invitationHandler(true,*session*)
这里我们不需要任何用户交互。所有都以编程方式完成(这是您的要求)。
注意:
-
广告主和浏览器的服务类型必须相同。
确保您确认协议(MCNearbyServiceAdvertiserDelegate、MCNearbyServiceBrowserDelegate)。
确保在执行所有这些步骤之前已正确初始化会话。
【讨论】:
非常感谢。你帮了我很多。告诉我更多,您是否使用过方法“session.sendResourceAtURL(url as URL,withName:filePath.lastPathComponent,toPeer:peer)”? 我成功了,但我不知道当前进度状态如何发送数据 “session.sendResourceAtURL (url as URL, withName: filePath.lastPathComponent, toPeer: peer)”会返回一个Progress Object。您可以参考它并使用计时器来不断检查文件传输的进度。有关进度的更多信息,您可以参考 developer.apple.com/documentation/foundation/progress以上是关于MultiPeerConnectivity 以编程方式的主要内容,如果未能解决你的问题,请参考以下文章
Swift MultipeerConnectivity-invitePeer 总是以超时结束
MultipeerConnectivity MCPeerID 不符合 Codable
另一个对等方接收的PeerID对象与MultipeerConnectivity Framework中的原始对象不同
有没有办法通过 iOS/swift 中的蓝牙以编程方式连接 android 和 IOS 设备?