SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
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
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
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
Globalcode – Open4education
Globalcode – Open4education
Um código
para todas as
plataformas!!!
Globalcode – Open4education
Xamarin não é perfeito
Globalcode – Open4education
Xamarin.Forms
Globalcode – Open4education
Ok, mas
vai ficar
só
falando?
Globalcode – Open4education
RestClient
this.client = new
RestClient("http://address:port/");
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;
}
}
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
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;
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;
}
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;
});
});
}
}
}
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
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));
Globalcode – Open4education
Pontos importantes!!
Device.BeginInvokeOnMainThread
Task.Factory.StartNew
async/await
Application.Current.Properties/Application.Current.
SavePropertiesAsync/Application.Current.Propertie
s.ContainsKey
Globalcode – Open4education
Notificações? Microsoft.Azure.Mobile.Client
Globalcode – Open4education
E agora?
Globalcode – Open4education

Weitere ähnliche Inhalte

Was ist angesagt?

Google App Engine with Java Web
Google App Engine with Java WebGoogle App Engine with Java Web
Google App Engine with Java WebPatrick Nascimento
 
Gutenberg: O que esperar das próximas fases
Gutenberg: O que esperar das próximas fasesGutenberg: O que esperar das próximas fases
Gutenberg: O que esperar das próximas fasesGuga Alves
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeCleórbete Santos
 
Escalonando o mundo com kubernetes
Escalonando o mundo com kubernetesEscalonando o mundo com kubernetes
Escalonando o mundo com kubernetesMundo Docker
 
Clean Code/Architecture com Android e Flutter
Clean Code/Architecture com Android e FlutterClean Code/Architecture com Android e Flutter
Clean Code/Architecture com Android e FlutterRicardo Ogliari
 

Was ist angesagt? (6)

Google App Engine with Java Web
Google App Engine with Java WebGoogle App Engine with Java Web
Google App Engine with Java Web
 
Gutenberg: O que esperar das próximas fases
Gutenberg: O que esperar das próximas fasesGutenberg: O que esperar das próximas fases
Gutenberg: O que esperar das próximas fases
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividade
 
Escalonando o mundo com kubernetes
Escalonando o mundo com kubernetesEscalonando o mundo com kubernetes
Escalonando o mundo com kubernetes
 
Linuxtips - a saideira
Linuxtips - a saideiraLinuxtips - a saideira
Linuxtips - a saideira
 
Clean Code/Architecture com Android e Flutter
Clean Code/Architecture com Android e FlutterClean Code/Architecture com Android e Flutter
Clean Code/Architecture com Android e Flutter
 

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

TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APIEdlaine Zamora
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterEdlaine Zamora
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...tdc-globalcode
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityInael Rodrigues
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaSEder Magalhães
 
Introdução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduIntrodução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduGuilherme
 
Desenvolvimento web com VRaptor
Desenvolvimento web com VRaptorDesenvolvimento web com VRaptor
Desenvolvimento web com VRaptorDaniel Cavalcante
 
Curso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoCurso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoVinicius Quaiato
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerWellington Silva
 
Restful APIs com Spring 3
Restful APIs com Spring 3Restful APIs com Spring 3
Restful APIs com Spring 3Alex Miranda
 
Internet das coisas - A revolução já começou
Internet das coisas - A revolução já começouInternet das coisas - A revolução já começou
Internet das coisas - A revolução já começouJose Wilker
 
Cada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filhoCada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filhoMagno Santana Silva
 

Ähnlich wie TDC2017 - POA - Aprendendo a usar Xamarin para desenvolver aplicações moveis multi plataforma (20)

Metralhando sua API
Metralhando sua APIMetralhando sua API
Metralhando sua API
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua API
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 
Introdução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduIntrodução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos Redu
 
Spring boot
Spring bootSpring boot
Spring boot
 
Desenvolvimento web com VRaptor
Desenvolvimento web com VRaptorDesenvolvimento web com VRaptor
Desenvolvimento web com VRaptor
 
Curso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoCurso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius Quaiato
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com Docker
 
Restful APIs com Spring 3
Restful APIs com Spring 3Restful APIs com Spring 3
Restful APIs com Spring 3
 
Internet das coisas - A revolução já começou
Internet das coisas - A revolução já começouInternet das coisas - A revolução já começou
Internet das coisas - A revolução já começou
 
Cada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filhoCada vez que você diz sim para uma funcionalidade, você está adotando um filho
Cada vez que você diz sim para uma funcionalidade, você está adotando um filho
 
Custos de dizer um Sim
Custos de dizer um SimCustos de dizer um Sim
Custos de dizer um Sim
 

Mehr von Rodrigo Urubatan

Data science in ruby is it possible? is it fast? should we use it?
Data science in ruby is it possible? is it fast? should we use it?Data science in ruby is it possible? is it fast? should we use it?
Data science in ruby is it possible? is it fast? should we use it?Rodrigo Urubatan
 
Data science in ruby, is it possible? is it fast? should we use it?
Data science in ruby, is it possible? is it fast? should we use it?Data science in ruby, is it possible? is it fast? should we use it?
Data science in ruby, is it possible? is it fast? should we use it?Rodrigo Urubatan
 
