6

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

WIFI ASSIST开启时,每当 wifi 较弱时,数据包就会通过移动数据传输。

我想阻止这种情况发生。

据我研究,没有API可以以编程方式打开和关闭wifi辅助开关

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

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

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

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

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

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

欢迎任何建议。

4

3 回答 3

4

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

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

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

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

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

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

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

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

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

根据 Apple关于 Wi-Fi Assist 的说明

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

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

祝你好运!

于 2018-04-17T20:15:40.570 回答
2

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

于 2018-04-13T12:06:20.010 回答
0

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

于 2018-04-17T08:59:28.407 回答