Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis multi plataforma

67 views

Published on

Estes são os slides da minha palestra no The Developers Conference Porto Alegre deste ano, onde falei um pouco sobre desenvolvimento de aplicações multi plataforma com Xamarin, problemas e vantagens que encontrei no primeiro projeto que fiz com a plataforma, por que escolhi esta plataforma, alguns exemplos de código, ...
os exemplos completos do código Xamarin e do servidor Rails estão no meu github (tem o link nos slides)

Published in: Technology
  • Be the first to comment

  • Be the first to like this

TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis multi plataforma

  1. 1. Globalcode – Open4education Aprendendo a usar Xamarin para desenvolver aplicações moveis multi plataforma Rodrigo Urubatan http://www.urubatan.com.br - @urubatan – rodrigo@urubatan.com.br
  2. 2. Globalcode – Open4education Rodrigo Urubatan F. Jardim • http://urubatan.com.br • http://github.com/urubatan • http://twitter.com/urubatan • http://linkedin.com/in/urubatan • rodrigo@urubatan.com.br
  3. 3. Globalcode – Open4education Meu problema Distribuição de noticias para clients por email Difícil de ter certeza de quem leu cada notícia Difícil de agregar mais valor a cada noticia entregue Difícil de traçar o perfil dos clients, tempo de leitura por assunto, … Os clientes usam plataformas diferentes, e desenvolvimento mobile não é o foco principal da empresa
  4. 4. Globalcode – Open4education
  5. 5. Globalcode – Open4education Um código para todas as plataformas!!!
  6. 6. Globalcode – Open4education Xamarin não é perfeito
  7. 7. Globalcode – Open4education Xamarin.Forms
  8. 8. Globalcode – Open4education Ok, mas vai ficar só falando?
  9. 9. Globalcode – Open4education RestClient this.client = new RestClient("http://address:port/");
  10. 10. Globalcode – Open4education Login? public async Task<User> RestLogin(string Username, string Password) { try { var request = new RestRequest("sessions.json", Method.POST); request.AddJsonBody(new { session = new { username = Username, password = Password } }); var response = await client.Execute(request); if (response.IsSuccess) { Application.Current.Properties["Password"] = Password; Application.Current.Properties["Username"] = Username; Application.Current.Properties["LoggedIn"] = "True"; await Application.Current.SavePropertiesAsync(); request = new RestRequest("sessions.json", Method.GET); var response2 = await client.Execute<User>(request); if (response2.IsSuccess) { var user = response2.Data; return user; }else{ return null; } } else { return null; } } catch (Exception) { return null; } }
  11. 11. Globalcode – Open4education Mas não funcionou!! Todas as requisições REST são por definição stateless O protocolo HTTP tem um “contorno” para isto, com “Cookies” As plataformas WEB usam estes cookies para manter o estado entre as requisições
  12. 12. Globalcode – Open4education Adicionando suporte a Cookies ao nosso RestClient this.client = new RestClient("http://reader.brightwire.com/"); var cookieContainer = new System.Net.CookieContainer(); client.CookieContainer = cookieContainer;
  13. 13. Globalcode – Open4education Mapeando Objetos public class Article { public string Headline { get; set; } public string Body { get; set; } } public async Task<Article> ListArticles() { var request = new RestRequest("articles.json", Method.GET); var resp = await client.Execute<Article>(request); var storyList = resp.Data; return storyList; }
  14. 14. Globalcode – Open4education Mostrando Dados <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml " xmlns:local="clr- namespace:tdc2017poa_xam" x:Class="tdc2017poa_xam.MainPage"> <ContentPage.Content> <StackLayout> <Label Text="Stories List" VerticalOptions="Start" HorizontalOptions="CenterAndExpand" /> <ListView x:Name="ArticlesList"> <ListView.ItemTemplate> <DataTemplate> <TextCell Text="{Binding Headline}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> </StackLayout> </ContentPage.Content> </ContentPage> namespace tdc2017poa_xam { public partial class MainPage : ContentPage { private ReaderRestAPI clientApi; public MainPage(ReaderRestAPI clientApi) { this.clientApi = clientApi; InitializeComponent(); Task.Factory.StartNew(async () => { var articles = await clientApi.ListArticles(); Device.BeginInvokeOnMainThread(() => { this.ArticlesList.ItemsSource = articles; }); }); } } }
  15. 15. Globalcode – Open4education Ainda não funciona? protect_from_forgery é um problema, Podemos fazer uma requisição e enviar o cabeçalho, ou simplesmente desligar isto para o exemplo
  16. 16. Globalcode – Open4education Mostrando detalhes! MainPage = new NavigationPage(new tdc2017poa_xam.MainPage(this.clientAp i)); Navigation.PushAsync(new ArticlePage(this.clientApi, (e.SelectedItem as Article).Id));
  17. 17. Globalcode – Open4education Pontos importantes!! Device.BeginInvokeOnMainThread Task.Factory.StartNew async/await Application.Current.Properties/Application.Current. SavePropertiesAsync/Application.Current.Propertie s.ContainsKey
  18. 18. Globalcode – Open4education Notificações? Microsoft.Azure.Mobile.Client
  19. 19. Globalcode – Open4education E agora?
  20. 20. Globalcode – Open4education

×