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

20
Globalcode – Open4education Aprendendo a usar Xamarin para desenvolver aplicações moveis multi plataforma Rodrigo Urubatan http://www.urubatan.com.br - @urubatan [email protected]

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

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

Globalcode – Open4education

Aprendendo a usar Xamarin para desenvolver

aplicações moveis multi plataforma

Rodrigo Urubatan

http://www.urubatan.com.br - @urubatan – [email protected]

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

Globalcode – Open4education

Rodrigo Urubatan F. Jardim

• http://urubatan.com.br

• http://github.com/urubatan

• http://twitter.com/urubatan

• http://linkedin.com/in/urubatan

[email protected]

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

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

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

Globalcode – Open4education

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

Globalcode – Open4education

Um código

para todas as

plataformas!!!

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

Globalcode – Open4education

Xamarin não é perfeito

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

Globalcode – Open4education

Xamarin.Forms

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

Globalcode – Open4education

Ok, mas vai ficar só falando?

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

Globalcode – Open4education

RestClientthis.client = new

RestClient("http://address:port/");

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

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;

}

}

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

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

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

Globalcode – Open4education

Adicionando suporte a

Cookies ao nosso RestClient

this.client = newRestClient("http://reader.brightwire.com/");

var cookieContainer = newSystem.Net.CookieContainer();

client.CookieContainer = cookieContainer;

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

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;

}

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

Globalcode – Open4education

Mostrando Dados

<?xml version="1.0" encoding="utf-8" ?><ContentPagexmlns="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="{BindingHeadline}" />

</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 = awaitclientApi.ListArticles();

Device.BeginInvokeOnMainThread(() =>{

this.ArticlesList.ItemsSource = articles;

});});

}}}

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

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

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

Globalcode – Open4education

Mostrando

detalhes!

MainPage = new NavigationPage(new tdc2017poa_xam.MainPage(this.clientApi));

Navigation.PushAsync(new ArticlePage(this.clientApi, (e.SelectedItem as Article).Id));

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

Globalcode – Open4education

Pontos importantes!!

Device.BeginInvokeOnMainThread

Task.Factory.StartNew

async/await

Application.Current.Properties/Application.Current.

SavePropertiesAsync/Application.Current.Propertie

s.ContainsKey

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

Globalcode – Open4education

Notificações? Microsoft.Azure.Mobile.Client

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

Globalcode – Open4education

E agora?

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

Globalcode – Open4education