Je suis en train de mettre à jour mon application pour prendre en charge le nouveau ATS d'Apple. Sans aucune modification apportée à Plist-Info, le code suivant génère une erreur à sendSynchronousRequest()
dans un simulateur Vanilla `iOS 9.
NSURL *url =[NSURL URLWithString:@"https://Google.com"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
[request setHTTPMethod:@"GET"];
[request setURL:url];
NSURLResponse *urlResponse = nil;
NSError *error = nil;
NSData *reponse = [NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse
error:&error];
Erreur:
Échec du chargement HTTP de NSURLSession/NSURLConnection (kCFStreamErrorDomainSSL, -9802)
Avez-vous des idées sur ce qui pourrait être derrière ce problème?
Ps: Je comprends que NSURLConnection
est obsolète. Mais ces invocations fonctionnent si j'ajoute AllowArbitraryLoads
dans Plist
.
NSURLSession/NSURLConnection Le chargement HTTP a échoué (kCFStreamErrorDomainSSL, -9802) Correspond au serveur ne prenant pas en charge le "transfert de secret".
Pour contourner ce problème, ajoutez une exception de domaine au fichier .plist comme suit:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>test.testdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
J'ai ajouté ce code dans info.plist pour autoriser toute requête http:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Cet article répertorie toutes les modifications apportées par Apple pour iOS 9 et leurs implémentations:
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Si votre application comprend une page H5, elle aura parfois aussi cette erreur.
Il faut non seulement activer Allow Arbitrary Loads
pour le réparer, mais également ajouter du code ci-dessous dans votre appDelegate.m:
@implementation NSURLRequest(ATS)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
return YES;
}
@end
Selon cela: https://forums.developer.Apple.com/message/36842#36842
L'exception correcte pour corriger le chargement HTTP a échoué (kCFStreamErrorDomainSSL, -9802) est:
NSExceptionAllowsInsecureHTTPLoads
Ajoutez ce qui suit au fichier info.plist. Et remplacez "My_Base_Url.com" par l'URL de base de votre lien de service Web. Cela devrait faire l'affaire.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>My_Base_Url.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSRequiresCertificateTransparency</key>
<false/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
</dict>
</dict>
</dict>