你们的项目使用的是http还是https呢?如果使用 https,你们有遇到过请求中断的问题吗?说说我们使用https的血泪史!
https 除了设置App Transport Security Settings...(这都是小事,具体的自行百度)
最要命的是会发现请求中断,不多说,解决办法
解决这个呢需要移动端配合设置一些东西。服务器端会生成自签证书或者用苹果的CA证书,大多数还是会花钱买使用苹果的CA证书,当然也有不花钱的自签证书,无论哪种,移动端都要配合设置一下,具体操作:
1.先导入证书 证书由服务端生成,具体由服务端人员操作
2.在封装的网络请求里, 配置安全策略,上代码:
/**
配置安全策略
*/
+ (AFSecurityPolicy *)configSecurityPolicy {
// 先导入证书 证书由服务端生成,具体由服务端人员操作(直接把证书拖到工程文件里就行,不需要双击)
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书名称" ofType:@"cer"]; //证书的路径
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
/*
证书验证模式
AFSSLPinningModeNone: 不验证
AFSSLPinningModePublicKey: 公共秘钥验证模式
AFSSLPinningModeCertificate: 证书验证模式
*/
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
/*
是否允许无效证书(也就是自建的证书),默认为NO
如果是需要验证自建证书,需要设置为YES
*/
securityPolicy.allowInvalidCertificates = YES;
/*
是否需要验证域名,默认为YES
假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
设置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
如置为NO,建议自己添加对应域名的校验逻辑。
*/
securityPolicy.validatesDomainName = yes;(自签证书如果是局域网,好像不需要验证域名;CA证书,好像需要验证域名,自行尝试)
// 设置证书
securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil];
return securityPolicy;
}
如果有意议,或者更好的提议,欢迎评论!!!
网友评论