Appleの新しい [〜#〜] ats [〜#〜] に対応するためにアプリを更新しています。 Plist-Infoを変更しないと、次のコードはVanilla `iOS 9シミュレーターのsendSynchronousRequest()
でエラーをスローします。
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];
エラー:
NSURLSession/NSURLConnection HTTPロードが失敗しました(kCFStreamErrorDomainSSL、-9802)
この問題の背後にある可能性についての考えはありますか?
Ps:NSURLConnection
が非推奨であることを理解しています。しかし、AllowArbitraryLoads
にPlist
を追加すると、この呼び出しは機能します。
NSURLSession/NSURLConnection HTTPロード失敗(kCFStreamErrorDomainSSL、-9802)は、「Forward Secrecy」をサポートしていないサーバーに対応しています。
これを回避するには、次のように.plistファイルにドメイン例外を追加します。
<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>
このコードをinfo.plistに追加して、http:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
この記事では、iOS 9とその実装のAppleによって行われたすべての変更をリストします。
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
アプリにH5ページが含まれている場合、このエラーが発生することもあります。
オンにするだけでなくAllow Arbitrary Loads
これを修正しますが、appDelegate.mに以下のコードを追加する必要もあります。
@implementation NSURLRequest(ATS)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
return YES;
}
@end
Info.plistファイルに次を追加します。 「My_Base_Url.com」をWebサービスリンクのベースURLに置き換えます。これでうまくいくはずです。
<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>
これによると: https://forums.developer.Apple.com/message/36842#36842
HTTPロードの失敗を修正する正しい例外(kCFStreamErrorDomainSSL、-9802)は次のとおりです。
NSExceptionAllowsInsecureHTTPLoads