蜂窝连接的 UIRequiresPersistentWiFi 等效项
Posted
技术标签:
【中文标题】蜂窝连接的 UIRequiresPersistentWiFi 等效项【英文标题】:UIRequiresPersistentWiFi equivalent for cellular connection 【发布时间】:2012-01-13 12:25:08 【问题描述】:好的,所以我将我的应用 plist 的 UIRequiresPersistentWiFi 键指定为 YES,这样当我的应用在后台时 ios 不会停止获取数据。
但是,当用户使用蜂窝连接(不是 wifi)并且我的应用在后台时,数据的下载会在几分钟后停止。
我仔细检查了文档,似乎没有可以设置的蜂窝网络 UIRequiresPersistentWiFi 等效项。
当应用在后台运行时,有什么方法可以让蜂窝网络上的连接继续存在?有什么提示吗?
干杯!
更新:
我正在制作一个网络广播应用程序。 Stream 与我一个接一个请求的 mp3 相结合(不能提前请求,不能更改服务器端)。当我的应用程序在后台并使用 wifi 时,它可以工作。但是,当使用蜂窝连接时,在后台花费一段时间后不会执行网络请求。没有改变策略的地方。该应用程序位于 AppStore 中,并且以前可以使用。我猜他们在新版本的系统中改变了一些东西。
更重要的是我不需要节流。我的广播应用程序已获得批准并在 AppStore 中。流以 128kb/s(即最大值)发送,所以这不是问题。在后台一段时间后,系统似乎使我的网络请求(在蜂窝网络上时)静音。但是,这只发生在我尝试在后台启动连接时。
说明:
-
应用程序正在后台播放通过蜂窝网络传输的 mp3
网络。
Mp3 结束
我请求另一个 mp3 的 URL
请求未执行*。
*在使用 WiFi 时有效。
【问题讨论】:
我不确定它是否正是您正在寻找的,但请看一下:***.com/q/4595638/1047258 谢谢,但这与我的问题无关。 【参考方案1】:我相当肯定 Cell 网络没有这样的东西。这是我的推理:
手机服务要花钱。很多钱。每分钟。相比之下,Wifi 服务并不花钱。 AT&T 的带宽并不多,因此会向用户收取额外的带宽使用费。 Apple 是一家希望让用户体验尽可能干净和美观的公司。 当成本过高而并非他们自己的过错时,用户会很生气,他们的体验也不好。如果 Apple 允许您在 wifi 范围之外持续连接到网络,那么用户的服务成本将会飙升,他们不知道为什么。如果 Apple 赋予程序员这种能力,就会有人滥用它。所以,我敢肯定苹果不会允许你这样做。
当您的应用程序在后台运行时,为什么您需要持续的互联网连接(除非,我猜,您正在制作一个互联网广播应用程序)?请记住,在后台时,您的应用程序可以随时终止而不会发出警告。如果找不到方法,您可能需要重新考虑您的策略。 :/
【讨论】:
我正在制作一个网络广播应用程序。 Stream 与我一个接一个请求的 mp3 相结合(不能提前请求)。当我的应用程序在后台并使用 wifi 时,它可以工作。但是,当使用蜂窝连接时,在后台花费一段时间后不会执行网络请求。没有改变策略的地方。该应用程序位于 AppStore 中,并且可以正常工作。我猜他们在新版本的系统中改变了一些东西。 如果我知道的话,我不会说要重新考虑策略。至于请求 mp3 的事情,我认为您已经尝试不断地流式传输音频,而不必重新请求音频流?我知道苹果公司在他们第一次提出多任务处理时,因为后台应用程序耗尽电池而受到抨击。改变的可能是 Apple 防止后台应用程序占用电池和带宽的策略(毕竟,进行手机连接比 wifi 连接更耗电) 我的方法以前奏效过。我的结论是,Apple 变得更加严格,不允许在应用程序在后台运行一段时间并使用蜂窝网络时执行请求。我尝试了所有想到的解决方法。他们都没有解决这个问题。【参考方案2】:我认为没有 UIRequiresPersistentWiFi
的等价物,原因可能包括 Tusting2121 指出的原因。
但请注意UIRequiresPersistentWiFi
与节能有关。 wifi模块会消耗能量,因此通常会在一段时间后关闭以节省一些能量,除非设置了UIRequiresPersistentWiFi
。
我相信,这种节能方式在蜂窝案例中并非如此。
在蜂窝模式下您的连接在几分钟后消失的事实可能是由您声称的 wifi 节能机制副本完全不同的东西引起的。例如,请参阅this article,这表明您有义务限制您的 3G 数据流。
【讨论】:
感谢您的建议,但我不需要限制。我的广播应用程序已获得批准并在 AppStore 中。流以 128kb/s(即最大值)发送,所以这不是问题。在后台一段时间后,系统似乎使我的网络请求(在蜂窝网络上时)静音。但是,这只发生在我尝试在后台启动连接时。【参考方案3】:将audio
添加到您在Info.plist
中的UIBackgroundModes
条目。
根据苹果文档:In your callbacks, though, you should do only the work necessary to provide data for playback. For example, a streaming audio app would need to download the music stream data from its server and push the current audio samples out for playback. You should not perform any extraneous tasks that are unrelated to playback.
您还可以从 voip
条目中获得一些价值 - 您可以通过 setKeepAliveTimeout:handler:
定期调用您的处理程序以填充您的数据流。
【讨论】:
感谢您的回答,但我已经在 UIBackgroundModes 条目中有音频键。我也认为我不应该添加 voip 密钥。这可能会导致应用被拒绝,因为我的应用不使用任何 VoIP 服务。 您是在排队单独的 mp3 文件,然后一个接一个地播放它们吗?可能是当您停止播放最后一个排队的文件时,应用程序被暂停?来自文档However, if the application stops playing that audio or video, the system suspends it.
你停止播放然后开始下一个文件吗?有没有办法持续加载缓冲区而不是让它耗尽?
否则,我们需要更多详细信息 - 每次播放相同的时间后它会停止播放吗?还是相同数量的歌曲?是在歌曲之间还是歌曲中间?您如何从网络请求数据?您使用什么回调来加载下一首曲子?等等……
我没有在排队。第一个完成后,我请求另一个 URL 并开始播放。那不是无限的流。我用一些描述更新了我的问题。
根据您的描述,问题似乎是由步骤 2 引起的。当您停止播放 mp3 时,操作系统会确定您已完成后台执行并暂停您的应用程序。您可能可以通过日志记录来确认这一点。在这种情况下,您需要一些方法来排队下一首曲目,以便您可以继续播放音频并避免被暂停。或者您需要在执行网络请求时找到一种方法来保持音频通道打开(播放无声文件?)。以上是关于蜂窝连接的 UIRequiresPersistentWiFi 等效项的主要内容,如果未能解决你的问题,请参考以下文章
CLLocationManager 是不是可以在没有互联网/蜂窝连接的情况下工作?