Я пытаюсь использовать DynamoDB с помощью iOS Swift SDK. Я использую Cognito с Facebook в качестве внешнего поставщика удостоверений. Cognito работает нормально - я протестировал синхронизацию пользователей, и она работает нормально, поэтому я считаю, что у меня настроена аутентификация. Вот как я настраиваю SDK (в моем коде есть фактические значения моего пула идентификаторов):
let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1,
identityPoolId:"<my-identity-pool-id>", identityProviderManager: FacebookProvider())
let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
И вот мой сопоставленный класс DynamoDB:
import Foundation
import AWSDynamoDB
class SavedItem : AWSDynamoDBObjectModel, AWSDynamoDBModeling {
var userId : Int?
var timestamp : Int?
class func dynamoDBTableName() -> String {
return "my-table"
}
class func hashKeyAttribute() -> String {
return "userId"
}
class func rangeKeyAttribute() -> String {
return "timestamp"
}
}
Я проверил, что мой код имеет правильные имена таблиц и атрибутов и что значения хеш-ключа и ключа диапазона в таблице идентичны, включая чувствительность к регистру, с полями в моем классе SavedItem
.
Вот как я создаю экземпляр картографа:
let dynamoDBObjectMapper = AWSDynamoDBObjectMapper.default()
let savedItem = SavedItem()
savedItem?.userId = 1
savedItem?.timestamp = 2
dynamoDBObjectMapper.save(savedItem!).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in
if let error = task.error as? NSError {
print("The request failed. Error: \(error)")
} else {
print("Save callback executing")
}
return nil
})
Этот код более или менее прямо из примера документации AWS. Но вот что я возвращаю в консоль, когда этот код выполняется:
Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=0 "(null)" UserInfo={__type=com.amazon.coral.validate#ValidationException, message=Supplied AttributeValue is empty, must contain exactly one of the supported datatypes}
Я включил ведение журнала консоли для отладки, и похоже, что сопоставитель не отправляет никаких атрибутов из объекта SavedItem
. Вот что отображается в консоли для тела запроса save
:
Request body:
{"Key":{"userId":{},"timestamp":{}},"TableName":"my-table","AttributeUpdates":{}}
Есть идеи, почему значения не включаются в тело запроса на сохранение?
Использование aws-sdk-ios v2.6.1 в Swift 4 на iOS 11.