当前位置: 首页 > news >正文

IOS 13 网络请求和Moya框架

允许HTTP请求

从iOS9开始,推荐使用HTTPS,如果使用的HTTP,默认情况下会出现如下错误:

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

这是因为iOS9引入了新特性App Transport Security (ATS),他要求App内网络请求必须使用HTTPS协议,也就是默认情况下,不允许发送HTTP请求,但我们这里后端实现的API是HTTP协议,虽然后端课程中讲解了HTTPS,但为了降低课程难度,这里我们先允许HTTP请求,后面在讲解HTTPS请求。

解决方法是要么改为HTTPS,要么声明可以使用HTTP,可以声明部分使用HTTP,也可以所有;但需要说明的是如果APP内所有请求都是HTTP,那么如果要上架App Store的时候基本都会被拒。

源码方式更改

这种方式是直接编辑配置文件。打开工程下的Info.plist文件,在文件dict标签内添加如下内容:

<key>NSAppTransportSecurity</key>  
<dict>  <key>NSAllowsArbitraryLoads</key><true/>  
</dict>

意思是允许使用HTTP,当然还可以配置指定的域名使用HTTP,我们这里是配置所有域名。

可视化更改

通过可视化编辑器。找到:

App Transport Security Settings,下面的Allow Arbitrary Loads设置为Yes。

网络框架

OC常用的是AFNetworking,Swift常用的Moya,本文使用Moya网络请求框架。

添加依赖

# 网络请求框架
# https://github.com/Moya/Moya
pod 'Moya'

还不了解如何使用 CocoaPods 管理依赖的,建议先看前面的文章:IOS 01 CocoaPods 安装与使用 

添加完依赖后,看一下Pods文件夹里面是否添加成功。 

配置请求相关地址 

//
//  Config.swift
//  MyCloudMusic
//
//  Created by jin on 2024/8/22.
//import Foundationclass Config {/*** 是否是调试模式* 是因为单独定了一个变量更方便,不用真正更改项目的编译模式*/static let DEBUG = true/// BaseURLstatic let ENDPOINT = "http://my-cloud-music-api-sp3-dev.ixuea.com/"/*** 资源端点*/static let RESOURCE_ENDPOINT = "http://course-music-dev.ixuea.com/"
}

定义Service

框架文档推荐使用枚举,本文也使用枚举进行定义。 

//
//  DefaultService.swift
//  网络API
//
//  Created by jin on 2024/8/22.
//import Foundation//导入网络框架
import Moyaenum DefaultService{case ads(position:Int)case sheets(size:Int)case register(data:User)
}// MARK: - 实现TargetType协议
extension DefaultService : TargetType{/// 返回网址var baseURL: URL {return URL(string: Config.ENDPOINT)!}/// 返回每个请求的路径var path: String {switch(self){case .ads(_):return "v1/ads"case .sheets:return "v1/sheets"case .register:return "v1/users"default:fatalError("DefaultService path is null")}}/// 请求方式var method: Moya.Method {switch(self){case .register:return .postdefault:return .get}}/// 请求的参数var task: Moya.Task {switch(self){case .ads(let position):return ParamUtil.urlRequestParamters(["position":position])case .sheets(let size):return ParamUtil.urlRequestParamters(["size":size])default://不传递任何参数return .requestPlain}}/// 请求头var headers: [String : String]? {var headers:Dictionary<String,String> = [:]return headers}}

 定义参数相关工具类

//
//  ParamUtil.swift
//  参数相关工具类
//
//  Created by jin on 2024/8/22.
//import Foundationimport Moyaclass ParamUtil{/// 返回URL编码的参数////// - Parameter parameters: <#parameters description#>static func urlRequestParamters(_ data:[String:Any]) -> Task {return .requestParameters(parameters: data, encoding: URLEncoding.default)}
}

请求接口

let provider = MoyaProvider<DefaultService>()
provider.request(.sheets(size: VALUE10)) { result inprint(result)switch(result){case let .success(response):let data = response.data // Data, your JSON response is probably in here!let statusCode = response.statusCode // Int - 200, 401, 500, etclet dataString = String(data: data, encoding: .utf8)!print("request network success \(statusCode) \(dataString)")case let .failure(error):print("request network error \(error)")}
}

至此,简单的实现了Moya框架的依赖和使用。 


http://www.mrgr.cn/news/14269.html

相关文章:

  • SDI技术在专业视频应用中的角色与特性
  • 微前端集成优化:让所有子应用体积更小,加载更快!
  • 【Cadence24】如何给PCB板露铜处理
  • unity 自定义功能快捷键
  • MySQL 查询优化详解
  • Python 编程 之 tkinter : 导航栏与局部页面切换
  • 25届应届网安面试,默认页面信息泄露
  • docker快速安装node
  • 前端封装axios请求
  • leetcode 3124.判断矩阵是否满足条件
  • Springboot @RestControllerAdvice全局异常捕获处理
  • 软件理论,图
  • 【生活英语】4、音乐
  • docker内安装miniconda
  • SSM框架之Mybatis
  • 实现A-Z滑动检索菜单
  • 打脸预测,AI泡沫破裂,科技衰退
  • RFID 智慧城市书房:开启智慧阅读新时代
  • 内存管理1
  • 淘宝扭蛋机小程序,市场发展下的潜在机遇