TUTORIAL – Windows Phone – Parte 1 – Hello World

Mobiltec, nosso blog e 2012:
Olá! Fico feliz em escrever o primeiro post de 2012 e antes de abordar o assunto que lhe trouxe até aqui, gostaria de destacar a iniciativa da Mobiltec em criar esse blog, onde membros de nossa equipe podem compartilhar experiências com o público.
Redigir estes artigos nos permitem repassar determinados assuntos, esmiuçando-os antes de trazê-los em forma de post e refinar o conhecimento já existente.
Espero que todo nosso esforço possa agregar valores para nossos leitores!
Desejamos que o ano de 2012 seja de muita alegria, saúde, sucesso e crescimento profissional!

O mercado de trabalho está constantemente a procura de profissionais com conhecimentos em C#.
Com a chegada do Windows Phone para impulsionar novamente a Microsoft no mercado mobile e tudo apontando para tablets com Windows 8, somados ao novo fôlego dado ao Silverlight, quem é que não gostaria de desenvolver aplicativos para esses dispositivos?
O post de hoje vai abordar de forma prática e objetiva os primeiros passos para iniciar o desenvolvimento de aplicações para Windows Phone , no estilo TUTORIAL.
Este post é o primeiro de uma série que estamos escrevendo para as plataformas móveis. Se você é ligado também em Android e iOS, aguarde pois estes sistemas operacionais também serão abordados no blog por nossos programadores.
Chega de LERO-LERO e LET’S GO!

Pré-requisitos:

Sistemas operacionais suportados:

  • Windows Vista (x86 and x64) com Service Pack 2 – qualquer edição exceto Starter Edition
  • Windows 7 (x86 and x64) – qualquer edição exceto Starter Edition

Hardware:

  • A instalação requer 4GB de espaço em disco
  • 3GB RAM
  • Placa de vídeo com suporte ao DirectX 10 e driver WDDM 1.1

O download abaixo contém:

  • VISUAL STUDIO 2010 EXPRESS FOR WINDOWS PHONE
  • Windows Phone Emulator
  • Windows Phone SDK 7.1 Assemblies e extensions para XNA
  • Silverlight 4 SDK e DRT
  • Microsoft Expression Blend
  • WCF Data Service Client para Windows Phone
  • Microsoft Advertising SDK para Windows Phone

Faça o download e realize a instalação:
:: DOWNLOAD DO VISUAL STUDIO 2010 EXPRESS FOR WINDOWS PHONE ::

Ambiente de desenvolvimento:
Embora colocar a mão no código seja a parte mais legal da história, não adianta se apressar.
Desenvolver em qualquer linguagem de programação exige que você “prepare” o ambiente de desenvolvimento, algo muito comum de se ouvir em empresas de T.I.

- Mas Luiz, o que isso quer dizer?
Preparar o ambiente nada mais é do que analisar pré-requisitos do seu computador e instalar as devidas ferramentas.
A preparação da IDE de uma linguagem, muitas vezes, exige outros complementos como SDK’s ou outros tipos de updates.
Para uma abordagem conceitual sobre IDE visite nosso post nesse LINK.

- Certo, mas o que é SDK?
SDK é a sigla de Software Development Kit (Kit de Desenvolvimento de Software) e está presente em diversas linguagens de programação.

Agora, com as devidas ferramentas em mãos, vamos começar!!!

1 – O primeiro passo – Executando o Visual Studio e criando um novo projeto
2 – Em seguida, selecione o tipo de projeto (Windows Phone Application), framework(.NET Framework 4.0) e nome da solução (opcional)

3 – Caso você tenha instalado o SDK de ambas as versões 7.0 e 7.1, deverá optar por uma durante a criação do projeto

4 – Familiarizando-se com a interface e a estrutura básica do código XAML

5 – Abra a toolbox e arraste um controle do tipo textblock e button para dentro da grid chamada ContentPanel

6 – Em seguida, atribuimos um nome para os controles e também adicionamos algumas propriedades para ajuste de layout
Colocaremos a textblock ao topo da tela com texto ao centro e o botão na parte inferior

<TextBlock x:Name="ContentTextBlock"
    VerticalAlignment="Top"
    HorizontalAlignment="Stretch"
    TextAlignment="Center" />
<Button x:Name="ShowTextButton" Content="OK"
    VerticalAlignment="Bottom"
    Click="ShowTextButton_Click" />

