ChromeApps: Programando para desktop como se fosse web

Um aplicativo web on-line tem muitas vantagens e desvantagens – é claro – Eu recomendo mesmo assim o desenvolvimento de aplicativos web.

Todavia, há uma desvantagem que é capaz de cortar o fôlego: a queda da internet. A internet tem uma característica notável firmemente alicerçada na Lei geral de Murphy que quando você não precisa dela, seus filhos a utilizam na boa, mas quando você precisa dela, ela não funciona ou o faz a ritmo de tartaruga ajudando bicho preguiça.

Uma das soluções pode ser desenvolver um Chrome App. Uma das vantagens é que toda a interface do usuário já está carregada do lado do cliente. Outra é que você pode armazenar dados localmente com  o que o uso da sua magra largura de banda (sempre é) é melhor utilizada.

Obviamente que isso nos leva a outro conjunto de desvantagens e vantagens que podem ser motivo de um outro artigo mas que – com certeza – não é o foco deste. Baste apenas dizer que quase tudo o que você (bem) aprendeu de programação web on-line é aplicável a um aplicativo Chrome App assim como o é para aplicativos de dispositivos móveis usando Cordova, por exemplo.

O propósito deste artigo é apenas mostrar como usar YeAPF para construir um Chrome App consultando um serviço RESTful na web. Dividiremos este exercicio em duas grandes partes: 1) Criar o aplicativo 2) Mostrar os dados puxados da Web. Um outro artigo demonstrará como manter esses dados no banco de dados local. Por enquanto é suficiente dizer que tudo o que vc já faz com ycomm.invoke() se aplica ao ifc.plead(). Invoke, Crave e Plead são as interfaces desenvolvidas na série 0.8.x. Nosso projeto é atingirmos uma interface única de consulta de dados na serie 0.9.x com o que o programador apenas indicará se a url de requisição e o método utilizado (XMLHttpRequest, RESTful) e o YeAPF se encarregará do resto.

O banco de dados para os testes é público e bem conhecido. Você pode fazer sua própria copia assim:

cd ~/dev
git clone https://github.com/datacharmer/test_db.git

Criando o aplicativo

Se seu aplicativo é distribuido pela loja da Google, este passo não é necessário. Mas se estiver desenvolvendo ou quer aprender como funciona, é essencial.

Crie uma pasta (não precisa estar sob seu www) e despeje lá o conteúdo da distribuição.

O arquivo mais importante é manifest.json. É nele que indicamos ao Chrome se se trata de um aplicativo, uma extensão, os direitos que precisamos para rodar, etc. Dos valores que ali há dois requerem especial atenção: o permissions e o sandbox. No permissions especificamos que iremos usar as habilidades de armazenar dados do Chrome e no sanbox, lhe indicaremos que algumas páginas (no nosso caso apenas uma) deverá rodar com certos privilegios (mas sem contato com o mundo exterior)

O segundo arquivo importante é o ifc.html que faz parte da distribuição do YeAPF na serie 0.8.x Simplificando quilos de documentação fica assim: a sua página principal (sua tela) vai conseguir enxergar o mundo exterior (leia-se RESTful) utilizando a página que está no sandbox e a sua sandbox não tem contato com o usuário.

O terceiro arquivo importante é o background.js. Estamos seguindo aqui a nomenclatura utilizada no site do Chrome App para que quando a leia (se é que você tem tempo para isso) não fique fazendo traduções na sua cabeça; mas pode chamar este arquivo de qualquer nome que lhe pareça correto. Observe neste arquivo duas coisas: a existência de uma variável global chamada ySandboxFrame e a função de callback que preenche esta variável com a janela que está sendo criada.

Instalando o aplicativo

Se for sua primeira vez, abra chrome://flags e procure por “Experimental Extension APIs”. Verifique que esteja habilitada.

Uma vez feito isso, abra chrome://extensions/

Confirme que o modo desenvolvedor esteja habilitado

Clique no botão “Load Unpacked extension

Procure sua pasta (aquela na que você despejou o zip) e clique em “Open
Se tudo ocorreu bem, seu app estará na lista de extensões (mesmo sendo um Chrome App) e no seu menu iniciar (Imagino que em Windows seja a mesma coisa, estou fazendo isto com Ubuntu)

Rodando o aplicativo

Há duas formas de rodar o aplicativo: Clicando em “launch” no chrome://extensions ou caçando ele no menú iniciar do seu computador.

A estas alturas já deve estar feliz que nem cachorro com dois rabos e se nunca viu uma ChromeApp na vida e é programador Desktop, deve de estar dando pulos de alegria.

Mas, por enquanto é apenas uma telinha branca sem muita informação, então pare de dar chilique e volte para sua mesa e tente ficar quieto. Seus vizinhos e parentes vão achar que você está louco e não estão muito longe da verdade.

A fonte de dados

Como esses dados chegaram à sua tela? Eles foram puxados on-line via RESTful. Especificamente a chamada que é feita é a seguinte:

http://www.inovacaosistemas.com.br/employees/rest.php?s=emp&a=getDepartamentList&callback=minhaFuncao

Isso é definido no departaments.js assim:

ifc.setConnParams("http://www.inovacaosistemas.com.br/employees/");

Qual a graça disso tudo? Trazer apenas os dados do servidor.

Qual a dor de cabeça? As mesmas de um aplicativo Desktop: toda vez que você atualiza o fonte, tem que atualizar seus clientes.

Qual a solução? Você passar a distribuir seus aplicativos pelo Web Store da Google

Tem custo? Não

Por que você não está fazendo isto ainda? Não faço ideia. Culpa minha que não é.