判断iOS应用是否开放HTTP权限的方法

从 iOS9 起,新特性要求 App 访问网络请求,要采用 HTTPS 协议。但是能不能判断开发者是否允许 HTTP 的请求,这样就不会在发起请求时候失败同时弹出以下信息:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

这个需求其实是最近在弄 HTTPDNS 相关的一些东西,只能通过 HTTP 接口请求,但是希望能判断应用是否允许了 HTTP 的访问,如果允许才开启 HTTPDNS 相关的功能。

解决方法比较简单,其实就是读取 info.plist 看看 NSAppTransportSecurity 是否为 YES

Objective-C 实现

- (BOOL)isHTTPEnable {
 if([[[UIDevice currentDevice] systemVersion] compare:@"9.0" options:NSNumericSearch] != NSOrderedAscending){
 NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
 return [[[infoDict objectForKey:@"NSAppTransportSecurity"] objectForKey:@"NSAllowsArbitraryLoads"] boolValue];
 }
 return YES;
}

使用方法:

if ([self isHTTPEnable]) {
 NSLog(@"HTTP enable");
} else {
 NSLog(@"HTTP disable");
}

Swift 实现

func isHTTPEnable() -> Bool {
 let flag = UIDevice.currentDevice().systemVersion.compare("9.0.0", options: NSStringCompareOptions.NumericSearch)
 if (flag != .OrderedAscending) {
 guard let infoDict = NSBundle.mainBundle().infoDictionary else {
 return false
 }
 guard let appTransportSecurity = infoDict["NSAppTransportSecurity"] else {
 return false
 }
 guard let allowsArbitraryLoads = appTransportSecurity["NSAllowsArbitraryLoads"] else {
 return false
 }
 guard let res = allowsArbitraryLoads else {
 return false
 }
 return res as! Bool
 }
 return true
}

使用方法:

if self.isHTTPEnable() {
 print("HTTP enable")
} else {
 print("HTTP disable")
}

原文链接:http://blog.yourtion.com/is-ios-app-enable-http.html

(0)

相关推荐

  • iOS应用开发中AFNetworking库的常用HTTP操作方法小结

    准备 首先,你需要将AFNetworking 框架包含到工程中.如果你还没有AFNetworking的话,在这里下载最新的版本: https://github.com/AFNetworking/AFNetworking 当你解压出下载的文件后,你将看到其中有一个AFNetworking子文件夹,里面全是.h 和 .m 文件, 如下高亮显示的: 将AFNetworking拖拽到Xcode工程中. 当出现了添加文件的选项时,确保勾选上Copy items into destination group

  • iOS的HTTP请求和请求回执类用法小结

    请求类NSURLRequest NSURLRequest类中常用方法和属性总结: //通过类方法创建默认的请求对象 /* 通过这种方式创建的请求对象 默认使用NSURLRequestUseProtocolCachePolicy缓存逻辑 默认请求超时时限为60s */ + (instancetype)requestWithURL:(NSURL *)URL; //返回一个BOOL值 用于判断是否支持安全编码 + (BOOL)supportsSecureCoding; //请求对象的初始化方法 创建时

  • iOS9苹果将原http协议改成了https协议的方法

    解决方法: 在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 下面给大家介绍ios中http 和https 协议的访问 最近做个项目,开始采用的是HTTP协议实现客户端和服务器端的交互,后来需要改成HTTPS协议.在修改的过程中发现了一些问题,解决方案如下:

  • iOS 9无法访问HTTP的解决方法

    在iOS 9之后,苹果默认要求App访问的url必须为https的安全链接,http链接确实是不安全的,如果在开发过程中请求失败,控制台显示http不安全要用https之类的信息的话,那就是由于这个原因了.但是由于并非所有开发者都会去申请HTTPS证书来支持HTTPS访问,所以还是可以进行设置来正常访问HTTP的,方法如下: 1.在Xcode工程中找到Info.plist文件,做iOS开发的应该都了解这是一个做一些应用配置的文件: 2.在Info.plist文件中添加Dictionary类型的N

  • iOS9与XCode7中不能使用http连接的快速解决办法

    在Xcode7.0及以上版本中编译iOS APP时,默认会使用iOS9的一项新特性,使得所有http连接被禁用,项目里使用的API没有https支持,就悲剧了.差了官方文档,有这么一段话 App Transport Security App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accident

  • iOS中使用NSURLConnection处理HTTP同步与异步请求

    一.引言 在iOS7后,NSURLSession基本代替了NSURLConnection进行网络开发,在iOS9后,NSURLConnection相关方法被完全的弃用,iOS系统有向下兼容的特性,尽管NSURLConnection已经被弃用,但在开发中,其方法依然可以被使用,并且如果需要兼容到很低版本的iOS系统,有时就必须使用NSURLConnection类了. 二.使用NSURLConnection进行同步请求 对于网络请求分为同步和异步两种,同步是指在请求结果返回之前,程序代码会卡在请求处

  • iOS通过http post上传图片

    本文实例为大家分享了iOS通过http post上传图片的相关代码,供大家参考,具体内容如下 //ASIFormDataRequest方式 POST上传图片 -(NSDictionary *)addPicWithDictionary:(NSDictionary *)sugestDic{ NSDictionary *tempDic=nil; NSString *url=[NSString stringWithFormat:@"http://182.50.0.62:8095/xianServer/u

  • iOS应用中发送HTTP的get请求以及HTTP异步请求的方法

    Http get 请求 复制代码 代码如下: // 组合一个搜索字符串     NSString *urlStr = [NSString stringWithFormat:@"http://www.baidu.com/s?wd=%@", @"php"];     // 字符串转化为URL     NSURL *url = [NSURL URLWithString:urlStr];      //    NSMutableURLRequest *request = [

  • IOS10.11 无法访问http的问题解决办法

    IOS10.11 无法访问http的问题解 Xcode  Version 7.3.1 (7D1014) IOS9 之后更新了htpps的访问限制,网上很多文章说 往plist 文件中添加 NSAppTransportSecurity的字典 NSAppTransportSecurity 往上面字典中添加 NSallowsArbitaryLoads  Boolean   YES NSAllowsArbitraryLoads 但是实际上操作添加了也没用.困惑了半天. 最后发现,现在的版本,按照以下操作

  • HTTP/2 协议用于 iOS 推送提醒服务 (APNS)

    苹果最近更新了他们的推送提醒服务协议,APNS.这个新版本的协议基于HTTP/2和JSON,相比于旧的二进制协议,新的协议有了巨大改进. 新的APNS协议基于HTTP/2: 新的特性和功能: 基于JSON的请求和响应 对于每个通知,如果成功响应,将会返回200标识 - 不用再去猜测通知是否被接收到 响应错误将会以JSON字符的形式返回 消息的长度从2048个字节增加到4096个字节 连接状态可以通过HTTP/2的ping框架来进行检查 支持主题 通用的推送证书 - 开发和生产使用同一个证书即可

随机推荐