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 设备?

框架未正确导入? 'MultipeerConnectivity' 上的 Mach-O 链接器

iOS MultipeerConnectivity