SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
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
                                                 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
Atendendo o mercado Mobile usando PHP
                                                 Mão na Massa - PHP Conference Brasil '09 – 26/11/09




Termos de uso para esse material




                                   Atribuição 2.5 Brasil


Você pode
                                copiar, distribuir, exibir e executar a obra




                                criar obras derivadas




Sob as seguintes condições
                                Atribuiçã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.



         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).



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
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
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
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
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
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
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.




           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




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

                                                                                                       9 de 22
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
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
<?php
require_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 Ge
cko) 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
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
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:


<?php
define("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; S
eries60/3.1 NokiaE71-3/200.21.118; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) App
leWebKit/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




           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/




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

                                                                                                      13 de 22
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
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
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.br
REMOTE_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.5
SERVER_NAME = labs.porkaria.com.br
REMOTE_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.




          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




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

                                                                                                      16 de 22
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
<?php
try {
  $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: {$f
ault->faultstring})", E_USER_ERROR);
}
?>




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

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


mobile.class.php
<?php
class 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
<?php
require_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.


         Quer aprender mais sobre Web Services?

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


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

                                                                                                      18 de 22
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 Wars
No 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
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/




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

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




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

                                                                                                      20 de 22
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ímida
Onde 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 campo
Onde 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 dados
Onde 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ímida
Onde 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ímida
Onde 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
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

Weitere ähnliche Inhalte

Andere mochten auch

Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e javaMatteo Baccan
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e javaMatteo Baccan
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHPRafael Dohms
 
Create your own PHP extension, step by step - phpDay 2012 Verona
Create your own PHP extension, step by step - phpDay 2012 VeronaCreate your own PHP extension, step by step - phpDay 2012 Verona
Create your own PHP extension, step by step - phpDay 2012 VeronaPatrick Allaert
 
Programção PHP
Programção PHPProgramção PHP
Programção PHPceap
 
PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行Yasuo Ohgaki
 
PHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with thisPHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with thisIan Macali
 

Andere mochten auch (14)

Trabajo yañez
Trabajo yañezTrabajo yañez
Trabajo yañez
 
Selenium
SeleniumSelenium
Selenium
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e java
 
PHP: Evolução
PHP: EvoluçãoPHP: Evolução
PHP: Evolução
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHP
 
Como desenvolver um tema wordpress de A a Z
Como desenvolver um tema wordpress de A a ZComo desenvolver um tema wordpress de A a Z
Como desenvolver um tema wordpress de A a Z
 
Create your own PHP extension, step by step - phpDay 2012 Verona
Create your own PHP extension, step by step - phpDay 2012 VeronaCreate your own PHP extension, step by step - phpDay 2012 Verona
Create your own PHP extension, step by step - phpDay 2012 Verona
 
Programção PHP
Programção PHPProgramção PHP
Programção PHP
 
PHP 7
PHP 7PHP 7
PHP 7
 
PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行
 
Apostila Android Gratuita
Apostila Android GratuitaApostila Android Gratuita
Apostila Android Gratuita
 
PHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with thisPHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with this
 
PHP Web Programming
PHP Web ProgrammingPHP Web Programming
PHP Web Programming
 

Ähnlich wie Atendendo o Mercado Mobile usando PHP

Desenvolvimento Mobile Web usando PHP e Software Livre
Desenvolvimento Mobile Web usando PHP e Software LivreDesenvolvimento Mobile Web usando PHP e Software Livre
Desenvolvimento Mobile Web usando PHP e Software LivreBruno Fernandes "PorKaria"
 
PHP e o Desenvolvimento Mobile Web no LinguAgil
PHP e o Desenvolvimento Mobile Web no LinguAgilPHP e o Desenvolvimento Mobile Web no LinguAgil
PHP e o Desenvolvimento Mobile Web no LinguAgilBruno Fernandes "PorKaria"
 
Aula 01 - Apresentaçã e Conceitos.pptx
Aula 01 - Apresentaçã e Conceitos.pptxAula 01 - Apresentaçã e Conceitos.pptx
Aula 01 - Apresentaçã e Conceitos.pptxRoberto Aragy
 
Introdução ao Firefox OS
Introdução ao Firefox OSIntrodução ao Firefox OS
Introdução ao Firefox OSDavid Ruiz
 
Introdução ao Desenvolvimento Mobile Web no LinguAgil
Introdução ao Desenvolvimento Mobile Web no LinguAgilIntrodução ao Desenvolvimento Mobile Web no LinguAgil
Introdução ao Desenvolvimento Mobile Web no LinguAgilBruno Fernandes "PorKaria"
 
001 panorama geral - Arquitetura de aplicativos para dispositivos móveis
001   panorama geral - Arquitetura de aplicativos para dispositivos móveis001   panorama geral - Arquitetura de aplicativos para dispositivos móveis
001 panorama geral - Arquitetura de aplicativos para dispositivos móveisMaico Moreira
 
Marketing digital tecnologia da informação
Marketing digital   tecnologia da informaçãoMarketing digital   tecnologia da informação
Marketing digital tecnologia da informaçãoAna Paula Coelho Barbosa
 
Trab.final
Trab.finalTrab.final
Trab.finalbeto2018
 
Trab.final
Trab.finalTrab.final
Trab.finalbeto2018
 
Desenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cgDesenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cgBruno Fernandes "PorKaria"
 
Programação de dispositivos móveis com Java ME e NetBeans - Leandro Nunes
Programação de dispositivos móveis com Java ME e NetBeans - Leandro NunesProgramação de dispositivos móveis com Java ME e NetBeans - Leandro Nunes
Programação de dispositivos móveis com Java ME e NetBeans - Leandro NunesTchelinux
 

Ähnlich wie Atendendo o Mercado Mobile usando PHP (20)

PHP no Mundo Mobile v 2.0
PHP no Mundo Mobile v 2.0PHP no Mundo Mobile v 2.0
PHP no Mundo Mobile v 2.0
 
Introdução ao Desenvolvimento Mobile Web
Introdução ao Desenvolvimento Mobile WebIntrodução ao Desenvolvimento Mobile Web
Introdução ao Desenvolvimento Mobile Web
 
Desenvolvimento Mobile Web usando PHP e Software Livre
Desenvolvimento Mobile Web usando PHP e Software LivreDesenvolvimento Mobile Web usando PHP e Software Livre
Desenvolvimento Mobile Web usando PHP e Software Livre
 
PHP no Mundo Mobile v 3.0
PHP no Mundo Mobile v 3.0PHP no Mundo Mobile v 3.0
PHP no Mundo Mobile v 3.0
 
PHP e o Desenvolvimento Mobile Web no LinguAgil
PHP e o Desenvolvimento Mobile Web no LinguAgilPHP e o Desenvolvimento Mobile Web no LinguAgil
PHP e o Desenvolvimento Mobile Web no LinguAgil
 
Aula 01 - Apresentaçã e Conceitos.pptx
Aula 01 - Apresentaçã e Conceitos.pptxAula 01 - Apresentaçã e Conceitos.pptx
Aula 01 - Apresentaçã e Conceitos.pptx
 
Restaurante
RestauranteRestaurante
Restaurante
 
Proposta comercial
Proposta comercialProposta comercial
Proposta comercial
 
Introdução ao Firefox OS
Introdução ao Firefox OSIntrodução ao Firefox OS
Introdução ao Firefox OS
 
Introdução ao Desenvolvimento Mobile Web no LinguAgil
Introdução ao Desenvolvimento Mobile Web no LinguAgilIntrodução ao Desenvolvimento Mobile Web no LinguAgil
Introdução ao Desenvolvimento Mobile Web no LinguAgil
 
001 panorama geral - Arquitetura de aplicativos para dispositivos móveis
001   panorama geral - Arquitetura de aplicativos para dispositivos móveis001   panorama geral - Arquitetura de aplicativos para dispositivos móveis
001 panorama geral - Arquitetura de aplicativos para dispositivos móveis
 
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
 
Desenvolvimento Mobile Web e o PHP
Desenvolvimento Mobile Web e o PHPDesenvolvimento Mobile Web e o PHP
Desenvolvimento Mobile Web e o PHP
 
Folder Mobile Praesto
Folder Mobile  PraestoFolder Mobile  Praesto
Folder Mobile Praesto
 
Marketing digital tecnologia da informação
Marketing digital   tecnologia da informaçãoMarketing digital   tecnologia da informação
Marketing digital tecnologia da informação
 
Trab.final
Trab.finalTrab.final
Trab.final
 
Trab.final
Trab.finalTrab.final
Trab.final
 
Alguns conceitos web
Alguns conceitos webAlguns conceitos web
Alguns conceitos web
 
Desenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cgDesenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cg
 
Programação de dispositivos móveis com Java ME e NetBeans - Leandro Nunes
Programação de dispositivos móveis com Java ME e NetBeans - Leandro NunesProgramação de dispositivos móveis com Java ME e NetBeans - Leandro Nunes
Programação de dispositivos móveis com Java ME e NetBeans - Leandro Nunes
 

Mehr von Bruno Fernandes "PorKaria"

Mercado de trabalho de TI em números, fatos e exemplos
Mercado de trabalho de TI em números, fatos e exemplosMercado de trabalho de TI em números, fatos e exemplos
Mercado de trabalho de TI em números, fatos e exemplosBruno Fernandes "PorKaria"
 
QA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatosQA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatosBruno Fernandes "PorKaria"
 
Webapp, já posso investir nisso ? Latinoware 2011
Webapp, já posso investir nisso ? Latinoware 2011Webapp, já posso investir nisso ? Latinoware 2011
Webapp, já posso investir nisso ? Latinoware 2011Bruno Fernandes "PorKaria"
 
PHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederalPHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederalBruno Fernandes "PorKaria"
 

