22
Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09 Índice Objetivos................................................................................................................................2 Termos de uso para esse material........................................................................................3 Conteúdo programático.........................................................................................................4 Mercado de Trabalho.............................................................................................................5 O que é Desenvolvimento Mobile Web.................................................................................6 HTTP Headers – Cabeçalhos HTTP.....................................................................................7 Cabeçalho da mensagem.....................................................................................7 Identificando o dispositivo móvel e seus recursos ...............................................................8 IsMobile ...........................................................................................................................................9 WURFL.................................................................................................................................12 Integração Gateway (Envio de SMS)..................................................................................14 Introdução a biblioteca cURL .........................................................................................................................................15 Introdução a biblioteca SOAP.........................................................................................17 Construindo um Site em versão Mobile...............................................................................19 Browser Wars..................................................................................................................19 Boas Práticas (Seguindo os conselhos e padrões da W3C)..........................................19 Dicas de ferramentas ..........................................................................................................21 Conclusão............................................................................................................................22 Projeto PHP Mobile – http://www.phpmobile.com.br , apostila criada por Bruno Fernandes Pereira (vulgo PorKaria) 1 de 22

Atendendo o Mercado Mobile usando PHP

Embed Size (px)

DESCRIPTION

- Apresentar o Desenvolvimento Mobile Web - Mostrar alguns dos serviços que o PHP pode atender, Ensinar a desenvolver soluções práticas para problemas do Desenvolvimento Mobile Web - Apresentar as Boas práticas - Incentivar os desenvolvedores web a estudar sobre mercado de trabalho e o mundo do desenvolvimento mobile.

Citation preview

Page 1: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

ÍndiceObjetivos................................................................................................................................2Termos de uso para esse material........................................................................................3Conteúdo programático.........................................................................................................4Mercado de Trabalho.............................................................................................................5O que é Desenvolvimento Mobile Web.................................................................................6HTTP Headers – Cabeçalhos HTTP.....................................................................................7

Cabeçalho da mensagem.....................................................................................7Identificando o dispositivo móvel e seus recursos ...............................................................8

IsMobile...........................................................................................................................................9

WURFL.................................................................................................................................12Integração Gateway (Envio de SMS)..................................................................................14

Introdução a biblioteca cURL.........................................................................................................................................15Introdução a biblioteca SOAP.........................................................................................17

Construindo um Site em versão Mobile...............................................................................19Browser Wars..................................................................................................................19Boas Práticas (Seguindo os conselhos e padrões da W3C)..........................................19

Dicas de ferramentas ..........................................................................................................21Conclusão............................................................................................................................22

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

1 de 22

Page 2: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Objetivos

• Apresentar o Desenvolvimento Mobile Web

• Mostrar alguns dos serviços que o PHP pode atender

• Ensinar a desenvolver soluções práticas para problemas do Desenvolvimento Mobile Web

• Apresentar as Boas práticas

• Incentivar os desenvolvedores web a estudar sobre mercado de trabalho e o mundo do desenvolvimento mobile.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

2 de 22

Page 3: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Termos de uso para esse material

Você podecopiar, distribuir, exibir e executar a obra

criar obras derivadas

Sob as seguintes condiçõesAtribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante.

• Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra.

• Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor.

• Nada nesta licença prejudica ou restringe os direitos morais do autor.

http://creativecommons.org/licenses/by/2.5/br/

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

3 de 22

Atribuição 2.5 Brasil

Qualquer direito de uso legítimo (ou "fair use") concedido por lei, ou qualquer outro direito protegido pela legislação local, não são em hipótese alguma afetados pelo disposto acima.

Este é um sumário para leigos da Licença Jurídica (na íntegra).

Page 4: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Conteúdo programático

• Introdução ao Desenvolvimento Mobile Web• Mercado de Trabalho• O que é Desenvolvimento Mobile Web• HTTP Headers – Cabeçalhos HTTP

• Desenvolvendo Soluções• Identificando o dispositivo móvel e seus recursos

◦ isMobile◦ WURFL

• Integração Gateway (Envio de SMS)◦ Introdução a biblioteca cURL◦ Introdução a biblioteca SOAP

• Construindo um site em versão Mobile◦ Boas Práticas (Seguindo os conselhos e padrões da W3C)

