如何在没有用户交互的情况下禁用 wifi 辅助

Posted

技术标签:

【中文标题】如何在没有用户交互的情况下禁用 wifi 辅助【英文标题】:how to disable wifi assist without user interaction 【发布时间】:2018-04-10 12:46:18 【问题描述】:

我有几个必须通过 wifi 而非移动数据调用(以编程方式)的 URL。

WIFI ASSIST 开启时,只要 wifi 信号较弱,数据包就会通过移动数据传输。

我想阻止这种情况发生。

据我研究,没有用于切换 wifi 辅助的 API 以编程方式打开和关闭

我相信在可达性类的帮助下,我可以发现用户是否打开了移动数据和 wifi,我可以提醒用户关闭 wifi 辅助,但这是一个非常糟糕的用户体验。

所以我决定看看是否可以在 ios 移动配置文件的帮助下完成。

但我在 Apple 配置文件参考中找不到任何与 wifi-assist 相关的键。

所以我想知道,是否可以强制 wifi 用于某些 URL。

我记得这可以通过 *** ON DEMAND 实现,我们可以通过 *** 访问某些域。

我想知道wifi是否也可以通过配置文件进行同样的操作

欢迎提出任何建议。

【问题讨论】:

似乎不可能。或许这篇文章可以帮到你一点***.com/questions/41184976/… 看看这是否有帮助? github.com/joninsky/DJiOSSDK/blob/… 有了这个我可以找到网络连接是否通过移动数据并提醒用户关闭移动数据并继续使用 wifi 但它的用户体验非常糟糕,所以我正在考虑使用移动配置个人资料和它只是一次用户活动 似乎有办法让体验变得更好。 Sonos 似乎已经为他们的用户解决了这个问题:sonos.custhelp.com/app/answers/detail/a_id/4257/~/…。我想知道您是否可以将 URLSession 设置为不允许使用蜂窝网络。这种方法的问题在于,我相信它只会延迟 URLRequest 直到再次使用 WiFi。我不知道的是,在 WiFi 辅助处于活动状态时请求的存在是否会使 iOS 切换回 Wifi。 ***.com/questions/36303123/… 【参考方案1】:

正如其他人所提到的,在 iOS 中无法以编程方式操作此设置。这并不是您真正要问的,因为您似乎已经知道答案是“否”。

您询问的是配置文件,所以我假设这些是托管设备。不幸的是,我知道没有配置文件有效负载会强制托管设备禁用 Wi-Fi Assist。

但是,我相信您的意图与所要求的有所不同。我认为您基本上有一个应用程序与只能通过 Wi-Fi 网络(可能是公司 Wi-Fi 网络)访问的资源进行通信。如果应用程序在蜂窝网络上尝试连接到资源,它将无法连接。在某些情况下,当 Wi-Fi 信号较弱时,设备会尝试提供帮助并切换到蜂窝网络,从而导致应用出现问题。如果我们能找到一种方法来强制 iOS 在您的应用程序运行时不利用 Wi-Fi Assist,那么您的状态就会很好。

如果您可以将此应用安装为托管应用,则有一种方法可以确定该应用只能在 Wi-Fi 连接上运行。将网络使用规则 AllowCellularData 设置为 false 应该这样做(有关详细信息,请参阅 this)。我不确定这个解决方案的一点是,这是否只是在 Wi-Fi Assist 开启并处于活动状态时导致连接失败,或者它是否让 iOS 在应用程序运行时更喜欢不使用 Wi-Fi 辅助,因为它无法通过蜂窝连接。因此,我认为您可以告诉应用程序仅通过 WiFi 连接,但这并不能真正为您提供更好的用户体验问题解决方案。唯一真正让您受益的是,您的应用程序连接在连接到蜂窝网络时永远不会尝试连接。但是,如果您将应用程序包 ID 的此值更改为 false,则可能会阻止 Wi-Fi Assist 在您的应用程序运行时启用。我无权使用 MDM 进行尝试,但您可以测试并查看。

最终,鉴于这可能是公司设备的情况,我认为您将不得不通过用户培训来解决这个问题。好消息是,这是一次性的步骤。当然,当 Wi-Fi 信号较弱但蜂窝信号较强时,用户的网络性能可能会略有下降。如果这些是企业应用程序主要仅在公司的 Wi-Fi 网络上运行的企业设备,这并不重要。

另一个解决方案就是你提到的,基本上是使用按需 *** 来提供与内部资源的连接。这是额外的基础设施工作,您已经提到过,所以我不确定它是否是一个选项。

显然,另一种解决方案是通过防火墙公开网络资源,这样您就可以通过蜂窝网络访问它。我怀疑由于安全限制,这是不可能的。

不幸的是,这个领域没有很多好的选择。但是,希望有一些方法可以做到这一点,因为 Sonos 似乎已经做了一些事情来 允许他们的应用在流式传输到本地网络资源时避免切换到 WiFi Assist:https://sonos.custhelp.com/app/answers/detail/a_id/4257/~/wi-fi-assist-and-sonos

我想知道您是否可以让您的应用打开到固定本地网络资源的流式音频连接,这将导致它使用 Wi-Fi。这是一个非常疯狂的 hack,但使用足够低的比特率音频文件流,它可能会满足您的需求,同时不会占用太多网络吞吐量。

根据 Apple 的notes on Wi-Fi Assist:

如果您正在使用数据,Wi-Fi Assist 不会自动切换到蜂窝网络 漫游。 Wi-Fi Assist 仅在您的应用程序在 前台并且不会通过后台下载激活 内容。 Wi-Fi Assist 无法通过 某些第三方应用程序激活 流式传输音频或视频,或下载附件,如电子邮件 应用,因为它们可能会使用大量数据。

当然,您可以考虑的另一种可能的解决方案是提高您的 Wi-Fi 覆盖范围,使信号不会变差到需要 Wi-Fi Assist 的程度。我知道这可能不可行,但想把它放在那里。

祝你好运!

【讨论】:

感谢您突出显示AllowCellularData。它可能对我的用例有用【参考方案2】:

没有允许您启用/禁用“Wi-Fi 辅助”的公共 API,即使您找到了方法,您的应用也会被拒绝。

【讨论】:

这就是我希望借助配置文件的原因,但也没有太多可用的信息 1. 您不能更改用户设置,正如我所提到的,即使您找到了一种方法,您的应用在审核过程后将被拒绝。 2. 您可以测试连接质量并强制用户使用蜂窝数据或 Wi-Fi,但这也是被禁止的。你应该阅读App Store Review Guidelines 同意我们不能以编程方式进行,这就是为什么我正在探索是否可以通过苹果配置文件来完成。【参考方案3】:

不,您不能通过编程方式启用或禁用 WiFi,并且没有用于此的 API。

【讨论】:

以上是关于如何在没有用户交互的情况下禁用 wifi 辅助的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 UITableView 的部分索引的用户交互?

如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?

在没有任何用户控制或交互的情况下在 iPhone 上播放全屏视频?

在不禁用用户交互的情况下阻止 UIWebView 输入显示 UIKeyboard

如何在没有用户交互的情况下启动 Open Camera 应用程序来拍照?

如何在没有用户交互的情况下在后台接收 iOS 通知