7- Para criar o evento de toque do botão você pode dar dois cliques sobre o botão na interface de visualização da tela (onde a seta indica na imagem abaixo) e o código do evento será inserido automaticamente * O Visual Studio adicionou o evento de nome Click, entretanto, por se tratar de um dipositívo móvel, esse evento muitas vezes pode ser chamado de Tap. A interação usuário-dispositivo pode trazer outros tipos de eventos, chamados Gesture Listeners, que enriquecem o uso da aplicação, entretanto, são pauta para um novo post, específico, pois a abordagem é extensa.
8 – O Visual Studio abrirá o code behind automaticamente, já com o novo método, onde adicionaremos o seguinte trecho de código para exibir a mensagem “Hello world!” em nosso textblock

ContentTextBlock.Text = "Hello World!";

9 – Para rodar a aplicação no dispositivo, vamos selecionar no menu superior a opção Windows Phone Emulator, e em seguida clicar no símbolo verde tipo PLAY, conforme imagem abaixo, para compilar o projeto e executar o emulador

10 – Após executar o emulador, clicamos em OK para conferir o resultado
Como podemos ver, os primeiros passos para o desenvolvimento em Windows Phone é relativamente simples!
Na medida que o grau de exigência de determinados projetos aumenta é que nos deparamos com situações novas e mais complexas, porém, para um “Hello world!” em um ambiente configurado, isso é o suficiente!

Espero que tenham gostado! Fiquem ligados e acompanhem o restante da série de TUTORIAIS que vêm por ai!

Escrito por Luiz Roberto Lethang Rodolpho.

Serialização XML em Dispositivos Móveis (Android)

