身份验证后在iOS中使用DynamoDB

身份验证后在iOS中使用DynamoDB,ios,swift,amazon-web-services,amazon-dynamodb,Ios,Swift,Amazon Web Services,Amazon Dynamodb,为了在AWS上建立一个可以从iOS应用程序创建和使用用户帐户的系统,我最近遵循了这一点。它使用AWSMobileClient、AWSAuthCore和AWSAuthUI 我做了一些工作,在那里我可以创建帐户并登录和注销 现在我想使用DynamoDB来允许用户存储一些东西。为此,我尝试集成我在另一个应用程序中使用的DynamoDB代码。但很明显,这两个应用程序的环境并不完全相同,因此它不能像我希望的那样工作 下面是我要处理的DynamoDB数据的代码: import Foundation impo

为了在AWS上建立一个可以从iOS应用程序创建和使用用户帐户的系统,我最近遵循了这一点。它使用
AWSMobileClient
AWSAuthCore
AWSAuthUI

我做了一些工作,在那里我可以创建帐户并登录和注销

现在我想使用
DynamoDB
来允许用户存储一些东西。为此,我尝试集成我在另一个应用程序中使用的
DynamoDB
代码。但很明显,这两个应用程序的环境并不完全相同,因此它不能像我希望的那样工作

下面是我要处理的DynamoDB数据的代码:

import Foundation
import AWSDynamoDB

@objcMembers
class DynamoDBData: AWSDynamoDBObjectModel, AWSDynamoDBModeling {

    var _message,_timeStamp,_user: String?

    class func dynamoDBTableName() -> String {
        return "DynamoDBData"
    }

    class func hashKeyAttribute() -> String {
        return "_timeStamp"
    }

    class func rangeKeyAttribute() -> String {
        return "_user"
    }

    override class func jsonKeyPathsByPropertyKey() -> [AnyHashable: Any] {
        return [
            "_message" : "message",
            "_timeStamp" : "timeStamp",
            "_user" : "user"
        ]
    }
}
下面是我试图将某些内容保存到DB并导致崩溃的代码:

@objc func handleTap() {
    print(#function)
    let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default() // Here the app is crashing.

    // Create data object using the data model:
    let dataBlock = DynamoDBData()
    dataBlock?._message = "message-TEST"
    dataBlock?._timeStamp = "timeStamp-TEST"
    dataBlock?._user = "user-TEST"

    // Save the new item:
    dynamoDbObjectMapper.save(dataBlock!, completionHandler: {
        (error: Error?) -> Void in

        if let error = error {
            print("Amazon DynamoDB Save Error: \(error)")
            return
        }
        print("An item was saved.")
    })
}
最后,这是我在应用程序崩溃时收到的消息:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'The service configuration is `nil`. You need to configure `Info.plist` 
or set `defaultServiceConfiguration` before using this method.'

关于如何从这里向前推进的一些指导(甚至是部分指导)将非常有用。

检查您的
awsconfiguration.json
是否有以下条目:

    "DynamoDBObjectMapper": {
        "Default": {
            "Region": "AWS_REGION_NAME"
        }
    }

设置您自己的
AWS\u REGION\u NAME
(例如
us-east-1
)。

这似乎是一个很好的建议,因为它不再崩溃。但我仍然得到一个错误:Amazon DynamoDB Save error:error Domain=com.amazonaws.AWSServiceErrorDomain Code=6“(null)”UserInfo={uuuu type=com.amazon.coral.service#AccessDeniedException,Message=User:arn:aws:sts::…:假定角色/aws amp-cog-dyn-…-authorole/CognitoIdentityCredentials无权在资源上执行:dynamodb:UpdateItem:arn:aws:dynamodb:ap-northeast-1:…:table/DynamoDBData}登录用户“假定”为“authorole”如上所述。看起来此角色没有对DynamoDB的正确访问权限。登录AWS控制台并导航到IAM,Roles。应列出身份验证角色(以及未登录用户的未授权角色)。请查看将AmazondynamodFullAccess策略附加到身份验证角色是否解决了此问题。(只有在进行故障排除时才应提供完全访问权限)。以下是如何添加更细粒度的策略:。如果访问问题持续存在,您可能希望创建一个新问题。事实上,我再次按照您的指示进行了操作,并取得了一些进展。但它仍然不完全起作用。我在此处创建了一个新问题:。同时,我接受您的回答,因为这是您添加的注释显然允许的让我向前走几步。