LaAWSMobile SDK for Unity è ora incluso nel kit SDK MobileAWS SDK for .NET. Questa guida fa riferimento alla versione archiviata dell'SDK Mobile per Unity. Per ulteriori informazioni, consultaChe cos'è ?AWSMobile SDK for Unity?
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Amazon DynamoDB
Amazon DynamoDB
AWS Mobile SDK for Unity fornisce una libreria di alto livello per lavorare con DynamoDB. È inoltre possibile effettuare richieste direttamente contro l'API DynamoDB di basso livello, ma per la maggior parte dei casi d'uso è consigliata la libreria di alto livello. LaAmazonDynamoDBClient è una parte particolarmente utile della libreria di alto livello. Utilizzando questa classe, è possibile eseguire diverse operazioni di creazione, lettura, aggiornamento ed eliminazione (CRUD) ed eseguire query.
Nota
Alcuni esempi di questo documento presuppongono l'uso di una variabile casella di testo denominataResultTextper visualizzare l'output di traccia.
Integrazione di Amazon DynamoDB
Per utilizzare DynamoDB in un'applicazione Unity, è necessario aggiungere Unity SDK al progetto. Se non l'hai già fatto,scarica l'SDK for Unity
Per utilizzare DynamoDB in un'applicazione, è necessario impostare le autorizzazioni corrette. Il seguente criterio IAM consente all'utente di eliminare, ottenere, inserire, scansionare e aggiornare gli elementi in una tabella DynamoDB specifica, identificata daARN:
{ "Statement": [{ "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable" }] }
Questa policy deve essere applicata ai ruoli assegnati al pool di identità Cognito, sostituendo la Resource
valore con l'ARN corretto per la tua tabella DynamoDB. Cognito crea automaticamente un ruolo per il tuo nuovo pool di identità e puoi applicare le policy a questo ruolo nellaConsole IAM
È necessario aggiungere o rimuovere le azioni consentite in base alle esigenze della tua app. Per ulteriori informazioni sulle policy IAM, consulta la sezione relativa all'utilizzo di IAM. Per ulteriori informazioni sulle policy specifiche di DynamoDB, consultaUtilizzo di IAM per controllare l'accesso alle risorse DynamoDB.
Creazione di una tabella DynamoDB
Ora che abbiamo configurato le autorizzazioni e le credenziali, creiamo una tabella DynamoDB per la nostra applicazione. Per creare una tabella, vai allaLa console DynamoDB
-
Fare clic su Create Table (Crea tabella).
-
Invio
Bookstore
come nome della tabella. -
SelezionaHashcome tipo di chiave primaria.
-
SelezionaNumbere inserisci
id
per il nome dell'attributo hash. Fai clic su Continue (Continua). -
Fare clic suContinuadi nuovo per saltare l'aggiunta di indici.
-
Imposta la capacità di lettura su
10
e la capacità di scrittura5
. Fai clic su Continue (Continua). -
Inserisci un'e-mail di notifica e fai clic suContinuaper creare allarmi di throughput.
-
Fai clic su Create (Crea). DynamoDB creerà il database.
Creazione di un client DynamoDB
Affinché la nostra app interagisca con una tabella DynamoDB, abbiamo bisogno di un client. Possiamo creare un client DynamodDB predefinito come segue:
var credentials = new CognitoAWSCredentials(IDENTITY_POOL_ID, RegionEndpoint.USEast1); AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials); DynamoDBContext Context = new DynamoDBContext(client);
LaAmazonDynamoLa classe DbClient è il punto di ingresso per l'API DynamoDB. La classe fornisce metodi di istanza per creare, descrivere, aggiornare ed eliminare tabelle, tra le altre operazioni. Context aggiunge un ulteriore livello di astrazione sul client e consente di utilizzare funzionalità aggiuntive come il modello di persistenza degli oggetti.
Descrizione di una tabella
Per ottenere una descrizione della nostra tabella DynamoDB, possiamo utilizzare il seguente codice:
resultText.text +=("\n*** Retrieving table information ***\n"); var request = new DescribeTableRequest { TableName = @"ProductCatalog" }; Client.DescribeTableAsync(request, (result) => { if (result.Exception != null) { resultText.text += result.Exception.Message; Debug.Log(result.Exception); return; } var response = result.Response; TableDescription description = response.Table; resultText.text += ("Name: " + description.TableName + "\n"); resultText.text += ("# of items: " + description.ItemCount + "\n"); resultText.text += ("Provision Throughput (reads/sec): " + description.ProvisionedThroughput.ReadCapacityUnits + "\n"); resultText.text += ("Provision Throughput (reads/sec): " + description.ProvisionedThroughput.WriteCapacityUnits + "\n"); }, null); }
In questo esempio, creiamo un client e unaDescribeTableRichiesta oggetto, assegna il nome della nostra tabella al TableName
e quindi passa l'oggetto della richiesta alDescribeTableMetodo asincrono sulAmazonDynamoOggetto DbClient. DescribeTableAsync accetta anche un delegato che verrà chiamato al termine dell'operazione asincrona.
Nota
Tutti i metodi asincroni sulAmazonDynamoDBClient prende i delegati che vengono chiamati al termine dell'operazione asincrona.
Salva un oggetto
Per salvare un oggetto in DynamoDB, utilizzare ilSaveAsync<T>metodo delAmazonDynamooggetto DBClient, dove T è il tipo di oggetto che si sta salvando.
Abbiamo chiamato il nostro database «Bookstore» e, in linea con quel tema, implementeremo un modello di dati che registra gli attributi relativi al libro. Ecco le classi che definiscono il nostro modello di dati.
[DynamoDBTable("ProductCatalog")] public class Book { [DynamoDBHashKey] // Hash key. public int Id { get; set; } [DynamoDBProperty] public string Title { get; set; } [DynamoDBProperty] public string ISBN { get; set; } [DynamoDBProperty("Authors")] // Multi-valued (set type) attribute. public List<string> BookAuthors { get; set; } }
Naturalmente, per una vera applicazione di libreria avremmo bisogno di campi aggiuntivi per cose come autore e prezzo. La classe Book è decorata con l'attributo [DynamoDBTable], che definisce gli oggetti della tabella di database di tipo Book verranno scritti. La chiave per ogni istanza della classe Book è identificata utilizzando [DynamoDB]HashKey] attributo. Le proprietà sono identificate con l'attributo [DynamoDBProperty], specificando la colonna nella tabella del database in cui verrà scritta la proprietà. Con il modello in posizione, possiamo scrivere alcuni metodi per creare, recuperare, aggiornare ed eliminare gli oggetti Book.
Creazione di un libro
private void PerformCreateOperation() { Book myBook = new Book { Id = bookID, Title = "object persistence-AWS SDK for.NET SDK-Book 1001", ISBN = "111-1111111001", BookAuthors = new List<string> { "Author 1", "Author 2" }, }; // Save the book. Context.SaveAsync(myBook,(result)=>{ if(result.Exception == null) resultText.text += @"book saved"; }); }
Recupera un libro
private void RetrieveBook() { this.displayMessage += "\n*** Load book**\n"; Context.LoadAsync<Book>(bookID, (AmazonDynamoResult<Book> result) => { if (result.Exception != null) { this.displayMessage += ("LoadAsync error" +result.Exception.Message); Debug.LogException(result.Exception); return; } _retrievedBook = result.Response; this.displayMessage += ("Retrieved Book: " + "\nId=" + _retrievedBook.Id + "\nTitle=" + _retrievedBook.Title + "\nISBN=" + _retrievedBook.ISBN); string authors = ""; foreach(string author in _retrievedBook.BookAuthors) authors += author + ","; this.displayMessage += "\nBookAuthor= "+ authors; this.displayMessage += ("\nDimensions= "+ _retrievedBook.Dimensions.Length + " X " + _retrievedBook.Dimensions.Height + " X " + _retrievedBook.Dimensions.Thickness); }, null); }
Aggiornamento di un libro
private void PerformUpdateOperation() { // Retrieve the book. Book bookRetrieved = null; Context.LoadAsync<Book>(bookID,(result)=> { if(result.Exception == null ) { bookRetrieved = result.Result as Book; // Update few properties. bookRetrieved.ISBN = "222-2222221001"; // Replace existing authors list with this bookRetrieved.BookAuthors = new List<string> { "Author 1", "Author x" }; Context.SaveAsync<Book>(bookRetrieved,(res)=> { if(res.Exception == null) resultText.text += ("\nBook updated"); }); } }); }
Eliminazione di un libro
private void PerformDeleteOperation() { // Delete the book. Context.DeleteAsync<Book>(bookID,(res)=> { if(res.Exception == null) { Context.LoadAsync<Book>(bookID,(result)=> { Book deletedBook = result.Result; if(deletedBook==null) resultText.text += ("\nBook is deleted"); }); } }); }