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

2024-02-29

根据 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(使用前将#替换为@)

如何使用 iOS 14 触发多播授权的本地网络对话授权 的相关文章

  • Python UPnP/IGD 客户端实现?

    我正在寻找一个开源实现UPnP http elinux org UPnPPython 中的客户端 更具体地说是它的互联网网关设备 http en wikipedia org wiki Internet Gateway Device Prot
  • 使用自动布局时 UIScrollview 的中心内容

    我在项目中使用自动布局 并且有一个滚动视图 其中有一个居中的按钮 我已经让滚动视图滚动 但不占据整个屏幕 我尝试按照此处的教程进行操作 https developer apple com library ios technotes tn21
  • xcode 6 资产目录 iPhone 6

    这个问题还没有得到解答 使用资产目录时 特定于设备 非通用 选项为 1x 2x r 2x 3x 1x 是不必要的 因为它不是视网膜 2x 是 ip4 的最佳选择 分辨率为 640x960 r 2x 适合 ip5 分辨率为 640x1136
  • sizeToFit 运行异常

    我有一段代码 每次发生后端数据库更改时都会执行 本质上我在父视图中有一个标签 标签由许多状态消息之一更新 每个状态消息位于不同的行上 并以换行符 n 结尾 每条状态消息只能在一行上 并且不能过多 我遇到的问题是 当视图首次重新加载时 一切正
  • 与自定义键盘扩展进行通信,主机应用程序无法在设备中运行,但可以在模拟器中运行

    我正在使用自定义键盘扩展 这几乎完成了 但当我与扩展和我的主机应用程序通信数据时 我只是面临设备问题 该应用程序在设备中没有工作 但在模拟器中工作也是如此 我的代码如下 HostApp 视图控制器 void viewDidLoad defa
  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • UILongPressGestureRecognizer 不起作用,但将其替换为 UITapGestureRecognizer 效果很好。为什么?

    我有一个UIImageView with a UILongPressGestureRecognizer无论我如何配置手势识别器 似乎都不会检测到长按手势 但是 如果我把它换成UITapGestureRecognizer that工作得很好
  • 添加 AFNetworking 后出现 APPLE MACH-O 链接错误

    只是将 AFNetworking 添加到我的项目中 在 B R 后 我收到如下错误 Undefined symbols for architecture i386 SecCertificateCopyData referenced from
  • “EXC_BAD_ACCESS”与“分段错误”。两者实际上相同吗?

    在我的前几个虚拟应用程序 用于学习时练习 中 我遇到了很多EXC BAD ACCESS 这以某种方式告诉我错误访问是 您正在触摸 访问一个不应该的对象 因为它尚未分配或释放 或者只是您无权访问它 查看此示例代码 该代码存在访问错误问题 因为
  • iOS - 在 UITabBar 上方获取所需的阴影

    我试图让我的标签栏阴影看起来像这张图片中看到的那样 这样做的最佳方法是什么 我正在使用 Objective C Thanks 您可以使用以下代码为任何 UI 对象提供阴影 tabBar layer shadowOffset CGSize w
  • 致命错误:在 flutter 中找不到“Flutter/Flutter.h”文件

    这是错误 在文件中包含来自 Users chetan pub cache hosted pub dartlang org webview flutter 1 0 7 ios Classes JavaScriptChannelHandler
  • 如何将 SCNPlane 颜色更改为透明颜色

    我正在开发一个 ARKit 项目 在水平面上点击时需要波纹动画效果 为此 我采用了 UIView 对象并将其作为 SCNPlane 对象材料的内容传递 我已将波纹动画添加到 UIView 对象 一切正常 但我无法将 SCNPlane 颜色更
  • UIImageWriteToSavedPhotosAlbum 选择器语法问题

    努力让 UIImageWriteToSavedPhotosAlbum 快速工作https developer apple com library ios documentation UIKit Reference UIKitFunction
  • 使用 UIWebView 显示 PDF 不起作用

    因此 我意识到有关使用 UIWebView 在应用程序 在 iPad 上 中显示 PDF 存在很多问题 我已经审查了我能找到的所有内容 但似乎找不到任何满意的东西 我想做的事情非常基本 所以我真的不知道为什么它不起作用 我需要做的就是在 U
  • admob ios7错误音频框架

    我正在将 admob SDK 当前的 集成到我的上一个应用程序 IOS7 Xcode5 中 并且出现了一个新错误 在新项目上也是如此 我想我错过了一些东西 但我多次重新启动该过程 但错误仍然存 在 Undefined symbols for
  • iOS Twitter NSURLErrorDomain 代码=-1012

    我正在尝试通过在我的应用程序中注册 Twitter 来获取用户的联系方式 我发现this https github com malcommac DMTwitterOAuthgithub上的项目看起来非常好 我只遇到一个问题 如果我使用来自
  • dyld:无法加载插入的库,但可以在模拟器和另一部 iPhone 上使用

    所以我在过去的几个小时里在我的应用程序上编码 在某个时候我决定在我的 iPhone 8 13 3 1 上启动我的应用程序而不是使用模拟器 13 3 它立即崩溃并出现以下错误 dyld warning could not load inser
  • 游戏中心玩家显示名称在沙盒中始终为“我”

    我使用用户的游戏中心显示名称和玩家 ID 来维护他们在我的服务器上的个人资料 当我进行测试时 一切似乎都正确执行 但我的沙箱帐户的用户显示名称显示为 Me 而不是附加到我的帐户的显示名称 Billybobbo 这应该在沙盒模式下发生吗 Co
  • 使用自定义格式将字符串转换为 NSDate [重复]

    这个问题在这里已经有答案了 可能的重复 NSString 到 NSDate https stackoverflow com questions 1353081 nsstring to nsdate iPhone 如何将 yyyyMMddTh
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat

随机推荐

  • 使用 Selenium 验证

    我需要验证网页上的特定插槽是否已加载 我正在使用 Selenium WebDrivermain 函数 我应该使用 JUnit 测试用例吗 在任意对象之间检索文本的方法有哪些 div 有具体的id吗 如果给定这一页 http ideone c
  • R:为文字云图形/png添加标题

    我有一些有效的 R 代码 可以从术语文档矩阵生成标签云 现在 我想从许多文档创建一大堆标签云 并在稍后进行可视化检查 要知道标签云图片属于哪个文档 语料库 我想为生成的图形添加标题 我怎么做 也许这是显而易见的 但我仍然是 R 图形的初学者
  • DNS 与 GKE 内部负载均衡器

    我在 GKE 上有两个 kubernetes 集群 一个公共集群处理与外界的交互 另一个私有集群仅供内部使用 公共集群需要访问私有集群上的一些服务 我已通过以下方式将这些服务暴露给公共集群的 Pod内部负载均衡器 https cloud g
  • 为后台线程配置 Autofac 容器

    我有一个 asp net MVC 站点 其中有许多使用 InstancePerHttpRequest 范围注册的组件 但是我还有一个 后台任务 它将每隔几个小时运行一次 但不会有 httpcontext 我想获得一个已像这样注册的 IRep
  • 我可以对隐私网址做什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试将我的 Android 应用程序投放市场 而我最不需要的就是隐私 URL 问题是我没有网站
  • 对嵌套数组进行排序并返回弹性中的前 10 名

    我在弹性索引中有一个嵌套数据类型 并且希望对所有返回的结果进行升序排序 我已经尝试过以下方法 GET indexname search source m iTopicID m iYear m Companies query terms m
  • 在继续功能之前等待图像上传的响应

    因此 我正在研究数组中多个图像的上传功能 经过一番努力 我终于让我的上传功能正常工作 并且图像显示在 Firebase 数据库中 然而 我还没有找到一种工作方法来确保我的上传功能在继续之前完成 下面是我调用 upload 函数并尝试将响应存
  • 设置仅适用于一个会话/一名用户

    我创建了一个 WindowsForms 应用程序 然后在以下命令的帮助下进行了设置这个链接 https stackoverflow com questions 56541199 how to create setup exe file fo
  • SQLite 数据库不更新列表视图项并插入新项

    当项目为listview单击后 它会在另一个活动中打开 该活动具有edittext 编辑项目后 当我保存它时 项目不会在列表视图中更新 但会在列表视图中插入一个新条目 如何更新现有项目而不插入新项目 这是我的代码 活动 TRList cla
  • 为什么 memcmp(a, b, 4) 仅有时针对 uint32 比较进行优化?

    鉴于此代码 include
  • 为什么我的按钮的“验证”事件处理程序从未被调用?

    在下面的小应用程序中 我想知道为什么从未调用 BtnOk Validating 事件处理程序 我预计单击 确定 按钮会调用事件处理程序 真实的对话框有更多的控件 每个控件都有一个验证事件处理程序 我的计划是使用 确定 按钮验证事件处理程序
  • 从 Windows 注册表读取 DWord

    如何使用 java util prefs Preferences 从 Windows 注册表读取 DWORD 值数据 我可以读取REG SZ类型的数据 但是读取REG DWORD类型时 返回null Preferences userRoot
  • JavaScript 窗口对象元素属性

    一位同事向我展示了以下代码并问我为什么它有效 span Do you like my hat span 我解释过 当浏览器解析文档时 会使用元素 id 的名称将一个属性附加到 window 对象 然后该文档包含对相应 dom 节点的引用 有
  • 管道和文件重定向的区别 - BASH

    重定向用于重定向 stdout stdin stderr 前任 ls gt log txt Pipes用于将一个命令的输出作为另一个命令的输入 前任 ls grep file txt 为什么这两个操作员会做同样的事情 为什么不直接写ls g
  • 可以通过 CLI/API 更改 AWS 支持计划吗?

    正在寻找是否有办法使用awscli 将我帐户的 支持计划 从开发人员更改为企业 此处描述了通过 Web UI 进行的手动方法 标题为 如何更改我的 AWS 支持计划 https aws amazon com premiumsupport k
  • 检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 '' 附近使用的正确语法

  • 如何使用 javascript 限制附加函数?

    我有一个追加按钮 如果您无休止地单击它 它就会无休止地追加 假设我希望这个按钮执行 10 次 让我用幻想代码告诉你 p我在想什么 这样我就可以从错误中吸取教训 我知道这是错的 但嘿我正在学习 thismany 1 appendbutton
  • 如何按计数对列表列表进行排序?

    In C List
  • Angular ui-router,html5模式总是刷新到/

    我正在尝试在角度中使用 html5mode 以便我可以为 http myhost products 之类的页面添加书签 其中 products 是由 stateProviderRef state xxx 定义的路由 为此我已经 added
  • 如何使用 iOS 14 触发多播授权的本地网络对话授权

    根据 iOS 14 阻止访问本地网络的新政策 需要 com apple developer networking multicast 特殊权限才能访问本地网络 并且此访问应在授权对话框中由用户确认 尽管这个新功能没有完整记录 但苹果工程师在