在后台检测网络变化 (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 trueDispatchQueue.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)的主要内容,如果未能解决你的问题,请参考以下文章

iOS后台应用网络访问

iOS完美的网络状态判断工具

iOS完美的网络状态判断工具

Flutter 检测网络连接 监听网络变化

iPhone应用程序在后台运行时检测wifi网络

科研成果 | 基于卷积神经网络和迁移学习的无监督变化检测算法