在后台检测网络变化 (iOS)
Posted
技术标签:
【中文标题】在后台检测网络变化 (iOS)【英文标题】:Detect Network Changes in Background (iOS) 【发布时间】:2021-08-03 00:45:05 【问题描述】:我正在尝试创建一个 *** 应用程序,当 *** 在设置应用程序中手动关闭时通知用户。更一般地说,我希望能够在网络设置更改时做出反应。我在 *** 上看到了很多关于可达性、网络等的 cmets,但我不知道我是否可以在后台检查这些东西。有没有办法通过使用“获取”或“远程通知”来做到这一点。我的手机上有一个应用程序,如果我关闭 ***,它会给我一个通知,所以我知道有办法做到这一点,但我不知道怎么做。
【问题讨论】:
检查这个答案。 ***.com/a/65211525***.com/a/62777999***.com/a/64316672这可能不是您提到的所有问题的解决方案,但它可能对您有所帮助。 @HackMac 谢谢。其中任何一个都允许在后台进行网络监控吗?当应用程序打开时,我已经能够检测到网络变化。 我不确定,从未将它们用于此类任务,但我只会将它们分配到调度队列后台,并使用一个非常分钟或类似的调用函数的计时器(我知道不是最好的)方式,但它应该工作)。 @HackMac 在应用程序关闭并在后台继续工作? 对于应用程序终止后运行的任务,请参阅:hackingwithswift.com/example-code/system/… - 或者许多创建执行此任务的代理应用程序。 【参考方案1】:根据This Apple Developer Discussion:
答案可能是否。 Apple 员工可能会回答此 Apple 开发者讨论。
没有在网络更改时在后台运行代码的机制。大多数需要做这类事情的人都使用 *** On Demand 架构。 *** On Demand 有一个 API,但该 API 直接映射到配置文件属性,并且配置文件不被视为 API(这意味着它们由 Apple 支持部门提供支持,而不是由开发人员技术支持部门提供支持)。
【讨论】:
谢谢。我也看到了,但就像我说的,我有一个 App Store 批准的应用程序具有此功能,所以我相信有一些方法可以做到这一点。并且没有用于该 *** 应用的配置文件。【参考方案2】:这将每 3 秒监控一次您的互联网状态:
import Cocoa
import Darwin
import Network
//DispatchQueue.global(qos: .userInitiated).async
let monitor = NWPathMonitor()
let queue = DispatchQueue(label: "Monitor")
monitor.start(queue: queue)
var count = 10
while count >= 0
monitor.pathUpdateHandler = path in
if path.status == .satisfied
print("There is internet")
if path.usesInterfaceType(.wifi) print("wifi")
else if path.usesInterfaceType(.cellular) print("wifi")
else if path.usesInterfaceType(.wiredEthernet) print("wiredEthernet")
else if path.usesInterfaceType(.loopback) print("loopback")
else if path.usesInterfaceType(.other) print("other")
else
print("No internet")
sleep(3)
count = count - 1
monitor.cancel()
//
此代码每三秒返回一次互联网状态和连接类型。如果您希望它永远运行,请将 while count >= 0
更改为 while true
和 DispatchQueue.global(qos: .userInitiated).async
或 DispatchQueue.global(qos: .background).async
您可以将任务移至后台。
要继续在后台运行代码(当应用程序不存在时),请遵循 https://www.hackingwithswift.com/example-code/system/how-to-run-code-when-your-app-is-terminated 。
注意:在使用可达性框架时,Appstore 有时会拒绝您的应用。
【讨论】:
谢谢。所以如果用户不能禁用它,就没有办法在后台做某事吗? 你的意思是你希望用户不能禁用它?如果是这样,据我所知,即使您可以这样做,Appstore 也可能会拒绝您的应用。以上是关于在后台检测网络变化 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章