Creare applicazioni per dispositivi mobili con Xamarin e Azure Cosmos DBBuild mobile applications with Xamarin and Azure Cosmos DB

Molte app per dispositivi mobili devono archiviare i dati nel cloud e Azure Cosmos DB è appunto un database su cloud per le app per dispositivi mobili.Most mobile apps need to store data in the cloud, and Azure Cosmos DB is a cloud database for mobile apps. Include tutto ciò di cui uno sviluppatore per dispositivi mobili ha bisogno.It has everything a mobile developer needs. È un database completamente gestito come un servizio che offre scalabilità su richiesta.It is a fully managed database as a service that scales on demand. È capace di inserire i dati all'applicazione in modo trasparente, ovunque si trovino gli utenti, in tutto il mondo.It can bring your data to your application transparently, wherever your users are located around the globe. Usando Azure Cosmos DB .NET Core SDK è possibile abilitare le app Xamarin per dispositivi mobili a interagire direttamente con Azure Cosmos DB, senza un livello intermedio.By using the Azure Cosmos DB .NET Core SDK, you can enable Xamarin mobile apps to interact directly with Azure Cosmos DB, without a middle tier.

Questo articolo contiene un'esercitazione per la creazione di app per dispositivi mobili con Xamarin e Azure Cosmos DB.This article provides a tutorial for building mobile apps with Xamarin and Azure Cosmos DB. È possibile trovare il codice sorgente completo per l'esercitazione in Xamarin e Azure Cosmos DB su Github, incluse le modalità per gestire utenti e autorizzazioni.You can find the complete source code for the tutorial at Xamarin and Azure Cosmos DB on GitHub, including how to manage users and permissions.

Capacità di Azure Cosmos DB per le app per dispositivi mobiliAzure Cosmos DB capabilities for mobile apps

Azure Cosmos DB offre le seguenti funzionalità principali per gli sviluppatori di app per dispositivi mobili:Azure Cosmos DB provides the following key capabilities for mobile app developers:

Capacità di Azure Cosmos DB per le app per dispositivi mobili

  • Query avanzate su dati senza schema.Rich queries over schemaless data. Azure Cosmos DB archivia i dati come documenti JSON senza schema in insiemi eterogenei.Azure Cosmos DB stores data as schemaless JSON documents in heterogeneous collections. Offre query avanzate e veloci senza la necessità di occuparsi di indici o schemi.It offers rich and fast queries without the need to worry about schemas or indexes.
  • Alta velocità effettiva.Fast throughput. Bastano pochi millisecondi per leggere e scrivere documenti con Azure Cosmos DB.It takes only a few milliseconds to read and write documents with Azure Cosmos DB. Gli sviluppatori possono specificare la velocità effettiva di cui hanno bisogno e Azure Cosmos DB la rispetta con un contratto di servizio con disponibilità del 99,99% per tutti gli account in una singola area e tutti gli account in più aree con coerenza media e con disponibilità in lettura del 99,999% per tutti gli account di database in più aree.Developers can specify the throughput they need, and Azure Cosmos DB honors it with 99.99% availability SLA for all single region accounts and all multi-region accounts with relaxed consistency, and 99.999% read availability on all multi-region database accounts.
  • Scalabilità senza limiti.Limitless scale. Gli insiemi di Azure Cosmos DB crescono al crescere dell'app.Your Azure Cosmos DB collections grow as your app grows. È possibile iniziare con dati di piccole dimensioni e velocità effettiva di centinaia di richieste al secondo.You can start with small data size and throughput of hundreds of requests per second. Le raccolte possono aumentare fino a petabyte di dati e velocità effettiva di grandi dimensioni con centinaia di milioni di richieste al secondo.Your collections can grow to petabytes of data and arbitrarily large throughput with hundreds of millions of requests per second.
  • Distribuzione a livello globale.Globally distributed. Gli utenti dell'app per dispositivi mobili viaggiano spesso in tutto il mondo.Mobile app users are on the go, often across the world. Azure Cosmos DB è un database distribuito a livello globale.Azure Cosmos DB is a globally distributed database. Fare clic sulla mappa per rendere i dati accessibili agli utenti.Click the map to make your data accessible to your users.
  • Autorizzazioni avanzate integrate.Built-in rich authorization. Con Azure Cosmos DB è possibile implementare facilmente modelli diffusi come i dati per utente o i dati condivisi fra più utenti senza codice di autorizzazione personalizzato complesso.With Azure Cosmos DB, you can easily implement popular patterns like per-user data or multiuser shared data, without complex custom authorization code.
  • Query geospaziali.Geospatial queries. Molte app per dispositivi mobili offrono oggi un'esperienza geografica contestuale.Many mobile apps offer geo-contextual experiences today. Grazie all'eccellente supporto per i tipi geospaziali, con Azure Cosmos DB è facile creare queste esperienze.With first-class support for geospatial types, Azure Cosmos DB makes creating these experiences easy to accomplish.
  • Allegati binari.Binary attachments. I dati dell'app includono spesso BLOB binari.Your app data often includes binary blobs. Il supporto nativo per gli allegati facilita l'uso di Azure Cosmos DB come unica risorsa per i dati dell'app.Native support for attachments makes it easier to use Azure Cosmos DB as a one-stop shop for your app data.

