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)
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
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;
}
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