Я пытаюсь интегрировать S3 и Mobile Analytics с помощью AWS iOS SDK v2 в свой проект Swift. Проблема в том, что я пытаюсь использовать два разных региона (я работаю со своим основным регионом, eu-west-1 в Ирландии, но Mobile Analytics доступно только на сайте us-east-1 в Вирджинии).
У меня есть следующее в моем AppDelegate для инициализации Mobile Analytics:
let credentialsProviderForMobileAnalytics = AWSCognitoCredentialsProvider.credentialsWithRegionType(
AWSRegionType.USEast1,
accountId: "my_account_id",
identityPoolId: "pool_id",
unauthRoleArn: "XXX",
authRoleArn: "XXX"
)
let awsConfigurationForMobileAnalytics = AWSServiceConfiguration(
region: AWSRegionType.USEast1,
credentialsProvider: credentialsProviderForMobileAnalytics
)
AWSServiceManager.defaultServiceManager().setDefaultServiceConfiguration(awsConfigurationForMobileAnalytics)
var mobileAnalytics = AWSMobileAnalytics(forAppId: "MyAwsAppId")
Затем в функции, вызываемой из ViewController, где я хочу загрузить изображение на S3, у меня есть:
let credentialsProviderForS3 = AWSCognitoCredentialsProvider.credentialsWithRegionType(
AWSRegionType.EUWest1,
accountId: "my_account_id",
identityPoolId: "pool_id",
unauthRoleArn: "XXX",
authRoleArn: "XXX"
)
let awsConfigurationForS3 = AWSServiceConfiguration(
region: AWSRegionType.EUWest1,
credentialsProvider: credentialsProviderForS3
)
AWSServiceManager.defaultServiceManager().setDefaultServiceConfiguration(awsConfigurationForS3)
var transferManager = AWSS3TransferManager.defaultS3TransferManager()
var fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory().stringByAppendingPathComponent("temp"))
var uploadRequest1 : AWSS3TransferManagerUploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest1.bucket = "mybucket"
uploadRequest1.key = "my-image.jpeg"
uploadRequest1.body = fileURL
var task = transferManager.upload(uploadRequest1)
Если я прокомментирую один из двух вышеперечисленных разделов, соответствующая задача будет выполнена идеально (когда код для аналитики закомментирован, работает s3 и наоборот), но вместе это не сработает — подозреваю, что это потому, что я ставлю по умолчанию настройка сервиса с использованием AWSServiceManager.defaultServiceManager().setDefaultServiceConfiguration()
и тот факт, что я использую два разных региона, как-то все портит. Либо он отказывается регистрировать события в Mobile Analytics, либо прерывает загрузку с сообщением об ошибке.
NSUnderlyingError=0x17424ee20 "Операция не может быть завершена. (kCFErrorDomainCFNetwork error -1001.)", NSErrorFailingURLKey=https://s3.amazonaws.com/mybucket/my-image.jpeg})
Я попытался настроить диспетчер передачи для S3 следующим образом (и прокомментировал setDefaultServiceConfiguration
выше):
var transferManager = AWSS3TransferManager(configuration: awsConfigurationForS3, identifier: "S3")
что приводит к следующей ошибке при загрузке:
"Error Domain=com.amazonaws.AWSS3ErrorDomain Code=0 \"Операция не может быть завершена. (com.amazonaws.AWSS3ErrorDomain error 0.)\" UserInfo=0x1742e7e00 {HostId=sm4qLUbN2XfkNYefbSU4A95UXTwvNYEBz0+bALqeFzlcXJ7rOGWnr1Yg+8HoU4r2, Bucket=mybucket, Endpoint=mybucket.s3.amazonaws.com, Message=Корзина, к которой вы пытаетесь получить доступ используя указанную конечную точку. Пожалуйста, отправляйте все будущие запросы на эту конечную точку., Code=PermanentRedirect, RequestId=568728899BC328B0}"
Я также попытался передать «mybucket.s3.amazonaws.com» в качестве имени корзины, но это привело к ошибке, указывающей, что корзина не найдена.
Я действительно не уверен, что попробовать дальше. Надеюсь, вы, ребята, можете дать мне несколько советов о том, как разделить эти две интеграции и заставить их работать одновременно.