有可能是HTTPS的证书问题,请后台同事检查一下SSL证书是否失效。
因为本项目使用的AFN进行网络请求的, 所以以下这个方法导致了请求被取消。
/**
Whether or not the specified server trust should be accepted, based on the security policy.
This method should be used when responding to an authentication challenge from a server.
@param serverTrust The X.509 certificate trust of the server.
@param domain The domain of serverTrust. If `nil`, the domain will not be validated.
@return Whether or not to trust the server.
*/
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
forDomain:(nullable NSString *)domain;
证书无效后, 上面方法返回NO, 从而执行
disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
最终导致, 当前的请求被cancel。
解决方案
1.及时将有效的证书部署于所使用的环境中。
2.通过plist文件中设置App Transport Security Settings
中的参数, 比如Allow Arbitrary Loads
或者白名单。
3.对AFN中的参数设置, 允许不进行证书验证, 来规避 evaluateServerTrust: forDomain:
方法的验证不通过的问题。
self.securityPolicy = [AFSecurityPolicy defaultPolicy];
self.securityPolicy.validatesDomainName = NO;
self.securityPolicy.allowInvalidCertificates = YES;
最好的解决方案是及时将有效的证书部署于所使用的环境中。如果你的应用不涉及到过多的安全或者不重视此问题, 也可以在苹果没有硬性要求ATS之前通过后面的两个方法来规避。不过, 从苹果之前对ATS的要求情况来看, 也不是长久之计。