Mobile services

836 views

Published on

Prezentacja o Windows Azure Mobile Services podczas Zawodowej Grupy .NET

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
836
On SlideShare
0
From Embeds
0
Number of Embeds
142
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • O firmie Whalla
  • START
  • Azure Mobile Services to :- DATASCHEDULERPUSHIDENTITYCONFIGURESCALELOGS
  • Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  • Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  • Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  • Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  • Po wejściu do wybranego projektu Mobile Services możemy ściagnąć przykładowe projekty i tutoriale do WP8, W8, Android, iOS, HTML/Javascript.Co możemy zobaczyć w :DASHBOARDWykresy wykorzystania usługi Generate schemaPodstawowe informacje o usłudze jak adres, lokacje, id subscription itp.DATAPrzejście do odpowiednich tabelSCHEDULERUstawienia dla scheduleraPUSHUstawienia dla odpowiednich notyfikacji jak : MS, Apple, Google.IDENTITYUstawinie dla uwierzytelniania jak FB, Googl, MS i TwitterCONFIGUREUstawienia bazy danychDynamic SchemaMonitoringSCALEUstawienie czy system ma być skalowalny i na ile maszynZmiana typu bazy danychLOGInformację o zapisywanych logach przez Nas i automatycznie przez usługe
  • Tabele tworzymy ręcznie a kolumny automatycznie.Każda tabla posiada 4 skrypty : create, update, read i deleteMożna ustawiać permission na tabele na każdą z operacji : everyone, anybody with the Application Key, Only Authenticated User, Only Scripts and Admins.
  • Tabele tworzymy ręcznie a kolumny automatycznie.Każda tabla posiada 4 skrypty : create, update, read i deleteMożna ustawiać permission na tabele na każdą z operacji : everyone, anybody with the Application Key, Only Authenticated User, Only Scripts and Admins.
  • Przykład kodu z tabelą
  • Zaczynamy od dodania możliwości tworzenia grupy w aplikacji
  • Zdebugować aplikacje
  • Wczytywanie grup (READ)Dodanie kodu dla tytułu (XAML)Dodanie listy do wyświetlenia grup (XAML)Kod wczytujący grupy (VM)
  • Mocno wspomagane skryptem po stronie serwera
  • Wczytywanie grup (READ)Dodanie kodu dla tytułu (XAML)Dodanie listy do wyświetlenia grup (XAML)Kod wczytujący grupy (VM)
  • Get started with authentication in Mobile ServicesTrzeba się każdorazowo logowaćStandardowo mamy dostępne 4 sposoby logowania.Linki :Microsoft AccountFacebook loginTwitter loginGoogle login
  • Należy stworzyć aplikacje, dodać stronę i pobrać API Key
  • Należy stworzyć aplikacje, dodać stronę i pobrać API Key
  • Co trzeba zrobic po stronie Mobile Servcies :Dodać klucze do FBUstawić usprawnienia do tabelPo ustawieniu uprawnień na tabele przy usuwaniu pokazać jaki jest wynik kiedy tego nie dopilnujemy
  • Co trzeba zrobic po stronie Mobile Servcies :Dodać klucze do FBUstawić usprawnienia do tabelPo ustawieniu uprawnień na tabele przy usuwaniu pokazać jaki jest wynik kiedy tego nie dopilnujemy
  • Dodanie strony do uwierzytelnianiaNadanie mu statusu pierwszej uruchamianejStworzenie miejsca do przetrzymywania inforamcji o użytkowniku zalogowanymDodanie kodu do logowania
  • INSERT function insert(item, user, request) {request.execute();}UPDATE function update(item, user, request) {request.execute();}DELETEfunction del(id, user, request) {request.execute();}READfunction read(query, user, request) {request.execute();}
  • function read(query, user, request) { query.where({ IdUser: user.userId }); request.execute();}
  • Rezerwacja nazwy w sklepieRejstracja w aplikacji , pobranie certyfikatuWybranie aplikacjiPobranie klucza do noyfikacji Push
  • Notyfikacja wysyłana z każdym dodaniem zadania
  • https://www.windowsazure.com/en-us/develop/mobile/tutorials/send-email-with-sendgrid/?fb=pl-pl
  • https://www.windowsazure.com/en-us/develop/mobile/tutorials/send-email-with-sendgrid/?fb=pl-pl
  • O firmie Whalla
  • Mobile services

    1. 1. Bartosz.zaremba@studentpartner.com
    2. 2. AZUREMobile Services
    3. 3. Agenda1. Wprowadzenie do Mobile Services2. Projekt – opis, funkcjonalności3. Tworzenie projektu4. Mobile Services w praktyce• Praca z danymi• Działanie po stronie serwera• Uwierzytelnianie• Notyfikacje Push• Łączenie z usługami zewnętrznymi (Sendgrid,Schedule)• Łączenie z usługami Azure (zdjęcia – Azure Storage)
    4. 4. Czym jest Azure MobileService?
    5. 5. ProjektProjekt ma na celu stworzenie programu pozwalającegozarządzad zadaniami w grupie sposobem ala Agile.Osoba posiadająca aplikację na Windows 8, będzie mogłatworzyd grupy, które maja na celu wykonanie wypisanychzadao. Twórca grupy będzie miał możliwośd dodawania zadaooraz grupowiczy.Każdy użytkownik posiadający wersję mobilną aplikacji(Windows Phone, Android, iPhone lub przeglądarka HTML)będzie mógł zobaczyd do jakich grup należy oraz jakie zadaniaznajdują się w grupie. Dodatkowo będzie mógł przypisad sobiezadanie oraz zaznaczyd, że skooczył je lub odpisad od Siebie.
    6. 6. Skrócony opis projektu – AgileNotepadW programie można dodawad grupy do których twórca (administrator) możedodawad zadania i grupowiczy.Wybrane zadania każdy możne przypisywad sobie do zrobienia. Dodatkowo poprzypisaniu zadania można zaznaczyd, że jest ono zrobione lub „odpisad” od siebie.Aby wejśd do programu należy się uwierzytelnid za pomocą konta FB.Kiedy właściciel doda zadanie do grupy wszyscy należacy do tej grupy zostanąpoinformowani o nowych zadaniach.Raz na tydzieo zostaje rozesłany mail do wszystkich o wolnych zadaniach.
    7. 7. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    8. 8. Jak się tworzy projekt -początek
    9. 9. Jak się tworzy projekt -początek
    10. 10. Jak się tworzy projekt -początekApp.xaml.cspublic static MobileServiceClient MobileService = newMobileServiceClient("https://agilenotepad.azure-mobile.net/", "[kod AMS]");
    11. 11. Jak się tworzy projekt -początekApp.xaml.cspublic static MobileServiceClient MobileService = newMobileServiceClient("https://agilenotepad.azure-mobile.net/", "[kod AMS]");
    12. 12. PORTALhttp://manage.windowsazure.comDEMO
    13. 13. Projekt bazy danychTabele :• Profile• Group• Connect• Job• Comments
    14. 14. public class Comment{[DataMember(Name = "id")]public string IdComment { get; set; }public string Desc { get; set; }//foreignpublic string IdTask { get; set; }public string IdUser { get; set; }}
    15. 15. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    16. 16. Operacje CRUD –CREATE/DELETEDEMOTworzenie/usuwanie grupy zadaniowej
    17. 17. Kod – stworzenie grupy1.<Button x:Name="btnAddGroup" HorizontalAlignment="Left"Style="{StaticResource AddAppBarButtonStyle}"View:EventHandlers.Attach="Click => OpenAddGroupCharm()" />public void OpenAddGroupCharm(){CharmService.OpenCharm("AddGroup");}2.<StackPanel Margin="10,50,10,15"><TextBlock>Name group</TextBlock><TextBox Name="txtNameGroup" /><Button Name="btnSaveName" Content="CREATE"CommandParameter="{Binding Path=Text,ElementName=txtNameGroup}"Command="{Binding AddNewGroup}"/></StackPanel>
    18. 18. 3.Wysłanie informacji o dodaniu grupyprivate DelegateCommand addNewGroup;public ICommand AddNewGroup{get{if (addNewGroup == null){addNewGroup = new DelegateCommand((x) =>{DispatchedMessenger.Instance.Send(newAddGroupMessage(x as String));});}return addNewGroup;}}Przechwycenie komunikatu[MessageHandler]public void BackgroundMessageHandler(AddGroupMessage message){AddGroup(message.NameGroup);}
    19. 19. public async void AddGroup(string NameG){try{Group item = new Group { IdUser =MainSettings.user.UserId, Name = NameG };await groupTable.InsertAsync(item);ListGroups.Add(item);MessageBoxService.Notify("Grupa została dodana","Dodawanie grupy");}catch (Exception e){MessageBoxService.Notify(e.Message, "Dodawanie grupy");}}
    20. 20. public static MobileServiceClient MobileService = newMobileServiceClient("https://agilenotepad.azure-mobile.net/", "");private IMobileServiceTable<Group> groupTable =App.MobileService.GetTable<Group>();await groupTable.InsertAsync(item);
    21. 21. function insert(item, user, request) {var groupTable = tables.getTable(Group);groupTable.where({Name: item.Name}).read({success: checkName});function checkName(results) {if (results.length > 0) {console.log("Nie dodawaj grupy");request.respond(statusCodes.BAD_REQUEST,"Już istniejetaka grupa");} else {console.log("Dodaj grupe");request.execute();}}}
    22. 22. Kod - usunięcie grupypublic static MobileServiceClient MobileService = newMobileServiceClient("https://agilenotepad.azure-mobile.net/", "");private IMobileServiceTable<Group> groupTable =App.MobileService.GetTable<Group>();Group item = new Group { id = xid };await groupTable.DeleteAsync(item);
    23. 23. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    24. 24. Operacje CRUD - READWyświetlanie grupy zadaniowej do któej się należy lub sięstworzyło.DEMO
    25. 25. Kod – wyświetlenie grupyprivate IMobileServiceTable<Group> groupTable =App.MobileService.GetTable<Group>();Dictionary<string, string> myParam = new Dictionary<string, string>();myParam.Add("ifMyGroups", "true");List<Group> list = await App.MobileService.GetTable<Group>().Skip(0).WithParameters(myParam).ToListAsync();Dictionary<string, string> myParam = new Dictionary<string, string>();myParam.Add("ifMyGroups", "false");List<Group> list = await App.MobileService.GetTable<Group>().Skip(0).WithParameters(myParam).ToListAsync();
    26. 26. function read(query, user, request) {if( request.parameters == null)console.log("Nie ma parametrow");if(request.parameters.ifMyGroups == true){query.where({ IdUser: user.userId });request.execute();console.log(„Pobrało moje grupy");}else{var sql = "SELECT g.id, g.Name, g.IdUser FROM[agilenotepad].[Connect] c,[agilenotepad].[Group] g WHERE c.IdGroup =g.id AND c.IdUser = ?;";mssql.query(sql, user.userId, {success: function(results) {request.respond(statusCodes.OK, results);}});}}
    27. 27. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    28. 28. Operacje CRUD - UPDATEZaktualizowanie profiu użytkownikaDEMO
    29. 29. Kod – tworzenie profilupublic static MobileServiceClient MobileService = newMobileServiceClient("https://agilenotepad.azure-mobile.net/", "");private IMobileServiceTable<Profile> profileTable;profileTable = App.MobileService.GetTable<Profile>();profileTable.UpdateAsync(MainSettings.UserInformation);
    30. 30. function update(item, user, request) {request.execute({success: function() {request.respond();push.wns.sendToastText04(item.channel, {text1: "Profil zaktualizowany"}, {success: function(pushResponse) {console.log(„Wysłana notyfikacja:", pushResponse);}});}});}
    31. 31. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    32. 32. Uwierzytelnianiew Mobile Services• Microsoft Account• Facebook login• Twitter login• Google login
    33. 33. FB - uwierzytelnianie
    34. 34. FB - uwierzytelnianie
    35. 35. Ustawenia w Mobile Services
    36. 36. Ustawenia w Mobile Services
    37. 37. AplikacjaUwierzytelnianie w aplikacji przez konto FBDEMO
    38. 38. Kod – tworzenie konta pouwierzytelnieniupublic static MobileServiceClient MobileService = newMobileServiceClient("https://agilenotepad.azure-mobile.net/","");MainSettings.user = awaitApp.MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook);private IMobileServiceTable<Profile> profileTable =App.MobileService.GetTable<Profile>();await profileTable.InsertAsync(entity);
    39. 39. function insert(item, user, request) {var profileTable = tables.getTable(Profile);profileTable.where({IdUser: item.IdUser}).read({success: checkPermissions});function checkPermissions(results) {if (results.length > 0) {//console.log("Nie dodawaj użytkownika");request.respond();} else {//console.log("Dodaj użytkownika");request.execute();}}}
    40. 40. Kod – pobieranie informacji oużytkownikupublic static MobileServiceClient MobileService = newMobileServiceClient("https://agilenotepad.azure-mobile.net/", "");private IMobileServiceTable<Profile> profileTable;profileTable = App.MobileService.GetTable<Profile>();List<Profile> profileUsers = await (from p in profileTablewhere p.IdUser == MainSettings.user.UserIdselect p).ToListAsync();function read(query, user, request) {request.execute(); }
    41. 41. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    42. 42. Kod – pobranie zadania zgrupytaskTable = App.MobileService.GetTable<Job>();MobileServiceTableQuery<Job> query = taskTable.Where(x =>x.IdGroup == group.id);
    43. 43. Kod dołączenie użytkownikado grupyconnectTable = App.MobileService.GetTable<Connect>();await connectTable.InsertAsync(new Connect { IdGroup = group.id, IdUser= id });profileTable = App.MobileService.GetTable<Profile>();List<Profile> l = await profileTable.Where(x => x.IdUser ==id).Take(1).ToListAsync();
    44. 44. Co można zrobić po stronieserwera• Walidacja • Czy grupa istnieje• Czy użytkownik już istnieje• Selekcja• Pobieranie grup do których należygrupowicz• Pobranie grup których właścicielem jestgrupowicz• Notyfikacje • Wysłanie do wszyskich członkówgrupy informację o dodaniuzadania do grupy• Potwierdzenie zmiany profilu
    45. 45. SkyptyPobranie grupy do ktorej należy użytkownikDEMO
    46. 46. function read(query, user, request) {if(request.parameters.kindQuery === "PeopleInGroup"){var sql = SELECT p.id,p.Name,p.Email,p.IdUser,p.channel FROM[agilenotepad].[Profile] p,[agilenotepad].[Connect] c WHERE p.IdUser =c.IdUSer AND c.IdGroup = ?;;mssql.query(sql, [request.parameters.numberGroup], {success: function(results) {request.respond(statusCodes.OK, results);}});}elserequest.execute();}
    47. 47. Po za tym• Modyfikowad żądanie• Modyfikowad odpowiedź• Walidowad dane• Odczytywad i zapisywad dane osobno• Używad autoryzacji użytkownika• Używad notyfikacji push• Wysyład dodatkowe żądania HTTP• Wychwytywad błedy i debugowad kod
    48. 48. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    49. 49. Notyfikacje Push - sklep
    50. 50. Notyfikacje Push – MobileServices
    51. 51. Notyfikacje Push – aplikacjaNotyfikacje push – wysyłanie informacji wszystkim członkągrupyDEMO
    52. 52. function insert(item, user, request) {console.log(item.id);request.execute({success: function() {var sql = "SELECT p.channel FROM [agilenotepad].[Job]j,[agilenotepad].[Connect] c, [agilenotepad].[Profile] p WHERE p.IdUser = c.IdUser ANDc.IdGroup = j.IdGroup AND j.id = ?";mssql.query(sql, [item.id], {success: function(results) {if (results.length > 0) {for(var i=0;0< results.length;i++){push.wns.sendToastText04(results[i].channel, {text1: new task}, {success: function(pushResponse) {console.log("Sent push:", pushResponse);}});}}}}); request.respond();}});}
    53. 53. Funkcjonalności• Uwierzytelnianie• Stworzenie profilu• Dodanie/usunięcie grupy• Wyświetlenie grup do których się należy lub sięstworzyło• Dodanie/usunięce zadania z grupy• Dołączenie/usunięcie użytkownika z grupy• Poinformowanie grupowiczy o nowym zadaniu• Wysłanie maila informującego o zadaniach
    54. 54. Wysyłanie maili z Sendgrid
    55. 55. Wysyłanie maili z Sendgrid

    ×