1

这是我得到的错误:

AWSiOSSDKv2 [错误] AWSMobileAnalyticsDefaultDeliveryClient.m 行:282
| -[AWSMobileAnalyticsDefaultDeliveryClient submitEvents:andUpdatePolicies:]
| 无法成功地将事件传递到服务器。响应码:0。
错误信息:
错误域=com.amazonaws.AWSCognitoIdentityErrorDomain 代码=6
操作无法完成。

我在 IAM 中有 AuthRole 并具有以下策略:

{
  "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
}

application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)两者都在函数中的 AppDelegate 中依次调用。

编辑/解决方案:经过另一次检查,创建 Cognito 身份池的一个步骤确实创建了一个角色,但这个角色没有分配给unauthenticated role......愚蠢的事情,一如既往地在 AWS 上进行正确的管理。

4

2 回答 2

3

该问题与 CognitoIdentity 有关,与 MobileAnalytics 无关。根据文档, AWSCognitoIdentityErrorDomain Code=6 表示InvalidIdentityPoolConfiguration

“身份池没有与给定身份验证类型 (auth/unauth) 关联的角色,或者如果 AssumeRole 失败。”

我的建议是登录 AWS Web Console -> Cognito,仔细检查您的身份池的设置。并确保 RegionType 与您在 Web 控制台(屏幕右上角)中创建的匹配: CognitoIdentity current support us-east-1eu-west-1

对于 MobileAnalytics,请确保仅将 configuration.serviceConfiguration.regionType 设置为us-east-1

http://docs.aws.amazon.com/AWSiOSSDK/latest/Constants/AWSCognitoIdentityErrorType.html

于 2015-05-12T19:48:58.890 回答
2

您似乎正在尝试使用 AWSRegionUSEast1 以外的区域。Amazon Mobile Analytics Service 目前仅在 AWSRegionUSEast1 中可用。

具体来说:

AWSServiceConfiguration(region: Config().amazonRegionType,
    credentialsProvider: credentialsProvider)

应该:

AWSServiceConfiguration(region: AWSRegionUSEast1,
    credentialsProvider: credentialsProvider)

虽然您可以使用任何可用的 Cognito 身份区域,但必须将事件提交到 AWSRegionUSEast1。

让 credentialsProvider = AWSCognitoCredentialsProvider(
        区域类型:AWSRegionEUWest1,
        identityPoolId: Config().amazonCognitoIdentityPool)
让配置 = AWSServiceConfiguration(区域:AWSRegionUSEast1,
        凭据提供者:凭据提供者)
于 2015-05-12T18:02:20.733 回答