gpt4 book ai didi

ios - 错误代码 :AccessDenied, 消息:AWS 身份验证需要有效的日期或 x-amz-date header

转载 作者:可可西里 更新时间:2023-11-01 03:57:05 24 4
gpt4 key购买 nike

我的应用程序在 ios 6 中运行良好..它从亚马逊网络服务器 s3 上传和下载数据..但是当我将我的 ios 6 升级到 ios 7 时...我收到警告消息“无法连接到服务器”日志窗口中的错误

“Exception = AmazonServiceException { RequestId:5DC8AEF01DD9FB91, ErrorCode:AccessDenied, Message:AWS authentication requires a valid Date or x-amz-date header}”。

为了解决这个问题,我将我的 aws ios sdk 1.0.0 升级到 aws ios sdk 1.6.1。并尝试运行我的应用程序,它会卡住 10-12 秒,然后应用程序运行。

所以谁能告诉我如何解决 aws ios sdk 1.0.0 中的“x-amz-date header”问题及其在 aws ios sdk 1.6.1 中的替代卡住问题..

最佳答案

AmazonSDKUtil.m中,我们有以下方法:

+(NSDate *)convertStringToDate:(NSString *)string usingFormat:(NSString *)dateFormat
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:dateFormat];
[dateFormatter setLocale:[AmazonSDKUtil timestampLocale]];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

NSDate *parsed = [dateFormatter dateFromString:string];

NSDate *localDate = [parsed dateByAddingTimeInterval:_clockskew];

[dateFormatter release];

return localDate;
}

+(NSString *)convertDateToString:(NSDate *)date usingFormat:(NSString *)dateFormat
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[dateFormatter setDateFormat:dateFormat];
[dateFormatter setLocale:[AmazonSDKUtil timestampLocale]];

NSDate *realDate = [date dateByAddingTimeInterval:-1*_clockskew];

NSString *formatted = [dateFormatter stringFromDate:realDate];

[dateFormatter release];

return formatted;
}

在旧版本的 SDK 中,区域设置和时区未正确设置为 en_USGMT。这可能会导致问题,具体取决于您的设备区域设置和时区设置。最新版本的 SDK 修复了该问题。如果由于某种原因您无法更新 SDK,您可以修改 AmazonSDKUtil.m 并明确设置语言环境和时区值。

编辑:

如果您在 iOS 6 和 iOS 7 上运行以下代码片段,您可以看到区域设置如何影响日期格式。

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z";
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"PDT"];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];

NSString *dateWithoutTimezoneAndLocale = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"Date 1: %@", dateWithoutTimezoneAndLocale);

dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

NSString *dateWithTimezoneAndLocale = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"Date 2: %@", dateWithTimezoneAndLocale);

在 iOS 6 上

Date 1: Wed, 25 Sep 2013 16:25:29 PDT
Date 2: Wed, 25 Sep 2013 23:25:29 GMT

在 iOS 7 上

Date 1: Wed, 25 Sep 2013 16:24:11 GMT-7
Date 2: Wed, 25 Sep 2013 23:24:11 GMT

如您之前所述,NSDateFormatter 的行为在 iOS 7 中发生了变化;然而,这个问题的根本原因是您没有明确地将语言环境设置为 en_US。当区域设置为 en_US 以外的设置时,可能会导致问题。这就是为什么我们在最新版本的 SDK 中明确设置语言环境,以便它可以在具有任何语言环境设置的设备上运行。

希望这是有道理的,

关于ios - 错误代码 :AccessDenied, 消息:AWS 身份验证需要有效的日期或 x-amz-date header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18933208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com