Esercitazione su Azure Cosmos DB e XamarinAzure Cosmos DB and Xamarin tutorial

L'esercitazione seguente illustra come creare un'app per dispositivi mobili usando Xamarin e Azure Cosmos DB.The following tutorial shows how to build a mobile application by using Xamarin and Azure Cosmos DB. È possibile trovare il codice sorgente completo per l'esercitazione in Xamarin e Azure Cosmos DB su Github.You can find the complete source code for the tutorial at Xamarin and Azure Cosmos DB on GitHub.

Attività inizialiGet started

Iniziare a usare Azure Cosmos DB è molto semplice.It's easy to get started with Azure Cosmos DB. Aprire il portale di Azure per creare un account Azure Cosmos DB.Go to the Azure portal, and create a new Azure Cosmos DB account. Fare clic sulla scheda Avvio rapido. Scaricare l'esempio di elenco di cose da fare di Xamarin Forms che è già connesso all'account Azure Cosmos DB.Click the Quick start tab. Download the Xamarin Forms to-do list sample that is already connected to your Azure Cosmos DB account.

Avvio rapido di Azure Cosmos DB per le app per dispositivi mobili

Oppure, se si dispone di un'app Xamarin esistente, è possibile aggiungere il pacchetto Azure Cosmos DB NuGet.Or if you have an existing Xamarin app, you can add the Azure Cosmos DB NuGet package. Azure Cosmos DB supporta le librerie condivise Xamarin.IOS, Xamarin.Android e Xamarin Forms.Azure Cosmos DB supports Xamarin.IOS, Xamarin.Android, and Xamarin Forms shared libraries.

Usare i datiWork with data

I record di dati vengono archiviati in Azure Cosmos DB come documenti JSON senza schema in insiemi eterogenei.Your data records are stored in Azure Cosmos DB as schemaless JSON documents in heterogeneous collections. È possibile archiviare documenti con strutture diverse nello stesso insieme:You can store documents with different structures in the same collection:

    var result = await client.CreateDocumentAsync(collectionLink, todoItem);

Nei progetti Xamarin è possibile usare Language Integrated Query su dati senza schema:In your Xamarin projects, you can use language-integrated queries over schemaless data:

    var query = await client.CreateDocumentQuery<ToDoItem>(collectionLink)
                    .Where(todoItem => todoItem.Complete == false)
                    .AsDocumentQuery();

    Items = new List<TodoItem>();
    while (query.HasMoreResults) {
        Items.AddRange(await query.ExecuteNextAsync<TodoItem>());
    }

Aggiungi utentiAdd users

Come molti esempi introduttivi, l'esempio di Azure Cosmos DB che è stato scaricato si autentica al servizio usando la chiave master specificata nel codice dell'app.Like many get started samples, the Azure Cosmos DB sample you downloaded authenticates to the service by using a master key hardcoded in the app's code. Questa operazione predefinita non è una buona pratica per un'app che si vuole eseguire da qualsiasi posizione che non sia l'emulatore locale.This default is not a good practice for an app you intend to run anywhere except on your local emulator. Se un utente non autorizzato ottiene la chiave master, tutti i dati nell'intero account Azure Cosmos DB potrebbero essere compromessi.If an unauthorized user obtained the master key, all the data across your Azure Cosmos DB account could be compromised. Si desidera invece che l'app abbia accesso solo ai record per l'utente connesso.Instead, you want your app to access only the records for the signed-in user. Azure Cosmos DB consente agli sviluppatori di concedere all'applicazione l'autorizzazione in lettura o in lettura/scrittura a un insieme, un set di documenti raggruppati in base a una chiave di partizione o a un documento specifico.Azure Cosmos DB allows developers to grant application read or read/write permission to a collection, a set of documents grouped by a partition key, or a specific document.

Seguire questa procedura per modificare l'app dell'elenco attività e trasformarla in un'app di elenco attività multiutente:Follow these steps to modify the to-do list app to a multiuser to-do list app:

  1. Aggiungere l'accesso all'app tramite Facebook, Active Directory o qualsiasi altro provider.Add Login to your app by using Facebook, Active Directory, or any other provider.

  2. Creare un insieme Azure Cosmos DB UserItems con /userId come chiave di partizione.Create an Azure Cosmos DB UserItems collection with /userId as the partition key. Specificare la chiave di partizione per l'insieme consente ad Azure Cosmos DB di scalare infinitamente quando il numero degli utenti dell'app cresce, continuando a offrire query veloci.Specifying the partition key for your collection allows Azure Cosmos DB to scale infinitely as the number of your app users grows, while continuing to offer fast queries.

  3. Aggiungere il broker dei token delle risorse di Azure Cosmos DB.Add Azure Cosmos DB Resource Token Broker. una semplice API Web che autentica gli utenti ed emette token di breve durata, per gli utenti che hanno eseguito l'accesso, con il solo accesso ai documenti interni alla partizione dell'utente.This simple Web API authenticates users and issues short-lived tokens to signed-in users with access only to the documents within their partition. In questo esempio si ospita Resource Token Broker nel servizio app.In this example, Resource Token Broker is hosted in App Service.

  4. Modificare l'app per l'autenticazione in Resource Token Broker con Facebook e richiedere i token di risorsa per l'utente di Facebook.Modify the app to authenticate to Resource Token Broker with Facebook, and request the resource tokens for the signed-in Facebook users. È quindi possibile accedere ai propri dati nella raccolta UserItems.You can then access their data in the UserItems collection.

È possibile trovare un esempio di codice completo di questo modello in Resource Token Broker su Github.You can find a complete code sample of this pattern at Resource Token Broker on GitHub. Questo diagramma illustra la soluzione:This diagram illustrates the solution:

Utenti di Azure Cosmos DB e broker delle autorizzazioni

Se si desidera che due utenti abbiano accesso allo stesso elenco di attività, è necessario aggiungere altre autorizzazioni al token di accesso in Resource Token Broker.If you want two users to have access to the same to-do list, you can add additional permissions to the access token in Resource Token Broker.

Scalabilità su richiestaScale on demand

Azure Cosmos DB è un database distribuito come servizio.Azure Cosmos DB is a managed database as a service. Anche se la base di utenti aumenta, non è necessario preoccuparsi del provisioning delle VM o della crescita delle memorie centrali.As your user base grows, you don't need to worry about provisioning VMs or increasing cores. È sufficiente indicare ad Azure Cosmos DB quante operazioni al secondo, ovvero la velocità effettiva, sono richieste dall'app.All you need to tell Azure Cosmos DB is how many operations per second (throughput) your app needs. È possibile specificare la velocità effettiva tramite la scheda Scalabilità usando una misura della velocità effettiva chiamata unità richiesta (UR) al secondo.You can specify the throughput via the Scale tab by using a measure of throughput called Request Units (RUs) per second. Ad esempio un'operazione di lettura su un documento da 1 KB richiede 1 UR.For example, a read operation on a 1-KB document requires 1 RU. È possibile anche aggiungere avvisi per la metrica Velocità effettiva per monitorare l'incremento del traffico e modificare la velocità effettiva a livello di codice quando gli avvisi vengono attivati.You can also add alerts to the Throughput metric to monitor the traffic growth and programmatically change the throughput as alerts fire.

Scalabilità della velocità effettiva su richiesta di Azure Cosmos DB

Passare alla scala globaleGo planet scale

Con la diffusione dell'app, si possono acquisire utenti in tutto il mondo.As your app gains popularity, you might gain users across the globe. O forse si desidera essere preparati per gli eventi imprevisti.Or maybe you want to be prepared for unforeseen events. Aprire il portale di Azure e aprire un account Azure Cosmos DB.Go to the Azure portal, and open your Azure Cosmos DB account. Fare clic sulla mappa per fare in modo che i dati vengano replicati continuamente in un determinato numero di aree geografiche in tutto il mondo.Click the map to make your data continuously replicate to any number of regions across the world. Questa funzionalità rende disponibili i dati, indipendentemente dalla posizione dell'utente.This capability makes your data available wherever your users are. È inoltre possibile aggiungere criteri di failover per prevedere le contingenze.You can also add failover policies to be prepared for contingencies.

Scalabilità fra aree geografiche di Azure Cosmos DB

A questo puntoCongratulations. La soluzione è stata completata e si dispone di un'app per dispositivi mobili con Xamarin e Azure Cosmos DB.You have completed the solution and have a mobile app with Xamarin and Azure Cosmos DB. Seguire una procedura simile per creare app Cordova usando Azure Cosmos DB JavaScript SDK e app native per iOS/Android con le API REST di Azure Cosmos DB.Follow similar steps to build Cordova apps by using the Azure Cosmos DB JavaScript SDK and native iOS/Android apps by using Azure Cosmos DB REST APIs.

Passaggi successiviNext steps