Конфигурирование Amazon Mobile Analytics и AWS Cognito в моем приложении для iOS вызывает некоторые исключения, связанные с IAM
Вот ошибка, которую я получаю:
AWSiOSSDKv2 [Ошибка] AWSMobileAnalyticsDefaultDeliveryClient.m строка:282 | -[AWSMobileAnalyticsDefaultDeliveryClient submitEvents:andUpdatePolicies:] | Невозможно успешно доставить события на сервер. Код ответа: 0. Сообщение об ошибке: Ошибка домена =com.amazonaws.AWSCognitoIdentityErrorDomain Code=6 Операция не может быть завершена.
У меня есть AuthRole в IAM со следующей политикой:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Resource": [
"*"
]
}
]
}
И одна роль Unauth:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Resource": [
"*"
]
}
]
}
Упоминание строки в IAM под cognito-identity.amazonaws.com:aud
условия соответствуют тому, что заявлено в моем приложении.
Я не понимаю, где проблема.
РЕДАКТИРОВАТЬ
Код настройки (Swift).
private func _configureAWSServiceManager() {
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: Config().amazonRegionType,
identityPoolId: Config().amazonCognitoIdentityPool)
let configuration =
AWSServiceConfiguration(region: Config().amazonRegionType,
credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration =
configuration
}
private func _configureMobileAnalytics() {
let mobileAnalyticsConfiguration = AWSMobileAnalyticsConfiguration()
mobileAnalyticsConfiguration.transmitOnWAN = true;
let analytics = AWSMobileAnalytics(
forAppId: Config().amazonMobileAnalyticsAppId,
configuration: mobileAnalyticsConfiguration,
completionBlock: nil)
_analytics = analytics
}
Оба вызываются последовательно в AppDelegate в application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)
функция.
РЕДАКТИРОВАТЬ / Решение: после очередной проверки случается, что шаг создания Cognito Identity Pool действительно создал роль, но эта роль не была назначена в unauthenticated role
... Глупая вещь, как всегда при правильном управлении на AWS.
2 ответа
Проблема связана с CognitoIdentity, а не с MobileAnalytics. Согласно документу, AWSCognitoIdentityErrorDomain Code=6 означает InvalidIdentityPoolConfiguration.
"У пула удостоверений нет роли, связанной с данным типом аутентификации (auth/unauth) или в случае сбоя AssumeRole".
Моим предложением будет вход в AWS Web Console -> Cognito, дважды проверьте настройки пула удостоверений. и убедитесь, что RegionType соответствует тому, который вы создали в веб-консоли (в верхнем правом углу экрана): CognitoIdentity current поддерживает us-east-1 и eu-west-1.
Для MobileAnalytics убедитесь, что вы задали для configuration.serviceConfiguration.regionType только us-east-1.
http://docs.aws.amazon.com/AWSiOSSDK/latest/Constants/AWSCognitoIdentityErrorType.html
Похоже, вы пытаетесь использовать регион, отличный от AWSRegionUSEast1. Сервис Amazon Mobile Analytics в настоящее время доступен только в AWSRegionUSEast1.
В частности:
AWSServiceConfiguration(region: Config().amazonRegionType,
credentialsProvider: credentialsProvider)
Должно быть:
AWSServiceConfiguration(region: AWSRegionUSEast1,
credentialsProvider: credentialsProvider)
Хотя вы можете использовать любой доступный регион идентификации Cognito, события должны быть отправлены в AWSRegionUSEast1.
let credentialsProvider = AWSCognitoCredentialsProvider (regionType: AWSRegionEUWest1, identityPoolId: Config (). amazonCognitoIdentityPool) let configuration = AWSServiceConfiguration (регион: AWSRegionUSEast1, credentialsProvider: credentialsProvider)