Mehr von Bruno Fernandes "PorKaria" (18)

Mercado de trabalho de TI em números, fatos e exemplos
Mercado de trabalho de TI em números, fatos e exemplosMercado de trabalho de TI em números, fatos e exemplos
Mercado de trabalho de TI em números, fatos e exemplos
 
QA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatosQA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatos
 
#Qualidade decodigo
#Qualidade decodigo#Qualidade decodigo
#Qualidade decodigo
 
Piadas de CSS e Javascript
Piadas de CSS e JavascriptPiadas de CSS e Javascript
Piadas de CSS e Javascript
 
Criação de Games Mobile
Criação de Games MobileCriação de Games Mobile
Criação de Games Mobile
 
Webapp, já posso investir nisso ? Latinoware 2011
Webapp, já posso investir nisso ? Latinoware 2011Webapp, já posso investir nisso ? Latinoware 2011
Webapp, já posso investir nisso ? Latinoware 2011
 
Monetização em Games Mobile
Monetização em Games MobileMonetização em Games Mobile
Monetização em Games Mobile
 
Webapp já posso invistir nisso ? FISL12
Webapp já posso invistir nisso ? FISL12Webapp já posso invistir nisso ? FISL12
Webapp já posso invistir nisso ? FISL12
 
Webapp já posso invistir nisso ?
Webapp já posso invistir nisso ?Webapp já posso invistir nisso ?
Webapp já posso invistir nisso ?
 
Desenvolvimento Mobile Web & Software Livre
Desenvolvimento Mobile Web & Software LivreDesenvolvimento Mobile Web & Software Livre
Desenvolvimento Mobile Web & Software Livre
 
Desenvolvimento Mobile Web e PHP na FIPAR
Desenvolvimento Mobile Web e PHP na FIPARDesenvolvimento Mobile Web e PHP na FIPAR
Desenvolvimento Mobile Web e PHP na FIPAR
 
PHP e o Desenvolvimento Mobile Web
PHP e o Desenvolvimento Mobile WebPHP e o Desenvolvimento Mobile Web
PHP e o Desenvolvimento Mobile Web
 
PHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederalPHP e o Desenvolvimento Mobile Web - PHPhederal
PHP e o Desenvolvimento Mobile Web - PHPhederal
 
Desenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHPDesenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHP
 
A Turma Toda No Mundo Mobile
A Turma Toda No Mundo MobileA Turma Toda No Mundo Mobile
A Turma Toda No Mundo Mobile
 
Apresentação do grupo PHPMS
Apresentação do grupo PHPMSApresentação do grupo PHPMS
Apresentação do grupo PHPMS
 
PHP Brasil Comunidades
PHP Brasil ComunidadesPHP Brasil Comunidades
PHP Brasil Comunidades
 
Flisol2009 Conhecendo O Wordpress
Flisol2009 Conhecendo O WordpressFlisol2009 Conhecendo O Wordpress
Flisol2009 Conhecendo O Wordpress
 

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
 
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
 
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 - 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
 
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
 
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
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
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
 
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
 

Kürzlich hochgeladen (9)

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
 
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
 
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 - 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
 
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
 
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
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
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
 
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
 

Atendendo o Mercado Mobile usando PHP

  • 1. 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
  • 2. 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
  • 3. Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09 Termos de uso para esse material Atribuição 2.5 Brasil Você pode copiar, distribuir, exibir e executar a obra criar obras derivadas Sob as seguintes condições Atribuiçã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. 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). 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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. 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 Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria) 9 de 22
  • 10. 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
  • 11. 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 <?php require_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 Ge cko) 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
  • 12. 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
  • 13. 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: <?php define("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; S eries60/3.1 NokiaE71-3/200.21.118; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) App leWebKit/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 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/ Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria) 13 de 22
  • 14. 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
  • 15. 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
  • 16. 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.br REMOTE_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.5 SERVER_NAME = labs.porkaria.com.br REMOTE_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. 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 Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria) 16 de 22
  • 17. 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 <?php try { $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: {$f ault->faultstring})", E_USER_ERROR); } ?> Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria) 17 de 22
  • 18. Atendendo o mercado Mobile usando PHP Mão na Massa - PHP Conference Brasil '09 – 26/11/09 mobile.class.php <?php class 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 <?php require_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. Quer aprender mais sobre Web Services? http://imasters.uol.com.br/artigo/4245/webservices/entendendo_os_webservices/ Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria) 18 de 22
  • 19. 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 Wars No 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
  • 20. 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/ Teste o site que você está desenvolvendo no emulador do Opera Mini. Acesse: http://www.opera.com/mini/demo/ Projeto PHP Mobile – http://www.phpmobile.com.br, apostila criada por Bruno Fernandes Pereira (vulgo PorKaria) 20 de 22
  • 21. 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ímida Onde 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 campo Onde 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 dados Onde 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ímida Onde 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ímida Onde 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
  • 22. 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