• Dicas de ferramentas desenvolvidas em PHP que podem ser usadas para criar soluções para dispositivos móveis

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

4 de 22

Page 5: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Mercado de Trabalho

Sempre que uma nova tendência tecnológica começa a se popularizar, um mercado de trabalho começa a se formar junto ou até mesmo antes.

É fato que houve uma grande popularização do uso de dispositivos móveis no Brasil, principalmente o celular, agora estamos entrando na popularização do acesso a internet banda larga.

Com tudo isso o Mobile Bussines vem crescendo muito e vários serviços vem “pipocando” no mercado de trabalho, e nós desenvolvedores, temos que ficar atentos a essas novas oportunidades, entre os serviços mais populares estão:

• Mobile Marketing

É o termo usado para campanhas de marketing para dispositivos móveis. Por exemplo, campanhas entregues em telefones celulares, handhelds, etc. Uma das ferramentas utilizadas é o Interactive, uma comunicação que atinge diretamente o seu receptor através de varias formas, dentre elas: SMS, MMS, internet(WAP); Em estágios mais avançados por conexões bluetooth. Fonte: http://pt.wikipedia.org/wiki/Mobile_marketing

• Mobile Advertising

A versão móvel das publicidades que são vinculadas na internet em um ambiente Desktop.

• Integradores (Envio de SMS e MMS)

Empresa que atua como intermediário entre provedores de conteúdo e aplicativos e as operadoras. Realiza o fluxo do tráfego de mensagens para diversas operadoras ou outros integradores. Supervisiona e administra campanhas e ações baseadas em sua plataforma, além dos serviços de cobrança. Fonte: http://www.mobilepedia.com.br/prod/glossario/

• Sites Mobile

Em sua maioria versões móveis de sites já existentes para Desktop e agora precisam que seu conteúdo seja adaptado para cada tipo de dispositivo móvel e apenas as suas principais funcionalidades disponibilizadas nessa versão.

Levando em conta todos os serviços que necessitam da internet, podemos considerar o uso de uma linguagem que se adapte melhor a esse ambiente, no caso o PHP, que foi criada justamente para a web.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

5 de 22

Page 6: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

O que é Desenvolvimento Mobile Web

O Desenvolvimento Mobile Web é criar aplicações para dispositivos móveis que vão utilizar a internet como base. O fato de ter a web como base já nos leva a aplicações aonde podemos utilizar o browser como porta de entrada (client-side) e servidores para processar as requisições da nossa aplicação (server-side).

Os conceitos para o desenvolvimento mobile web partem do desenvolvimento web, porém com algumas limitações, novos problemas e com isso novas soluções.

Pois apesar de estarmos trabalhando com usuários que em sua maioria já tem familiaridade com aplicações web, quando ele acessa uma aplicação mobile web ele tem necessidades diferentes, é um usuário mais crítico e objetivo, pois precisa de informação de uma forma rápida e direta.

Por tanto, as aplicações mobile web tem que ter uma interface simples, leve e com pouca informação.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

6 de 22

Page 7: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

HTTP Headers – Cabeçalhos HTTP

Cabeçalho da mensagem

O cabeçalho da mensagem (header) é utilizado para transmitir informações adicionais entre o cliente e o servidor. Ele é especificado imediatamente após a linha inicial da transação (método), tanto para a requisição do cliente quanto para a resposta do servidor, seguido de dois pontos (:) e um valor. Existem quatro tipos de cabeçalhos que poderão ser incluídos na mensagem os quais são: general-header, requestheader, response-header e entity-header.

Esses cabeçalhos são utilizados para enviar informações adicionais sobre a mensagem transmitida (general-header), a requisição e os clientes (request-header) que comunicam suas configurações e os formatos de documentos desejados como resposta. Além disso, são utilizados pelo servidor ao retornar o recurso no qual foi requisitado pelo cliente, para transmitir informações que descrevem as configurações do servidor e do recurso identificado pelo URI de requisição, e que não pertence à linha de status (responseheader). Na RFC 2616, estão descritos todos os campos que pertencem a esses cabeçalhos.

Fonte: http://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cabe.C3.A7alho_da_mensagem

No PHP nós temos a variável pré-definida $_SERVER que armazena informações do cabeçalho http, paths e localização do script.

Porém as informações que vamos mais trabalhar durante essa apositla são:

• $_SERVER['HTTP_USER_AGENT']

O conteúdo do header User-Agent: da requisição atual, se houver. É uma string denotando o agente de usuário pelo qual a página é acessada. Com essa informação é possível personalizar a geração de suas páginas para as capacidades do agente do usuário. Para um definição mais completa acesse: http://en.wikipedia.org/wiki/User_agent .

• $_SERVER['HTTP_ACCEPT']

Que tem como informação uma lista de MIME-Types suportado pelo User_Agent, a sua completa definição pode ser encontrada aqui: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Para ver a lista completa das informações disponíveis no array $_SERVER, acesse a documentação do PHP, http://br2.php.net/manual/pt_BR/reserved.variables.server.php .

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

7 de 22

Page 8: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Identificando o dispositivo móvel e seus recursos

Esse é o problema mais comum e provavelmente o primeiro em que você vai se deparar no desenvolvimento mobile web.

De todas as soluções que encontrei para PHP, todas se baseiam nas informações obtidas pela variável pré-defina a $_SERVER, que nada mais é que um array que guarda as informações do servidor e do ambiente de execução.

Entre os valores está a HTTP_USER_AGENT que armazena uma string com informações como o browser e o sistema operacional do usuário e temos também a HTTP_ACCEPT que tem uma lista de MIME-Types suportado pelo User_Agent.

Vamos a um exemplo:

<?php echo 'User agent: ' . $_SERVER['HTTP_USER_AGENT'] . ' <br /> HTTP Accept: ' . $_SERVER['HTTP_ACCEPT'];?>

Acessando de um computador normal, no caso o meu, vai imprimir:

User agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5

HTTP Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Acessando de um dispositivo móvel, no caso um Nokia E71, vai imprimir:

User agent: Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE71-3/200.21.118; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413

