MultipeerConnectivity 对于开发者来说可能比较复杂。这个包旨在简化多设备互联体验的创建,同时仍然提供 Apple API 的全部功能。
这是一个 Swift Package,可以通过 Xcode 使用此仓库的 URL 进行安装
git@github.com:maxxfrazer/MultipeerHelper.git
有关如何使用 Xcode 添加 Swift Package 的更多信息,请参阅 Apple 的官方文档。
要使用这个包,您只需导入 MultipeerHelper
并初始化该对象
self.multipeerHelp = MultipeerHelper(
serviceName: "helper-test"
)
由于 MultipeerConnectivity 会在您的本地网络中查找要连接的其他设备,因此自 iOS 14 以来,需要包含一些新内容。
首先,在您的应用程序的 Info.plist 中包含键 NSLocalNetworkUsageDescription
,并附上一段简短的文本,说明您为什么需要使用本地网络。例如“此应用程序需要访问本地网络才能找到对手。”
除了上述内容之外,您还需要添加另一个键 NSBonjourServices
。Bonjour 服务是一个 Bonjour 服务类型数组。例如,如果您的 serviceName 是“helper-test”,您将需要添加 _helper-test._tcp
和 _helper-test._udp
。
上面两个键都包含在示例项目中。
在此处查看完整文档
https://maxxfrazer.github.io/MultipeerHelper/documentation/multipeerhelper/
要将其扩展到 RealityKit 的同步服务,只需添加以下内容
self.arView.scene.synchronizationService = self.multipeerHelp.syncService
并且还要确保您的 ARConfiguration 的 isCollaborationEnabled 属性设置为 true。
要确保 RealityKit 的 synchronizationService 正常运行,您必须确保安装在任何两个设备上的 RealityKit 版本兼容。
默认情况下,任何使用 MultipeerHelper 且可以安装 RealityKit 的操作系统(iOS、iPadOS 和 macOS)都会向 discoveryInfo 添加一个键。 为了便于使用,您可以将 shouldSendJoinRequest
方法添加到您的 MultipeerHelperDelegate
,并使用任何继承 MultipeerHelperDelegate
的类都可以访问的 checkPeerToken
。 这是一个例子
extension RealityViewController: MultipeerHelperDelegate {
func shouldSendJoinRequest(
_ peer: MCPeerID,
with discoveryInfo: [String: String]?
) -> Bool {
self.checkPeerToken(with: discoveryInfo)
}
}
此方法在示例项目中使用。
这是要发布或搜索的服务类型。 由于 MultipeerConnectivity 的使用方式,它应具有以下限制
这让服务知道它应该充当服务host
(广告商)、peer
(浏览器),或者在无关紧要的情况下,充当both
。 此参数的默认值为both
,在这种情况下,所有设备都希望在没有问题的情况下相互连接。
设备在网络上的字符串名称。
encryptionPreference 是通过网络发送的数据的加密方式。
此委托对象将继承 MultipeerHelperDelegate
协议,该协议可用于处理网络中所有的数据传输以及查看其他人何时加入和离开。