我看过这个 Q/A What triggers,但这不是我想要的。我也阅读了这个网络隐私权限检查,但没有答案。我还在此处搜索可以帮助我的任何方法或类:Network,但再次没有运气。
本地网络授权有一个新对话框,用户可以在其中允许/不允许“查找并连接到本地网络上的设备”。
但是我正在努力寻找任何 API 来如何触发此弹出窗口以及如何检查是否授予访问权限(例如,在 中AVCapture,我可以检查 的授权状态AVMediaType)。
谢谢!
遵循 iOS 14 阻止访问本地网络的新策略,访问本地网络需要 com.apple.developer.networking.multicast 特殊权限,并且此访问应由用户在授权对话框中确认。虽然这个新功能没有被彻底记录下来,但苹果工程师在论坛上表示,这个授权对话框弹出窗口只在应用尝试发送流量时触发,导致应用只读取网络的问题,如iOS 14 如何触发本地网络对话并检查用户回答?
不幸的是,发送一些数据以触发授权对话框的建议在我们的案例中似乎不起作用,因为我们从未出现过弹出对话框。
我们的应用程序通常只接收 UDP 广播(除少数情况外不发送)。我们已经获得了 com.apple.developer.networking.multicast 权利,将其添加到我们的应用程序权利中,在我们的 Info.plist 中添加了请求的 NSLocalNetworkUsageDescription 并使用 XCode 12.0 手动签署我们的应用程序,并使用包含此权利的配置文件(在这种情况下需要手动代码签名,如https://developer.apple.com/forums/thread/656773?answerId=628537022 中所示)。从那时起,情况有所改善,因为在添加权利之前完全阻止的 UDP 数据包接收有时开始工作,但不幸的是并非总是如此(iOS 14.0.1 上的情况似乎比 iOS 14 上和 iPhone 上比 iPad 上更糟)。
最重要的是,我们从未显示授权对话框,我们的应用程序在隐私/本地网络中未显示为已授权(即使 UDP 接收有效)。我们怀疑这可能是造成这种虚假接收问题的原因。由于似乎授权对话框只在发送数据时显示,我们配置我们的应用程序将数据发送到本地网络以尝试触发对话框,使用以下所有方法: