none
[XAMARIN] Domande sulla prima app collegata ad Azure RRS feed

  • Domanda

  • Ciao a tutti!

    Inizio una discussione poiché voglio capire bene come sviluppare un'applicazione xamarin collegata ai servizi Azure.
    Ho installato la versione visual studio 2017 RC sul mio pc e ho creato un'applicazione di prova dal portale Azure seguendo le indicazioni per creare una "Mobile App Quickstarter".

    Scarico e compilo l'applicazione, tutto funziona correttamente ed inserisco alcuni elementi a caso.

    Cliccando sul pulsante "+" l'applicazione, da quello che ho capito, contatta il servizio creato su Azure ed inserisce nel database l'elemento creato, giusto?
    Nel codice dell'applicazione noto che l'elemento che inserisco nel campo del testo passerà dalla classe "TodoItem.cs".

    Questo è il metodo che si scatena cliccando sul pulsante "+":

            async Task AddItem(TodoItem item)
            {
                await manager.SaveTaskAsync(item);
                todoList.ItemsSource = await manager.GetTodoItemsAsync();
            }

    Suppongo che modificando la classe in questione, aggiungendoci altri campi, potrò avere sincronizzato questi elementi, ma non capisco cosa succede quando seleziono un elemento dalla lista e, nel messaggio che compare, clicco su "Complete":

    In che senso "Desidero completare Ciao"? Nel metodo non ci sono grosse differenze rispetto a quello precedente:

            async Task CompleteItem(TodoItem item)
            {
                item.Done = true;
                await manager.SaveTaskAsync(item);
                todoList.ItemsSource = await manager.GetTodoItemsAsync();
            }

    La differenze è che cliccando "Complete", l'elemento scompare.

    Da Azure sono andato a vedere se ci sono stati cambiamenti ed ho notato piccole variazioni del grafico:

    La mia domanda quindi è: "Cosa succede in questo caso?".

    Un'altra cosa.. Ho provato a compilare l'applicazione su diversi emulatori (sempre utilizzando vs 17 RC) e se da un lato la sincronizzazione dei dati è utilissima, dall'altro non capisco come questa cosa possa essere resa privata tra i vari utenti (come dovrebbe essere).
    Voglio dire, al momento della creazione dell'applicazione, ho inserito un nome utente ed una password per creare il database su Azure. Aprendo l'applicazione, accedo con queste credenziali al servizio. Ma se al momento della pubblicazione ufficiale nello store, 2 utenti differenti utilizzano lo stesso database con le stesse credenziali, cosa impedisce all'utente "A" di accedere ai dati dell'utente "B"? Forse la domanda è banale e stupida. Ma sono qui per capire queste cose.

    Un'altra domanda riguarda la visualizzazione del database dal portale Azure. Suppongo che non possa visualizzare i dati inseriti nel database, corretto?

    Potete aiutarmi? grazie!


    Alessandro




    • Modificato Inviasubito giovedì 19 gennaio 2017 14:21 Modifica del titolo. Aggiunti più dettagli
    • Tipo modificato Inviasubito sabato 18 marzo 2017 16:08 per risposta
    giovedì 19 gennaio 2017 14:17

Risposte

  • Ciao

    Andiamo con ordine :D

    Il database non puoi vederlo da Azure ma puoi accederci con qualsiasi client che supporti sql server, il modo più semplice una volta che hai aperto il database sul portale azure è di selezionare il pulsante strumenti e da li apri in visual studio, vedrai che ti si aprirà visual studio dove dovrai mettere la password e vedere i dati del db.

    L'esempio che stai utilizzando tu sincronizza la todo list con azure, in questo caso se metti l'elemento come completo vedrai il campo sul database completed messo a True, se analizzi il codice del server vedrai che i risultati vengono filtrati proprio per completed per mostrare solo quelli non completati, per questo non lo vedi nella lista.

    Per quanto riguarda la sincronizzazione tra diversi utenti con dati privati dovrai prima far autenticare l'utente e poi lato server (modificando il codice che hai già scaricato e messo sul tuo server per fare i test) dovrai validare l'utente e ritornare i dati specifici.

    Qui trovi un esempio dell'autenticazione

    https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/azure/

    Ci ho sbattuto la testa poco tempo fa anche io ed è più complicato a dirsi che a farsi.

    Ti consiglio di iniziare a smanettare con l'esempio in modalità singolo utente, capendo bene i vari meccanismi e facendo vari test, per poi passare alla parte multiutente.

    Buon divertimento :D

    Alessio

    • Contrassegnato come risposta Inviasubito sabato 18 marzo 2017 16:09
    giovedì 19 gennaio 2017 20:14

Tutte le risposte

  • Ciao

    Andiamo con ordine :D

    Il database non puoi vederlo da Azure ma puoi accederci con qualsiasi client che supporti sql server, il modo più semplice una volta che hai aperto il database sul portale azure è di selezionare il pulsante strumenti e da li apri in visual studio, vedrai che ti si aprirà visual studio dove dovrai mettere la password e vedere i dati del db.

    L'esempio che stai utilizzando tu sincronizza la todo list con azure, in questo caso se metti l'elemento come completo vedrai il campo sul database completed messo a True, se analizzi il codice del server vedrai che i risultati vengono filtrati proprio per completed per mostrare solo quelli non completati, per questo non lo vedi nella lista.

    Per quanto riguarda la sincronizzazione tra diversi utenti con dati privati dovrai prima far autenticare l'utente e poi lato server (modificando il codice che hai già scaricato e messo sul tuo server per fare i test) dovrai validare l'utente e ritornare i dati specifici.

    Qui trovi un esempio dell'autenticazione

    https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/azure/

    Ci ho sbattuto la testa poco tempo fa anche io ed è più complicato a dirsi che a farsi.

    Ti consiglio di iniziare a smanettare con l'esempio in modalità singolo utente, capendo bene i vari meccanismi e facendo vari test, per poi passare alla parte multiutente.

    Buon divertimento :D

    Alessio

    • Contrassegnato come risposta Inviasubito sabato 18 marzo 2017 16:09
    giovedì 19 gennaio 2017 20:14
  • Ciao, grazie per la risposta. Ho trovato il filtro nel codice (che mi era proprio sfuggito :) ) ed un modo per vedere direttamente dal portale il database (si apre l'applicazione dal dashboard -> Easy Tables -> TodoItem).

    Ho provato ad aggiungere anche dei campi alla tabella per fare delle prove (e funzionano) e ho aggiunto l'autenticazione...

    Quest'ultima non funziona, mi dà "Autenticazione fallita con codice risposta http 404" su Windows, mentre su Android "Cannot GET /.auth/login/google". Ho provato altri provider, ma niente..

    Comunque non mi è chiara una cosa.. I dati sono trasmessi in chiaro, posso accedere a tutti i dati inseriti.. Se riuscissi a far funzionare l'autenticazione, i dati in questione verrebbero criptati? Cioè, parlando sempre per multi utente, adesso riesco a vedere i dati della tabella, ma non voglio che i miei dati vengano visti (da utente) dal programmatore.

    Questa è la tabella:


    Alessandro

    venerdì 20 gennaio 2017 09:20
  • Ciao

    per l'autenticazione controlla bene di aver messo tutte le chiavi corrette su azure e sull'app dei vari provider, altrimenti non funziona nulla.

    Per la tabella dovrai modificarla con un qualcosa tipo id_utente che userai come filtro sul server utilizzando i dati dell'autenticazione per ricavarlo

    Ciao

    Alessio

    venerdì 20 gennaio 2017 09:29
  • Ok, ma io potrò comunque sempre accedervi?

    Mi preoccupa il fatto che un programmatore qualsiasi possa accedere a dei dati, anche sensibili, dell'utente.


    Alessandro


    • Modificato Inviasubito venerdì 20 gennaio 2017 09:41
    venerdì 20 gennaio 2017 09:30
  • Ciao

    l'unico modo per leggere i dati ed accedere al database quindi conoscendone ip, username e password oltre ad avere l'ip sbloccato dal firewall di azure.

    La tua app fa richieste ad una parte server, dovresti aver scaricato una app web se hai fatto il backend in c# e poi l'hai importata su azure. qui come ti dicevo dovrai gestirti un tuo id utente e far vedere solo quei dati.

    Come potrebbe un terzo accederci?

    venerdì 20 gennaio 2017 10:54
  • Ciao

    l'unico modo per leggere i dati ed accedere al database quindi conoscendone ip, username e password oltre ad avere l'ip sbloccato dal firewall di azure.

    Ok, questo è quasi scontato.

    La tua app fa richieste ad una parte server, dovresti aver scaricato una app web se hai fatto il backend in c# e poi l'hai importata su azure. qui come ti dicevo dovrai gestirti un tuo id utente e far vedere solo quei dati.

    Come potrebbe un terzo accederci?

    Questa parte non mi è chiara...

    Forse non mi trovo perché non sono riuscito a completare il procedimento..
    Sono riuscito a far funzionare l'autenticazione, ma non ho scaricato alcuna app web...
    Qui (https://docs.microsoft.com/en-gb/azure/app-service-mobile/app-service-mobile-xamarin-forms-get-started-users) sono arrivato al punto "Restrict permissions to authenticated users" e non capisco dove trovare i file "TodoItemController.cs" e quello successivo.


    Alessandro

    venerdì 20 gennaio 2017 12:28
  • Ciao

    pensavo avessi già scaricato ed utilizzato la parte di backend in .net, qui trovi la guida su come fare e ti ritroverai anche i file che ti mancano e ti sarà tutto più chiaro :D

    E' da qui che puoi gestire l'autenticazione e filtrare le query

    https://docs.microsoft.com/en-gb/azure/app-service-mobile/app-service-mobile-dotnet-backend-how-to-use-server-sdk

    Ciao

    Alessio

    venerdì 20 gennaio 2017 15:15
  • Niente da fare...

    Non riesco a scaricare "Microsoft.Azure.Mobile.Server" per inserire al progetto la classe "OWIN"..

    **** AGGIORNAMENTO ***

    Penso di aver capito.. non credevo di dover creare una nuova applicazione, ma pensavo di aggiungere al progetto scaricato da Azure il nuovo elemento..
    Ora, quindi, scarico gli strumenti per lo sviluppo web su VS e poi continuerò a seguire la guida. Aggiornerò il post più avanti..


    Alessandro


    • Modificato Inviasubito venerdì 20 gennaio 2017 19:51
    venerdì 20 gennaio 2017 19:00
  • Ciao,

    si il progetto scaricato devi usarlo così com'è ci sono alcune librerie che hanno bisogno di versioni specifiche

    Ciao

    Alessio

    venerdì 20 gennaio 2017 23:34
  • Ciao, ho iniziato a seguire QUESTA guida, che la trovo leggermente più chiara.

    Il processo generale, comunque, me lo aspettavo molto meno complicato e "macchinoso" e il tempo a disposizione non mi aiuta :)


    Alessandro

    giovedì 26 gennaio 2017 18:31
  • Ciao,

    per fare una cosa completa bisogna lavorarci un po', visto che cmq fa molte cose ma ti assicuro che ne vale la pena :D

    Visto che cmq mi sembra che le tue domande hanno ricevuto una risposta puoi segnare  un mio post come risposta in modo da chiudere il thread, andando avanti poi se hai altri problemi puoi aprire altri thread per cercare una mano

    Ciao

    Alessio

    venerdì 27 gennaio 2017 06:27
  • Ovviamente!

    Grazie ancora!

    ** aggiorno **

    Scusami, ho provato a selezionare come risposta una delle tue, ma non me lo permette, forse perché le ho votate tutte (?)..


    Alessandro


    sabato 28 gennaio 2017 09:44
  • Ciao,

    per impostare una risposta devi cambiare il tipo del thread in domanda, altrimenti non puoi farlo.

    Se noti il primo post in questo thread ha un disegno diverso rispetto agli altri che hai aperto :D

    Ciao

    Alessio

    sabato 4 marzo 2017 07:46