在 iOS 14 上通过 Bonjour 发现服务

问题描述

我无法理解在 iOS 14 上使用 Bonjour 发现本地网络服务的隐私约束。这是我的发现:

  1. 使用 NetServiceBrowser,我可以使用以下方式发现服务: browser.searchForServices(ofType: "_services._dns-sd._udp",inDomain: "local.") 我必须向 .plist 文件添加几个键,但它有效。
  2. 但是,如果我转向 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?这是一个很好的问题,我也在努力找出答案?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...