根据 iOS 14 阻止访问本地网络的新政策,需要 com.apple.developer.networking.multicast 特殊权限才能访问本地网络,并且此访问应在授权对话框中由用户确认。尽管这个新功能没有完整记录,但苹果工程师在论坛中表示,只有当应用程序尝试发送流量时才会触发此授权对话框弹出窗口,从而导致仅读取网络的应用程序出现问题,如iOS 14 如何触发本地网络对话框并检查用户答案? https://stackoverflow.com/questions/63940427/ios-14-how-to-trigger-local-network-dialog-and-check-user-answer
不幸的是,发送一些数据来触发授权对话框的建议在我们的例子中似乎不起作用,因为我们从未出现过弹出对话框。
我们的应用程序通常只接收 UDP 广播(除少数情况外不传输)。我们已经获得了 com.apple.developer.networking.multicast 权利,已将其添加到我们的应用程序权利中,已在 Info.plist 中添加了请求的 NSLocalNetworkUsageDescription ,并使用包含此权利的配置文件的 XCode 12.0 手动签署我们的应用程序(在这种情况下需要手动代码签名,如中所示https://developer.apple.com/forums/thread/656773?answerId=628537022 https://developer.apple.com/forums/thread/656773?answerId=628537022)。从那时起,情况有所改善,因为在添加权利之前被完全阻止的 UDP 数据包接收有时开始工作,但不幸的是并非总是如此(iOS 14.0.1 上的情况似乎比 iOS 14 上更糟糕,iPhone 上比 iPad 上更糟糕)。
最重要的是,我们从未显示授权对话框,并且我们的应用程序在隐私/本地网络中未显示为授权(即使 UDP 接收工作时)。我们怀疑这可能是造成这种虚假接收问题的原因。由于授权对话框似乎仅在发送数据时显示,因此我们将应用程序配置为将数据发送到本地网络以尝试触发对话框,使用以下所有方法:
- TcpSocket 类(使用 CFStreamCreatePairWithSocketToHost)连接到端口 80 上的 192.168.1.1 并发送几个字节(该地址有一个设备)
- 使用 GCDAsyncSocket 连接并向同一地址/端口发送测试 TCP 数据包
- 使用 GCDAsyncUdpSocket 创建 UDP 套接字,使其能够广播,然后加入MulticastGroup 224.0.1.0 并在端口 80 上广播测试 UDP 数据包。
- 使用 GCDAsyncUdpSocket 创建 UDP 套接字,使其能够广播,然后在端口 80 上向 255.255.255.255 广播测试 UDP 数据包。
- 重用 Apple 文章中的示例(https://developer.apple.com/news/?id=0oi77447 https://developer.apple.com/news/?id=0oi77447) 使用 NWConnectionGroup 发送多播数据包到 224.0.1.0
- 最后使用 LocalNetworkPermissionService 类中所示的 triggerDialog() 方法iOS 14 如何触发本地网络对话框并检查用户答案? https://stackoverflow.com/q/63940427/6057764
上述操作均未触发 iOS 14.0 和 iOS 14.0.1 上的授权对话框,并且我们的应用程序仍未在“隐私/本地网络”中列为授权,并且存在 UDP 数据包的虚假接收。
如果有人遇到同样的问题并找到解决方案,非常感谢您的建议。
感谢@Columbo 和 Apple 的帮助,尽管问题的根本原因尚未完全清楚,但已经找到了解决方案。
我们的应用程序是使用 iOS 版本部署目标 9.0 构建的,因为我们试图保持与旧设备的兼容性。部署目标低于 12.0 似乎可能会导致网络隐私管理出现问题。当时的解决方案是:
- 将 iOS 部署目标更新到 12.0 或更高版本后重建应用程序。
- 对于已安装以前版本应用程序的所有 iOS 14.0 和 14.0.1 设备,完全删除该应用程序并再次安装(更新应用程序还不够,仍然不显示网络隐私警报)。
当然,对于必须从头开始重新安装应用程序并再次配置的用户来说,此过程并不理想。如果 iOS 的未来版本可以避免此问题,我将更新此线程。
Update:使用 iOS 14.2 时,即使在升级后(无需完全删除和重新安装),应用程序也能正确触发网络隐私警报。然后,我们建议用户在升级我们的应用程序之前升级到 14.2。我们将部署目标保持在 12.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)