【问题标题】:How can I restrict all networking requests to a Wi-Fi connection with AFNetworking 2.0?如何使用 AFNetworking 2.0 将所有网络请求限制为 Wi-Fi 连接?
【发布时间】:2014-01-21 14:41:01
【问题描述】:

我有一个很奇怪的问题。我想知道是否可以使用 AFNetworking 2.0 阻止任何请求(当前和未来)。我的应用程序需要做这样的事情:如果用户不在 wifi 连接上 -> 阻止应用程序可能有的任何请求。 我只找到了阻止所有当前请求的方法:

[self.manager.operationQueue cancelAllOperations];

欢迎任何帮助并非常感谢

【问题讨论】:

  • 您是仅支持 iOS 7,还是还支持旧版本?
  • 我也支持 ios 6

标签: ios nsurlrequest afnetworking-2 nsurlsession


【解决方案1】:

从 iOS 6 开始,NSMutableURLRequest 允许您通过调用 setAllowsCellularAccess: 来指定是否可以通过蜂窝连接发出请求。这由Apple document 解释。您需要为您提出的每个请求进行设置。

使用 AFNetworking,连接到 AFHTTPRequestOperationManager 的最简单方法是使用您自己的 requestSerializer subclass 并覆盖 -requestWithMethod:URLString:parameters:error: 来调用 super 并使用 setAllowsCellularAccess: 修改请求。

如果您还在 iOS 7 代码路径中使用 NSURLSession,则可以使用 NSURLSessionConfiguration 并将其 allowsCellularAccess 属性设置为 NO。每个会话只设置一次。

【讨论】:

  • setAllowsCellularAccess 设置为NO 是否保证如果设备同时打开了 Wi-Fi 和蜂窝连接,通信将通过 Wi-Fi 进行?
  • 如果你不想子类化,你可以在 -requestWithMethod:URLString:parameters:error: 返回的 NSMutableURLRequest 上将 setAllowsCellularAccess 设置为 YES
【解决方案2】:

我不知道是否可以使用AFNetworking来完成,但是您似乎可以通过自定义NSURLProtocol来实现这一点:

Can I block network access for a specific moment?

【讨论】:

    【解决方案3】:

    是的,可以使用AFNetworking 2.0。请检查以下链接。
    1。 AFNetworking + cancelAllRequests
    2. How to cancel network request with afnetworking

    更新:-
    我相信您也想查看此链接:- AFNetworking and No Internet Connection scenario

    【讨论】:

    • 感谢您的回复。 cancelAllOperations 方法只取消所有正在进行的操作。我需要的是阻止用户可能提出的所有未来请求。我的情况是,如果用户不想使用蜂窝数据(他只想使用 wifi),那么我必须阻止应用程序可能发出的任何请求直到他同意在这个应用程序中使用蜂窝数据现在我正在使用布尔值来跳过任何请求,但这必须针对每个请求单独完成。我在 AFNetworking 2.0 中寻找更高级别的东西,不允许用户将来提出任何请求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2014-11-19
    • 2018-06-14
    相关资源
    最近更新 更多