Durante a realização de um projeto na Mobiltec, nos deparamos com o seguinte desafio: serializar (XML) um objeto em .NET e deserializar o mesmo objeto em um dispositivo Android (Java). No .NET Framework (C#) a operação de serialização é bem trivial, basta executar o seguinte código exemplo:

System.Xml.XmlSerializer xmlSr = new XmlSerializer(typeof(Model));
Model model = new Model();
xmlSr.Serialize(stream, model);

O processo de deserialização é igualmente fácil:

Model udtModel = (Model)xmlSr.Deserialize(stream);

Por exemplo, a seguinte classe Model

using System.Collections.Generic;
public class Model
{
     public bool IsValid { get; set; }
     public int Identifier { get; set; }
     public string SomeText { get; set; }
}

irá gerar esse XML:

<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <IsValid>false</IsValid>
  <Identifier>134</Identifier>
  <SomeText>text</SomeText>
</Model>

Algumas observações importantes na serialização de objetos em .NET:

  • Não é necessário nenhuma preparação inicial do objeto a ser serializado (Model)
  • Não é necessário marcar a classe como serializável (modificador [Serializable])
  • Todos os atributos que serão serializados devem ser públicos (a classe Model inclusive), senão o método Serialize gera uma exceção (“XMLSerializationTest.Model é inacessível por causa do seu nível de proteção. Apenas tipos públicos podem ser processados.”)

No Android não temos nada que o próprio Framework do Java tenha que seja tão simples quanto o .NET, apenas o básico de leitura de XML está presente. Entretanto, em outros projetos desenvolvidos na Mobiltec utilizando a linguagem Java (mais especificamente J2EE), observamos que existiam algumas bibliotecas que auxiliam na serialização de objetos, similar ao .NET, como o JAXB. Conforme vimos no post sobre desenvolvimento em Android, não é qualquer código em Java que irá funcionar no Android. A bibliteca JAXB poderia ser utilizada, porém estávamos em busca de algo mais leve e encontramos a excelente biblioteca Simple. O jar da biblioteca JAXB tem aproximadamente 10,4 Mb, já a biblioteca Simple tem apenas 360 Kb. Para deserializar o XML gerado anteriormente, utilizando a biblioteca Simple, basta gerar o seguinte código:

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

Serializer serializer = new Persister();
Model model = serializer.read(Model.class, source);

Observações importantes da biblioteca Simple:

  • Os atributos da classe são utilizados para serializar/deserializar o objeto
  • Ao recriar a classe Model em Java, esta deve ter atributos com o mesmo nome das propriedades do .NET para que a correspondência possa ser feita
  • O Simple é case sensitive, ou seja, a seguinte classe deve ser definida para que a importação exemplificada neste post funcione:
    import org.simpleframework.xml.Default;
    
    @Default
    public class Model {
    
    	private boolean IsValid;
    	private int Identifier;
    	private String SomeText;
    
            //metodos get/set omitidos
    }

Com este dois exemplos observamos uma certa dependência entre as classes Model definidas. Como uma dica de utilização podemos realizar algumas marcações nas duas classes de forma a padronizar o XML gerado, facilitando a importação em qualquer outra plataforma. Em .NET podemos fazer o seguinte com a classe Model:

[XmlRootAttribute("model")]
public class Model
{
    [XmlElement("valid")]
    public bool IsValid { get; set; }

    [XmlElement("identifier")]
    public int Identifier { get; set; }

    [XmlElement("someText")]
    public string SomeText { get; set; }
}

A biblioteca Simple também permite as mesmas marcações:

@Root(name="model")
public class Model {

	@Element(name="valid")
	private boolean valid;

	@Element(name="identifier")
	private int identifier;

	@Element(name="someText")
	private String someText;

        //metodos get/set omitidos propositalmente
}

Era isso por hoje e aguardem em breve mais um post com mais dicas sobre serialização utilizando a biblioteca Simple. Caso tenha ficado curioso sobre a utilização do JAXB, este site mostra uma comparação entre Simple e o JAXB.

Escrito por Paulo Sérgio Morandi

Tecnologia M3 Mobile Push

O Push é uma tecnologia capaz de oferecer comunicação em tempo real com dispositivos móveis, característica desejada em aplicativos móveis e essencial em plataformas de gestão de dispositivos (MDM – Mobile Device Management).

O M3 da Mobiltec oferece o M3 Mobile Push em todas as plataformas móveis hoje suportadas, a saber Windows Mobile, Android, iOS e Windows Phone 7. Diversas são as estratégias para implementação do mecanismo de Push (já as comentei neste post), cada uma com suas vantagens e desvantagens.

M3 Mobile Push no Windows Mobile e Android

No produto M3, a estratégia escolhida para implementação do mecanismo de Push para as plataformas Windows Mobile e Android foi o Comet, modelo caracterizado pela manutenção de uma conexão HTTP de longa duração entre dispositivo e servidor de mobilidade.

 

Essa abordagem oferece diversos benefícios para o dispositivo e para o servidor de mobilidade:

  • Facilidade de comunicação: Como o dispositivo inicia a conexão HTTP com o servidor, o acesso ao dispositivo não está sujeito a limitações de conectividade, como bloqueio de firewall, redes NAT privadas e outros.
  • Economia de comunicação: A técnica de Pull, de fácil implementação, exige muito tráfego de dados pois realiza comunicação com o servidor constantemente. A comunicação em dispositivos móveis é um recurso ainda caro, e neste sentido o Comet apresenta grande vantagem, pois a manutenção de conexão com timeout longo requer pouco tráfego de dados. O segredo para a minimização da comunicação é justamente o controle minucioso dos timeouts das conexões HTTP, que requer análise de características de rede e de particularidades das operadoras de telecomunicação.
  • Escalabilidade do servidor de mobilidade: Por ser um processo passivo de comunicação, a técnica do Comet exige menos recursos do servidor de mobilidade. Enquanto na técnica de Comet o dispositivo realiza conexões com o servidor em ciclos de tempo prolongados (tipicamente minutos ou dezenas de minutos), um mecanismo ativo de pulling precisa realizar conexões em ciclos curtos, tipicamente segundos. Isso significa que um servidor baseado em Comet sofre menor carga e, assim, pode atender um volume de dispositivos muito superior.
  • Característica on-line: Com a técnica de Comet, o M3 entrega a notificação ao dispositivo instantaneamente (desprezando-se tempo de comunicação de rede), pois o canal está sempre pronto para envio da mensagem. Para se obter tempo de entrega de notificações próximo ao real em mecanismos ativos de pulling, são necessários ciclos muito curtos de verificação, o que agride o uso de conexão e a escalabilidade da solução.

Considerações adicionais sobre uma solução de Push

Alguns aspectos são importantes para uma boa solução de Push, que aprendemos durante o processo de pesquisa e desenvolvimento do M3 Mobile Push.

A conexão HTTP é mantida pelo dispositivo. Só que um dispositivo móvel pode sofrer oscilações e quedas de sinal de rede, ou mesmo mudanças automáticas de rede, por exemplo saindo de um roteador wi-fi para outro. É importante tratar as situações de erro para que o dispositivo não mantenha referência para uma conexão HTTP de longa duração inválida, acarretando na incapacidade de o servidor enviar notificações ao mesmo.

No que se refere à escalabilidade da solução, é preciso muito cuidado com o uso de recursos do servidor. Se for implementada uma solução simplista com conexões HTTP síncronas, o servidor manterá um fluxo (thread) em execução para cada conexão aberta. E com o crescimento do número de dispositivos, a solução fica sobrecarregada. No caso do M3 Mobile Push, são utilizadas requisições HTTP assíncronas, de forma que, independentemente do número de dispositivos com conexão de Push ativa com o servidor, o número de fluxos de tratamento destas conexões é fixo.

O Push em outras plataformas suportadas pelo M3

Os sistemas iOS, da Apple, e Windows Phone 7, da Microsoft, oferecem sistemas e serviços nativos para implementação do mecanismo de Push. Em postagens futuras iremos abordar estes mecanismos com detalhe.

Escrito por Eduardo Klein