iOSでAmazonS3からファイルをダウンロードしているとき。断続的にNSURLConnectionDownloadDelegateのメソッドdidFailWithError:呼び出されます。これは、受信したNSErrorオブジェクトをログに記録したときに取得したものです。
エラーコード:109エラードメイン:SSErrorDomainエラーの説明:「。s3.amazonaws.comに接続できません」
すべてのAppleドキュメント、StackOverflow、およびその他のサイトを検索しましたが、これについては何も見つかりませんでした。今日、私は自分の開発者アカウントを使用して、これについてもAppleに技術的な質問をしました。
何か案が ?
アップデート:
それで、HTTP応答エラーコード(403 Forbidden)を調べた後、私はその考えを思いつきました。これは、S3からの「RequestTimeTooSkewed」エラーが原因です(要求時間と現在の時間の差が大きすぎます)。iPad / Macのシステム時間を1時間変更してクロスチェックしましたが、小さな(200kb)ファイルであっても、このエラーはすぐに発生します。
多くのブログで提案されているように、私は最初に以下のようにAWSにHEADリクエストを送信して、日付文字列を取得し、システムの日付を渡さないようにしています
NSString *awsURL = @"http://s3.amazonaws.com";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:awsURL]];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error: NULL];
NSString *dateString = nil;
if ([response respondsToSelector:@selector(allHeaderFields)]) {
dateString = [[response allHeaderFields] objectForKey:@"Date"];
}
return dateString;
これをNSMutableURLRequestのDateヘッダーとして設定します
[urlRequest setValue:awsDateString forHTTPHeaderField:@"Date"];
このリクエストをダウンロード用に問題に追加しています
NKAssetDownload *nkAssetDownload = [nkIssue addAssetWithRequest:urlRequest];
それでも同じエラー!!!! 今では私の前回の状況よりもクレイジーになっています。
誰 ?
アップデート2
日付文字列の「GMT」を「+0000」に置き換えることで、リクエストを正常に行うことができました(iPadのシステムクロックが正しくない場合でも)。
アップデート3それでもいくつかのリクエストは同じエラーで失敗しますが、これは奇妙なことですが、NewsStandフレームワークが混乱しているものだと思います。