2018 the conf put git to work - increase the quality of your rails project...
2018 the conf   put git to work -  increase the quality of your rails project...2018 the conf   put git to work -  increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...Rodrigo Urubatan
 
2018 RubyHACK: put git to work - increase the quality of your rails project...
2018 RubyHACK:  put git to work -  increase the quality of your rails project...2018 RubyHACK:  put git to work -  increase the quality of your rails project...
2018 RubyHACK: put git to work - increase the quality of your rails project...Rodrigo Urubatan
 
Your first game with unity3d framework
Your first game with unity3d frameworkYour first game with unity3d framework
Your first game with unity3d frameworkRodrigo Urubatan
 
Tdc Floripa 2017 - 8 falácias da programação distribuída
Tdc Floripa 2017 -  8 falácias da programação distribuídaTdc Floripa 2017 -  8 falácias da programação distribuída
Tdc Floripa 2017 - 8 falácias da programação distribuídaRodrigo Urubatan
 
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRodrigo Urubatan
 
resolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bddresolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bddRodrigo Urubatan
 
vantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remotovantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remotoRodrigo Urubatan
 
Using BDD to Solve communication problems
Using BDD to Solve communication problemsUsing BDD to Solve communication problems
Using BDD to Solve communication problemsRodrigo Urubatan
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JSRodrigo Urubatan
 
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextFull Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextRodrigo Urubatan
 
Ruby para programadores java
Ruby para programadores javaRuby para programadores java
Ruby para programadores javaRodrigo Urubatan
 
Treinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HPTreinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HPRodrigo Urubatan
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails  impressione a você mesmo, seu chefe e seu clienteRuby on rails  impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu clienteRodrigo Urubatan
 
Aplicações Hibridas com Phonegap e HTML5
Aplicações Hibridas com Phonegap e HTML5Aplicações Hibridas com Phonegap e HTML5
Aplicações Hibridas com Phonegap e HTML5Rodrigo Urubatan
 

Mehr von Rodrigo Urubatan (20)

Ruby code smells
Ruby code smellsRuby code smells
Ruby code smells
 
Data science in ruby is it possible? is it fast? should we use it?
Data science in ruby is it possible? is it fast? should we use it?Data science in ruby is it possible? is it fast? should we use it?
Data science in ruby is it possible? is it fast? should we use it?
 
Data science in ruby, is it possible? is it fast? should we use it?
Data science in ruby, is it possible? is it fast? should we use it?Data science in ruby, is it possible? is it fast? should we use it?
Data science in ruby, is it possible? is it fast? should we use it?
 
2018 the conf put git to work - increase the quality of your rails project...
2018 the conf   put git to work -  increase the quality of your rails project...2018 the conf   put git to work -  increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...
 
2018 RubyHACK: put git to work - increase the quality of your rails project...
2018 RubyHACK:  put git to work -  increase the quality of your rails project...2018 RubyHACK:  put git to work -  increase the quality of your rails project...
2018 RubyHACK: put git to work - increase the quality of your rails project...
 
Your first game with unity3d framework
Your first game with unity3d frameworkYour first game with unity3d framework
Your first game with unity3d framework
 
Tdc Floripa 2017 - 8 falácias da programação distribuída
Tdc Floripa 2017 -  8 falácias da programação distribuídaTdc Floripa 2017 -  8 falácias da programação distribuída
Tdc Floripa 2017 - 8 falácias da programação distribuída
 
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDD
 
resolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bddresolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bdd
 
vantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remotovantagens e desvantagens de trabalhar remoto
vantagens e desvantagens de trabalhar remoto
 
Using BDD to Solve communication problems
Using BDD to Solve communication problemsUsing BDD to Solve communication problems
Using BDD to Solve communication problems
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
 
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextFull Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
 
Ruby para programadores java
Ruby para programadores javaRuby para programadores java
Ruby para programadores java
 
Treinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HPTreinamento html5, css e java script apresentado na HP
Treinamento html5, css e java script apresentado na HP
 
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
Ruby on rails  impressione a você mesmo, seu chefe e seu clienteRuby on rails  impressione a você mesmo, seu chefe e seu cliente
Ruby on rails impressione a você mesmo, seu chefe e seu cliente
 
Mini curso rails 3
Mini curso rails 3Mini curso rails 3
Mini curso rails 3
 
Aplicações Hibridas com Phonegap e HTML5
Aplicações Hibridas com Phonegap e HTML5Aplicações Hibridas com Phonegap e HTML5
Aplicações Hibridas com Phonegap e HTML5
 

Kürzlich hochgeladen

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Kürzlich hochgeladen (8)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

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

  • 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. 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. 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
  • 5. Globalcode – Open4education Um código para todas as plataformas!!!
  • 8. Globalcode – Open4education Ok, mas vai ficar só falando?
  • 9. Globalcode – Open4education RestClient this.client = new RestClient("http://address:port/");
  • 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. 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. 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. 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. 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. 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. 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. Globalcode – Open4education Pontos importantes!! Device.BeginInvokeOnMainThread Task.Factory.StartNew async/await Application.Current.Properties/Application.Current. SavePropertiesAsync/Application.Current.Propertie s.ContainsKey
  • 18. Globalcode – Open4education Notificações? Microsoft.Azure.Mobile.Client