Ich aktualisiere meine App, um Apples neues ATS aufzunehmen. Ohne Änderungen an der Plist-Info gibt der folgende Code einen Fehler bei sendSynchronousRequest()
in einem Vanilla `iOS 9-Simulator aus.
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];
Error:
NSURLSession/NSURLConnection-HTTP-Laden fehlgeschlagen (kCFStreamErrorDomainSSL, -9802)
Irgendwelche Gedanken, was hinter dieser Ausgabe stehen könnte?
Ps: Ich verstehe, dass NSURLConnection
veraltet ist. Aber diese Aufrufe funktionieren, wenn ich AllowArbitraryLoads
in Plist
hinzufüge.
Das HTTP-Laden von NSURLSession/NSURLConnection ist fehlgeschlagen (kCFStreamErrorDomainSSL, -9802).
Um dies zu umgehen, fügen Sie der .plist-Datei wie folgt eine Domänenausnahme hinzu:
<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>
Ich habe diesen Code in die info.plist eingefügt, um jede Anfrage http zuzulassen:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
In diesem Artikel werden alle von Apple für iOS 9 vorgenommenen Änderungen und ihre Implementierungen aufgeführt:
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Wenn Ihre App eine H5-Seite enthält, wird manchmal auch dieser Fehler angezeigt.
Sie müssen nicht nur Allow Arbitrary Loads
einschalten, um das Problem zu beheben, sondern auch den folgenden Code in Ihrer appDelegate.m hinzufügen:
@implementation NSURLRequest(ATS)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
return YES;
}
@end
Entsprechend diesem: https://forums.developer.Apple.com/message/36842#36842
Die korrekte Ausnahme zum Fixieren der HTTP-Last ist fehlgeschlagen (kCFStreamErrorDomainSSL, -9802):
NSExceptionAllowsInsecureHTTPLoads
Fügen Sie der Datei info.plist Folgendes hinzu. Und ersetzen Sie "My_Base_Url.com" durch die Basis-URL Ihres Web-Service-Links. Das sollte den Trick tun.
<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>