判斷iOS應(yīng)用是否開放HTTP權(quán)限的方法
從 iOS9 起,新特性要求 App 訪問網(wǎng)絡(luò)請求,要采用 HTTPS 協(xié)議。但是能不能判斷開發(fā)者是否允許 HTTP 的請求,這樣就不會在發(fā)起請求時(shí)候失敗同時(shí)彈出以下信息:
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.
這個(gè)需求其實(shí)是最近在弄 HTTPDNS 相關(guān)的一些東西,只能通過 HTTP 接口請求,但是希望能判斷應(yīng)用是否允許了 HTTP 的訪問,如果允許才開啟 HTTPDNS 相關(guān)的功能。
解決方法比較簡單,其實(shí)就是讀取 info.plist 看看 NSAppTransportSecurity 是否為 YES。
Objective-C 實(shí)現(xiàn)
- (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 實(shí)現(xiàn)
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
- iOS 9無法訪問HTTP的解決方法
- iOS9與XCode7中不能使用http連接的快速解決辦法
- iOS中使用NSURLConnection處理HTTP同步與異步請求
- iOS的HTTP請求和請求回執(zhí)類用法小結(jié)
- iOS應(yīng)用開發(fā)中AFNetworking庫的常用HTTP操作方法小結(jié)
- HTTP/2 協(xié)議用于 iOS 推送提醒服務(wù) (APNS)
- iOS通過http post上傳圖片
- iOS應(yīng)用中發(fā)送HTTP的get請求以及HTTP異步請求的方法
- iOS9蘋果將原h(huán)ttp協(xié)議改成了https協(xié)議的方法
- IOS10.11 無法訪問http的問題解決辦法
相關(guān)文章
iOS自定義字體設(shè)置和系統(tǒng)自帶的字體詳解
這篇文章主要給大家介紹了關(guān)于iOS自定義字體設(shè)置和系統(tǒng)自帶的字體的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
iOS當(dāng)多個(gè)網(wǎng)絡(luò)請求完成后執(zhí)行下一步的方法詳解
在多線程中,有時(shí)候我們會遇到一個(gè)界面同時(shí)有多個(gè)網(wǎng)絡(luò)請求(比如a,b,c,d四個(gè)網(wǎng)絡(luò)請求),在這四個(gè)個(gè)請求結(jié)束后,在請求到數(shù)據(jù)去做其他操作(UI更新等),下面這篇文章主要給大家介紹了關(guān)于iOS當(dāng)多個(gè)網(wǎng)絡(luò)請求完成后執(zhí)行下一步的相關(guān)資料,需要的朋友可以參考下。2017-12-12

