gpt4 book ai didi

ios - 如何使用 iOS 14 触发多播权限的本地网络对话授权

转载 作者:行者123 更新时间:2023-12-03 14:31:37 32 4
gpt4 key购买 nike

遵循 iOS 14 阻止访问本地网络的新策略,访问本地网络需要 com.apple.developer.networking.multicast 特殊权限,并且此访问应由用户在授权对话框中确认。虽然这个新功能没有完全记录,但 Apple 工程师在论坛中指出,只有当应用尝试发送流量时才会触发这个授权对话框弹出窗口,导致应用只读取网络的问题,如 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 所示)。从那时起,情况有所改善,因为在添加权利之前完全阻止的 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 上将测试 UDP 数据包广播到 255.255.255.255。
  • 重用 Apple 文章 ( https://developer.apple.com/news/?id=0oi77447 ) 中的示例,使用 NWConnectionGroup 将多播数据包发送到 224.0.1.0
  • 最后使用 iOS 14 How to trigger Local Network dialog and check user answer? 中指示的 LocalNetworkPermissionService 类的 triggerDialog() 方法

  • 上述操作均未触发 iOS 14.0 和 iOS 14.0.1 上的授权对话框,我们的应用程序仍未在隐私/本地网络中列为已授权,虚假接收 UDP 数据包。
    如果有人遇到同样的问题并找到了解决方案,非常感谢您的建议。

    最佳答案

    感谢@Columbo 和 Apple 的帮助,已经找到了解决方案,尽管尚未完全了解问题的根本原因。
    我们的应用程序是使用 9.0 的 iOS 发布部署目标构建的,因为我们试图保持与旧设备的兼容性。似乎低于 12.0 的部署目标可能会导致网络隐私管理出现问题。当时的解决办法是:

  • 在将 iOS 部署目标更新到 12.0 或更高版本后重建应用程序。
  • 对于已经安装了之前版本的应用程序的所有 iOS 14.0 和 14.0.1 设备,完全删除应用程序并重新安装(更新应用程序是不够的,网络隐私警报仍未显示)。

  • 当然,此过程对于必须从头重新安装应用程序并再次配置的用户来说并不理想。如果 future 版本的 iOS 避免了这个问题,我会更新这个线程。
    更新:使用 iOS 14.2 时,即使升级后应用程序也能正确触发网络隐私警报(无需完全删除和重新安装)。然后我们建议我们的用户在升级我们的应用程序之前升级到 14.2。我们将部署目标保持在 12.0

    关于ios - 如何使用 iOS 14 触发多播权限的本地网络对话授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64308595/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com