问题描述
我无法理解在 iOS 14 上使用 Bonjour 发现本地网络服务的隐私约束。这是我的发现:
- 使用 NetServiceBrowser,我可以使用以下方式发现服务:
browser.searchForServices(ofType: "_services._dns-sd._udp",inDomain: "local.")
我必须向 .plist 文件添加几个键,但它有效。 - 但是,如果我转向
NWBrowser
,并尝试运行相同的请求,我会收到一个错误:
nw_browser_fail_on_dns_error_locked [B1] Invalid meta query type specified.
nw_browser_start_dns_browser_locked failed: BadParam(-65540)
我收集到,这意味着我需要多播权限。
现在,问题是,如果我可以使用 NetServiceBrowser
而不是 NWBrowser
,我为什么要费尽心思向 Apple 请求多播授权? NetServiceBrowser
不会违背获取多播权限的目的吗?
解决方法
根据 docs,此错误意味着您向 NWBrowser
传递了无效值 - 很可能是您尝试发现的服务的格式。
您尚未发布 NWBrowser
代码,但例如,格式错误的服务(例如 _example_.tcp
)可能会导致您看到的错误。确保它采用正确的格式,应该类似于 _example._tcp.
。
您需要做的另一件事是修改您的 Info.plist 文件并添加两个键:
-
Bonjour Services
- 这是一个数组,第一项应该是您尝试发现的服务,在我的示例中,它是_example._tcp.
-
Privacy - Local Network Usage Description
- 一个解释文本,当您使用NWBrowser
开始发现时,该文本将显示给用户。
现在关于您提到的权利:只有扫描网络上所有服务的应用程序才需要它,而不是像您的情况那样的特定服务。我鼓励您观看this video,它解释了我在这里写的所有内容。
最后,为什么要使用 NWBrowser
而不是 NetServiceBrowser
?这是一个很好的问题,我也在努力找出答案?