HTTP Accept: text/html,text/css,multipart/mixed,application/java-archive, application/java, application/x-java-archive, text/vnd.sun.j2me.app-descriptor, application/vnd.oma.drm.message, application/vnd.oma.drm.content, application/vnd.oma.dd+xml,application/vnd.oma.drm.rights+xml, application/vnd.oma.drm.rights+wbxml, application/x-nokia-widget, */*

Nota-se a diferença entre os valores, de browser, sistema operacional e mime-type listados pelo user agent.

Agora é só pegar essas informações é comparar e descobrir se é um dispositivo móvel. Mas comparar com o que?

Já existem várias soluções em PHP para solucionar esse problema, vamos aprender a utilizar dois, a primeira utilizando a classe isMobile do projeto PHP Mobile e a API do projeto WURFL, que já é mais elaborada e conta com uma grande base de informação de centenas de dispositivos móveis.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

8 de 22

Page 9: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

IsMobile

Uma classe que detecta se é um dispositivo móvel que está acessando a sua aplicação. Ela consiste em ser uma solução simples. O seu principal atributo é um array com informações dos dispositivos móveis mais populares e usa esse array para comparar com as informações do HTTP_USER_AGENT.

Essa é a solução mais fácil e adotada em vários projetos, como por exemplo o Framework CodeIgniter, plugins do Wordpress, classes do PHPClasses.org e centenas de artigos na internet.

Por exemplo o CodeIgniter utiliza uma classe (CI_User_Agent) que tem métodos para identificar a plataforma, browser, robot ou mobile device, porém todas essas informações vem de um arquivo de configuração chamado users_agents.php que possui vários vetores, entre eles o $mobiles.

Exemplo:

<?php$mobiles = array( 'mobileexplorer'=>'Mobile Explorer', 'palmsource'=>'Palm', 'palmscape'=>'Palmscape', 'motorola'=>"Motorola", 'nokia'=> "Nokia", 'palm'=> "Palm", 'iphone'=> "Apple iPhone", 'ipod'=> "Apple iPod Touch", 'sony'=> "Sony Ericsson", 'ericsson'=> "Sony Ericsson", 'blackberry'=> "BlackBerry", 'e por ai vai..'=> '...');?>

No Array a chave é a string que será usada para buscar no HTTP_USER_AGENT e o valor é o nome que podemos exibir ao usuário.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

9 de 22

Dica: Utilize o plugin User Agent Switcher do Firefox para manipular o valor do HTTP_USER_AGENT durante a sua navegação.

Página do plugin: https://addons.mozilla.org/pt-BR/firefox/addon/59

Page 10: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Na classe IsMobile nós partimos do array do CodeIgniter e montamos uma classe com a seguinte estrutura para tratar essa informação:

Agora vamos a um how-to de como utilizar a classe IsMobile:

1. Baixe o pacote (zip) com o código http://sourceforge.net/projects/ismobile/files/

2. Edite o arquivo ismobile_config.php defina o valor para PATH_TO_ISMOBILE.

3. Pronto. É só ir para o arquivo ismobile_examples.php e ver como funciona.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

10 de 22

Page 11: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Vamos aos exemplos:

Exemplo 1 - Uso básico

<?php// basic require files...require_once "ismobile_config.php";require_once "ismobile.class.php";

# Example 1 - is mobile device or not?

$ismobi = new IsMobile();

if($ismobi->CheckMobile()){ echo 'Your mobile device is a ' . $ismobi->GetMobileDevice() . '? ';}else{ echo "It isn't a mobile device...";}?>

O método CheckMobile() retorna um boolean, true para caso a aplicação esteja sendo acessada de um dispositivo móvel que esteja no array $CodeIgnitersMobiles da classe e false caso não seja encontrada nenhuma ocorrência.

Exemplo 2 - Tratando o retorno

<?phprequire_once "ismobile_config.php";require_once "ismobile.class.php";

$agents_test = array("Nokia6600/1.0 (4.09.1) SymbianOS/7.0s Series60/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.0","Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3");

$ismobiuser = new isMobile($agents_test[rand(0,2)]);

if ($ismobiuser->CheckMobile()) { $mobileDevice = $ismobiuser -> GetMobileDevice();

if (preg_match("/iphone/i",$mobileDevice)) { echo 'Redirecting for iphone...'; } else if (preg_match("/nokia/i",$mobileDevice)) { echo 'Redirecting for nokia...'; }

} else { echo 'Redirecting to normal page...';}?>

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

11 de 22

Page 12: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Nesse exemplo nós adicionamos o USER_AGENT manualmente, passando como parametro no construtor da classe. Depois utilizamos o método CheckMobile() novamente e executamos o método GetMobileDevice() que retorna uma string com o nome do dispositivo móvel.

Analisamos a string através de uma expressão regular e determinamos para caso seja um iphone ou um nokia, a aplicação imprima uma mensagem diferente para cada dispositivo.

A classe IsMobile tem mais opções, como habilitar uma tabela de log para gravar as informações de quem acessou a sua aplicação por um dispositivo móvel e armazenar em um banco de dados (mySQL) e pode ser integrado com a API em PHP do WURFL, ferramenta que vamos aprender a usar a seguir.

WURFL

Wireless Universal Resource File - é um projeto criado por Luca Passani que tem como objetivo reunir em um único arquivo todos os Dispositivos Móveis da terra.

É um projeto ambicioso mas que vem dando certo, o arquivo está sempre sendo atualizado pela comunidade. E esse "arquivo" é um simples XML, o wurfl.xml.

Vamos agora um how-to para utilização da API em PHP do WURFL:

• Pré-requisitos

1. Log Library instalada, caso você não tenha é só baixar aqui: http://pear.php.net/package/Log

Agora se você se tiver o pear instalado e estiver usando linux é só dar seguinte comando: $ pear install log

2. O seu PHP deve ter suporte para trabalhar com arquivos ZIP

• Passo a passo

1. Download da API em PHP: https://sourceforge.net/project/showfiles.php?group_id=55408&package_id=313394

2. Descompacte o arquivo na pasta do seu servidor

3. Crie uma pasta para guardar os arquivos de cache. Ex: /caminho/ate/wurfl/cache e de permissão de escrita

4. Edite o arquivo wurfl-config.xml que vai estar em examples/resources e altere o diretório do cache para o que você criou, coloque o caminho completo até a pasta. O valor da pasta de cache vai ser dir=./cache altere os dois (persistence e cache) para dir=/caminho/ate/wurfl/cache

5. Acesse a pasta examples/demo via browser. Ex: http://localhost/seudiretorio/wurfl/examples/demo

No último passo, a página vai demorar um pouco para carregar pois ela está gerando o cache das

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

12 de 22

Page 13: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

informações do wurfl.xml.

A API tem um sistema de cache por default, que gera arquivos com as informações de cada dispositivo dentro das pastas FILE_CACHE_PROVIDER e FILE_PERSISTENCE_PROVIDER.

Depois de ter gerado o cache, vamos criar um exemplo simples:

<?phpdefine("WURFL_DIR",'/caminho/ate/wurfl/WURFL/');define("RESOURCES_DIR",'/caminho/ate/wurfl/examples/resources/');require_once WURFL_DIR. 'WURFLManagerProvider.php';

$wurflConfigFile = RESOURCES_DIR . 'wurfl-config.xml';$wurflManager = WURFL_WURFLManagerProvider::getWURFLManager($wurflConfigFile);$device = $wurflManager->getDeviceForUserAgent("Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE71-3/200.21.118; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413");?><ul><li>ID: <?php echo $device->id ?> </li><li>Brand Name: <?php echo $device->getCapability("brand_name") ?> </li><li>Xhtml Preferred Markup: <?php echo $device->getCapability("preferred_markup") ?> </li><li>Wallpaper Max Width: <?php echo $device->getCapability("wallpaper_max_width") ?></li><li>Wallpaper Max Hight: <?php echo $device->getCapability("wallpaper_max_height") ?></li><li>Video: <?php echo $device->getCapability("video") ?> </li></ul>

Definimos o caminho da pasta para o WURFL e para resourcers, depois é só incluir a classe WURFLManagerProvider e carregar o arquivo de configuração.

Feito isso usamos o método getDeviceForUserAgent() para buscar as informaçõs do dispositivo móvel e que temos como retorno, é algo muito mais completo que a IsMobile ofereceu.

O objeto $device é que guarda as informações sobre os recursos do dispositivo, aconselho você a dar um var_dump() no objeto e analisar ele.

Para quem se interessou e quer mais informações sobre o projeto leia a documentação: http://wurfl.sourceforge.net/help_doc.php

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

13 de 22

Dica: Gostaria de guardar as informações do wurfl.xml em uma base de dados?

Conheça o projeto Tera-Wurfl: http://www.tera-wurfl.com/

Page 14: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Integração Gateway (Envio de SMS)

O termo “integração gateway” vem de empresas que prestam o serviço de “integradora” entre a sua aplicação e a operada no envio de dados (sms, mms e etc).

A integradora é a empresa que é responsável pela tarifação do SMS, que verifica junto a operadora se o cliente tem crédito, gerencia e supervisiona o envio do sms, reportando para a sua aplicação o sucesso ou qualquer falha no envio do sms.

Nesse exemplo as setas vermelhas indicam os caminhos para o envio do SMS, saindo de uma aplicação web, indo para integradora e terminando na operadora e as setas verdes são a respostas da primeira requisição, saí da operadora, vai para a integradora e que por sua vez retorna para o dispositivo móvel do usuário.

O retorno você pode definir com a integradora, pode ser para o número do celular que fez o envio do SMS ou no caso de uma aplicação web, será necessário informar uma url para a integradora retornar uma requisição para sua aplicação.

Esse serviço pode ser utilizado para validação de cadastro de usuários no seu sistema, para reforçar a forma convencional de validação de usuário que é feito via e-mail. Você pode na primeira etapa utilizar e-mails de confirmação de cadastro e para certas funcionalidades no seu sistema, só liberar o acesso para aqueles que receberem um SMS com um código para permitir o acesso a um módulo do sistema.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

14 de 22

Page 15: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Introdução a biblioteca cURL

“O PHP suporta a libcurl, uma biblioteca criada por Daniel Stenberg, que permite a você conectar e comunicar com vários tipos diferentes de servidor com vários tipos diferentes de protocolos. libcurl atualmente suporta os protocolos http, https, ftp, gopher, telnet, dict, file, e ldap. libcurl também suporta certificados HTTPS, HTTP POST, HTTP PUT, upload com FTP (isto também pode ser feito com a extensão de ftp do PHP), upload baseado em formulário HTTP, proxies, cookies, e autenticação usuário+senha. ”

fonte: http://br2.php.net/manual/pt_BR/intro.curl.php

Vamos criar o exemplo em cima do seguinte cenário:

Temos uma aplicação web, que a sua principal funcionalidade é gerenciar o estoque de uma empresa que vende ar-condicionados em Campo Grande – MS, os negócios vão de vento em popa. A empresa quer aplicar uma nova estratégia de venda, mandar os vendedores irem ao centro da cidade oferecer ar-condicionados as lojas.

Pórem a empresa trabalha sempre com um baixo número de itens no seu estoque e precisa sempre ficar cuidando o estoque para fazer um novo pedido ao fornecedor e não vender um ar-condicionado a pronta entrega e não ter ele disponível para o cliente.

Portanto uma nova demanda foi criada para essa aplicação web, sempre que um novo pronto chegar ao estoque ou quando estiver com saldo zero, enviar um sms para os vendedores avisando.

Isso tem que ser automático, sem necessitar o preenchimento de um formulário. Como fazer?

1. Entrar em contato com uma empresa “integradora” e fechar uma quantidade de créditos suficientes para o envio de sms a todos os vendedores.

2. Adicionar no formulário de cadastro dos vendedores o número do celular como obrigatório

3. Inserir na regra de negócio que efetua a entrada e saída de itens do estoque o exemplo que vamos estudar a seguir.

<?php$campos['nome'] = 'Alziro da Silva';$campos['celular'] = '11843245';$campos['mensagem'] = 'Acabou de chegar 5 unidades do XZ10.000';

$dados = http_build_query($campos);

$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'http://labs.porkaria.com.br/curl/mirror_http_request.php');curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $dados);

echo $result = curl_exec($ch);curl_close($ch);?>

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

15 de 22

Page 16: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Criei uma página para receber essa requisição e apenas retornar o que foi enviado, para podermos testar essa requisição e saber se todas as informações foram enviadas corretamente.

Segue abaixo o retorno da requisição que fizemos acima:

nome = Alziro da Silva celular = 11843245 mensagem = Acabou de chegar 5 unidades do XZ10.000

Informações do Cabeçalho SERVER_NAME = labs.porkaria.com.brREMOTE_ADDR = 189.103.83.167

Podemos manipular as informações do cabeçalho da nossa requisição, vou mostrar um exemplo aonde vamos definir o valor do HTTP_USER_AGENT, é só adicionar as seguintes opções na nossa requisição:

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');

E muda as informações do cabeçalho da nossa requisição para:

Informações do Cabeçalho HTTP_USER_AGENT = Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5SERVER_NAME = labs.porkaria.com.brREMOTE_ADDR = 189.103.83.167

A manipulação do valor do HTTP_USER_AGENT já nos dá a opção de retornar a mensagem em um formato especifico caso seja um dispositivo móvel. É só implementar alguma das soluções de identificação de mobile nas regras de negócio da página que recebe as requisições.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

16 de 22

Dica: Existe uma classe chamada HTTP_Request2 do PEAR, que lhe permite trabalhar com várias requisições http e seus resultados de forma fácil. Vale a pena conhecer essa ferramenta se você precisa trabalhar com requisições HTTP.

Aonde encontrar: http://pear.php.net/package/HTTP_Request2

Page 17: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Introdução a biblioteca SOAP

A bibliteoca SOAP é utilizada para escrever Servidores e Clientes SOAP. E suporta as especificações » SOAP 1.1, » SOAP 1.2 e » WSDL 1.1

fonte: http://br2.php.net/manual/pt_BR/intro.soap.php

Com essa biblioteca temos facilidade para criar e trabalhar com Web Services, que é sem dúvida uma solução muito utilizada nos serviços para o mercado mobile. Um exemplo é as integradoras que na sua maioria disponibilizam também Web Services para fazer a conexão com a sua aplicação.

Outra vantagem em utilizar Web Services é a possibilidade de softwares com linguagens diferentes poderem se comunicar de uma maneira fácil, você pode ter um jogo para celular escrito em Java, que faz requisições para um servidor via web services, que utiliza PHP para processar as regras de negócios e retornar o “score online” do jogo.

Essa biblioteca tem como dependência a GNOME xml library e a biblioteca SOAP já vem instalada com o PHP, você precisa apenas habilita-la.

Depois de instalada, vamos trabalhar com o seguinte cenário:

O software precisa identificar se a chamada via web service está sendo feita por um iphone ou um celular da nokia, pois existem regras de negócios que dependem dessa diferença.

cliente.php

<?phptry { $client = new SoapClient(null,array( 'location' => 'http://labs.porkaria.com.br/soap/servidor.php', 'uri' => 'http://labs.porkaria.com.br/soap'));

$result = $client->checkUserAgent("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3");

echo $result;

} catch (SoapFault $fault) { trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);}?>

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

17 de 22

Page 18: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

mobile.class.php

<?phpclass Mobile { private $uri = 'http://labs.porkaria.com.br/soap';

public function checkUserAgent($user_agent) {

if (preg_match("/iphone/i",$user_agent)) { return 'iphone'; } else if (preg_match("/nokia/i",$user_agent)) { return 'nokia'; }

}

public function getUri() { return $this->uri; } }?>

servidor.php

<?phprequire_once "mobile.class.php";$ws = new Mobile();

$server = new SoapServer(null,array('uri' => $ws->getUri()));

$server->setClass('Mobile');

if (isset($_GET['getfunctions'])) { $functions = $server->getFunctions(); print_r(json_encode($functions));}

$server->handle();?>

Agora é só rodar o arquivo cliente.php para visualizar o retorno “iphone”.

Utilizamos um exemplo simples de Web Service, não escrevemos o WSDL, que é o XML que descreve o serviço e que possibilita independencia de sua linguagem de programação.

Mas com esse exemplo conseguimos mostrar mais uma ferramenta em PHP que podemos utilizar para atender um dos vários serviços do mercado mobile.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

18 de 22

Quer aprender mais sobre Web Services?

http://imasters.uol.com.br/artigo/4245/webservices/entendendo_os_webservices/

Page 19: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Construindo um Site em versão Mobile

Acredito que a melhor maneira de se aprender a desenvolver um site para mobile é fazendo comparações com o desenvolvimento de um site normal. Pois o mais comum é ter versões mobile de sites convencionais.

Browser WarsNo desenvolvimento web, os desenvolvedores sofrem bastante com a incompatibilidade entre alguns browsers (leia-se: Internet Explorer), no seu suporte a javascript, html e css.

Infelizmente no desenvolvimento mobile web isso também existe, e muito, principalmente no suporte a xhtml, html, css, javascript, até mesmos recursos do browser como cookies e suporte a plugins como o do flash.

Isso nos prejudica no desenvolvimento pois deixamos de usar vários recursos que o Javascript ou Css permitiria para amenizar grandes problemas, com por exemplo a usabilidade da aplicação.

Temos que ficar atentos ao recursos que vamos usar nas nossas aplicações. Na Wikipédia vocês podem encontrar uma lista de “Mobile Browsers” e suas caracteristicas.

http://en.wikipedia.org/wiki/Mobile_browser

Mas existe solução para esse problema? Sim, e ela se chama “boas práticas”.

Boas Práticas (Seguindo os conselhos e padrões da W3C)

Se você já desenvolve suas aplicações web seguindo os padrões da W3C, já considere meio caminho andado para a sua aplicação ter um pleno suporte em um dispositivo móvel, mas se você não segue os padrões, não vai ter outra alternativa, vai ter que seguir.

Pois aplicações mobile web ganham muito em seguir boas práticas no desenvolvimento, o resultado reflete não só em um “bom código”, mas também em uma aplicação melhor de ser acessada por um dispositivo móvel, ganha-se em usabilidade e performance.

A W3C criou a Mobile Web Initiative, dentre várias ferramentas, eventos e etc, existe um documento chamado Mobile Web Best Practices 1.0 que descreve como desenvolver para mobile seguindo padrões. Criou também o Mobile Checker, que nada mais é do que um validador para o seu código, para ver se você está no caminho certo.

Ela elaborou um guia prático para desenvolvimento mobile web, aonde da dicas para o desenvolvimento, mostra algumas limitações e reforça o uso dos padrões, pois em um mercado tão fragmentado como o dos dispositivos e navegadores, os padrões são a melhor garantia de interoperabilidade.

Vamoas as 10 regras básicas para fazer a web móvel:

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

19 de 22

Page 20: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

1. Faça seu projeto para uma Web única

2. Confie nos padrões Web

3. Evite os riscos conhecidos

4. Seja prudente com as limitações dos dispositivos

5. Aperfeiçoe a navegação

6. Teste antes os gráficos e cores

7. Faça em tamanho reduzido

8. Economize o uso da rede

9. Facilite a entrada dos dados

10. Pense nos usuários da Web móvel

O guia completo pode ser encontrado aqui: http://www.w3c.br/divulgacao/guia-boas-praticas2008/

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

20 de 22

Teste o site que você está desenvolvendo no emulador do Opera Mini.

Acesse: http://www.opera.com/mini/demo/

Page 21: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Dicas de ferramentas

Wall4php Mobile FrameWork

É uma implementação do WALL (Wireless Abstraction Library) criado originalmente para Java. O framework visa manter a compatibilidade do seu código com vários tipos aparelhos. Alguns suportam XHTML outros apenas WML. Usando o framework você garante a compatibilidade e reusabilidade do seu código.Quais serviços ele atende: Site Móvel, Advertising, Interação/MultímidaOnde encontrar: http://wall.laacz.lv/

Sybrain

Um ERP – Enterprise Resource Planning – totalmente projetado para acesso via WAP. Nele você pode ter Pedido de Venda, Controle de Estoque, Fluxo de Caixa, Contas a Pagar/Receber e etc. E o melhor de tudo, feito em PHP e ainda Opensource.Quais serviços ele atende: Vendas em campoOnde encontrar: http://www.sybrain.com/

Yahoo Blueprint

Uma plataforma de desenvolvimento para a criação de aplicativos remotos. Como uma plataforma, ele fornece todos os elementos necessários para a execução, o desenvolvimento, o teste e a publicação de aplicativos remotos destinados ao ambiente de execução do Yahoo! Blueprint.Quais serviços ele atende: Site Móvel, Interação/Multímida, Levantamento e análise de dadosOnde encontrar: http://developer.yahoo.com/mobile/blueprintquickstart/index.html Ótimo tutorial em pt_BR http://www.ibm.com/developerworks/br/library/wa-yahoo/section2.html

FFmpeg-php

É um extensão do php de uso fácil para obter informações de arquivos de vídeo e audio, dando a opção de manipular os frames do vídeo, recortar o audio, diminuir resolução do vídeo e etc.Quais serviços ele atende: Site Móvel, Advertising, Interação/MultímidaOnde encontrar: http://ffmpeg-php.sourceforge.net/

GD ou ImageMagick

São duas extensões do php para manipular e processar imagens. Existem várias classes para facilitar o uso dessas extensões.Quais serviços ele atende: Site Móvel, Advertising, Interação/MultímidaOnde encontrar: http://br2.php.net/manual/pt_BR/book.image.php http://wideimage.sourceforge.net/wiki/MainPage http://br.php.net/manual/pt_BR/book.imagick.php http://www.magickwand.org/ http://pecl.php.net/package/imagick

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

21 de 22

Page 22: Atendendo o Mercado Mobile usando PHP

Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09

Conclusão

O Desenvolvimento Mobile Web é algo novo, tanto para os desenvolvedores quanto para os usuários. Para os desenvolvedores isso se torna uma vantagem, pois podem acompanhar de perto a formação de novo conceito e contribuir para o crescimento de melhores soluções para o Mobile Bussines.

Os usuários que usam os serviços da internet via dispositivo móvel são em sua maioria usuários com experiência e conhecimento suficiente para navegar na internet, eles já tem o conhecido na navegação em aplicações web para ambiente desktop e consecutivamente se tornam usuários mais exigentes. Acredito que em um futuro próximo, essa regra também vá se aplicar aos novos usuários.

Cabe agora aos desenvolvedores fazer que a navegação em aplicações mobile web sejam mais agradáveis e eficientes. O futuro para as aplicações mobile web é promissor, os números e realidade apontam para isso.

O Desenvolvimento Mobile Web é a evolução natural do Desenvolvimento Web, que agora alcança novos usuários, problemas e necessidades.

...e que a força esteja com você.

Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria)

22 de 22