Конфигурация S3 с Cognito немного загадочна. Ответы есть в документации, но не совсем очевидны. Ядром работы этого является регистрация вашего AWSMobileClient
экземпляра в конфигурации.
Упрощенный код без проверки ошибок:
Загрузите ваш AWSMobileClient
:
AWSMobileClient.sharedInstance().initialize({ { userstate, error in
if userstate != nil {
registerAuthentication(credentialsProvider: AWSMobileClient.sharedInstance())
}
})
После завершения передачи sharedInstance
в AWSServiceConfiguration
, поскольку AWSMobileClient
-a AWSCredentialsProvider
let DefaultTransferUtilityKey = "DEFAULT_AUTH_KEY"
func registerAuthentication(credentialsProvider: AWSCredentialsProvider) {
/// only do this once per app launch
/// assumes you're using the plist config method
guard let s3tranferInfo = AWSInfo.default().defaultServiceInfo("S3TransferUtility"),
let bucketName = s3tranferInfo.infoDictionary["Bucket"] as? String else {
assertionFailure("failed to load /S3TransferUtility/Bucket key - is awsconfiguration.json correct ?")
return
}
let transferConfig = AWSS3TransferUtilityConfiguration()
transferConfig.bucket = bucketName
if let serviceconfiguration = AWSServiceConfiguration(region: s3tranferInfo.region, credentialsProvider: credentialsProvider) {
AWSS3TransferUtility.register(with: serviceconfiguration, transferUtilityConfiguration: transferConfig, forKey: DefaultTransferUtilityKey)
}
}
и после того, как регистрация фактически завершена, вы можете получить доступ к утилите передачи через строку общего ключа.
lazy var transferUtility: AWSS3TransferUtility = {
let utility = AWSS3TransferUtility.s3TransferUtility(forKey: DefaultTransferUtilityKey)
return utility
}()
Имя корзины и регион также могут быть строками но если вы используете AWSMobileClient
, возможно, у вас есть настройка plist.