Sou um desenvolvedor de dispositivos móveis que passou muito tempo considerando esse problema.
Por que você pergunta?
Provavelmente, você espera reduzir os custos de desenvolvimento de aplicativos:
- Usando habilidades de desenvolvimento HTML5 / Javascript existentes
- Segmentar várias plataformas sem escrever vários aplicativos do zero
- Não é necessário manter várias bases de código no futuro
Os motivos também podem incluir:
- Desenvolvimento HTML5 / Javascript percebido como "mais fácil" do que o desenvolvimento da plataforma nativa
- Evitando o pagamento de taxas de registro no programa para desenvolvedores
- Evitando restrições de conteúdo da loja de aplicativos (jogos de azar, etc.)
- Evitando a compra de hardware de desenvolvimento (por exemplo, desenvolvimento de Mac para iPhone)
Definições
Vamos estabelecer exatamente o que queremos dizer com cada uma das três abordagens mencionadas:
Nativo
Um aplicativo instalado em um dispositivo, geralmente a partir de sua loja de aplicativos (embora às vezes possa ser carregado de lado). Para os fins desta discussão, a interface do usuário de um aplicativo nativo geralmente não consiste apenas em uma visualização da web em tela cheia.
Web para dispositivos móveis
Na verdade, pode ser qualquer página da Web; no entanto, para esta discussão, vamos considerar um aplicativo Web de página única que tenta imitar a aparência de um aplicativo nativo. Não é um aplicativo nativo, é executado no navegador do dispositivo.
Híbrido
Híbrido aplicativo instanceof
nativo.
A maioria das pessoas provavelmente entende que um aplicativo híbrido é um aplicativo da web móvel de página única (novamente imitando a aparência de um aplicativo nativo), mas compactado como um aplicativo nativo com acesso a serviços nativos (à la Phonegap).
No entanto, existe de fato um espectro entre o modelo Phonegap e o totalmente nativo, que abordarei mais adiante.
Web para celular
Restrições técnicas
Vamos primeiro listar algumas restrições técnicas em aplicativos da web para dispositivos móveis que, por si só, podem ser um fator decisivo, dependendo do que você está fazendo:
- Apenas interface do usuário HTML / canvas
- Sem acesso a determinados eventos e serviços do dispositivo (estes são amplamente documentados)
- Não pode ser listado nas lojas de aplicativos (afetando a capacidade de descoberta)
- Pode ficar em tela cheia e ter um ícone de tela inicial no iOS, no entanto, essa é uma experiência incomum e desconhecida para a maioria dos usuários
Se você pode viver com tudo o que foi dito acima, continue lendo para saber mais sobre os desafios dos aplicativos da web em estilo nativo de página única. No entanto, esta seção não estaria completa sem referência ao aplicativo FT.
Financial Times
O aplicativo da web FT é um exemplo famoso desse estilo de aplicativo. Aqui está um recurso interessante do jornal britânico Guardian sobre isso.
É certamente um feito notável de engenharia. Observe que, no momento, ele ainda está disponível apenas no iOS - isso me diz que eles estão descobrindo que resolver os desafios do desenvolvimento avançado entre navegadores é realmente muito difícil.
Aplicativos da web em estilo nativo de página única
Esta seção se aplica aos aplicativos da Web para celular e do estilo Phonegap.
A aparência no estilo nativo de um aplicativo Web geralmente é obtida com uma estrutura como o Sencha Touch, que fornece um conjunto de componentes da interface do usuário para você usar.
Tais estruturas são boas para interfaces de usuário muito simples. No entanto, eles não têm flexibilidade. Você não poderá implementar nenhum design de aplicativo nativo usando o Sencha, precisará adaptar seu design ao que a estrutura pode acomodar.
A principal maneira pela qual essas estruturas sofrem é tentar emular as complexidades da interface do usuário da plataforma. Esse belo efeito de salto que você obtém quando rola para o final de uma lista no iPhone? Sua estrutura precisa emular isso em Javascript. É impossível recriá-lo completamente, será mais propenso a desacelerar e seus usuários ficarão presos no "vale misterioso" de um aplicativo que parece meio nativo, mas claramente não é, e não é técnico o usuário não poderá identificar exatamente o motivo.
O mito "HTML5 / Javascript é fácil"
A fragmentação de dispositivos nos navegadores da Web é abundante e, quando você ultrapassa o HTML e CSS mais básico, percebe que as coisas não funcionam como esperado. Você pode gastar mais tempo resolvendo problemas complicados da interface do usuário do que teria economizado fazendo isso duas vezes nativamente. Se você for nativo, observe que as visualizações da web do aplicativo nativo não são iguais aos navegadores de dispositivos e têm seus próprios problemas de fragmentação.
E, à medida que seu aplicativo se torna funcionalmente mais complexo, você descobre que precisa de mais do que habilidades básicas de jquery para manter seu Javascript limpo e sustentável.
Dito isso, é perfeitamente possível criar aplicativos simples e funcionais rapidamente com essa abordagem. Mas é bastante óbvio quando um aplicativo está fazendo isso.
Mais adiante no espectro
Portanto, queremos um UX melhor do que os aplicativos do estilo Phonegap podem oferecer, sem escrever absolutamente tudo do zero várias vezes. O que podemos fazer?
Compartilhar código não UI
Há uma variedade de técnicas disponíveis para compartilhar a lógica de negócios em várias plataformas nativas. O Google lançou o J2ObjC, que converte Java em Objective-C. Com fatoração cuidadosa do código, uma biblioteca Java pode ser usada no Android e iOS.
Bibliotecas como Calatrava e Kirin permitem que bases de código escritas em Javascript (e, portanto, qualquer coisa que possa ser compilada em Javascript) sejam manipuladas a partir do código nativo. Isenção de responsabilidade: trabalho para as Plataformas Futuras que criaram Kirin; tivemos grande sucesso usando-o no iOS com Javascript gerado a partir de Java com GWT, com o código Java também sendo executado nativamente no Android.
Use visualizações da web ... quando apropriado
As visualizações da Web em tela cheia têm muito trabalho a fazer para imitar as transições da tela e os efeitos de rejeição. Mas uma visualização na web dentro do aplicativo nativo chrome pode ser indistinguível de nativo.
Existem métodos padrão e bem documentados para aplicativos nativos e visualizações da web se comunicarem.
Listas e tabelas podem funcionar particularmente bem quando feitas dessa maneira, no entanto, a entrada de texto é um exemplo de algo melhor manipulado nativamente (para controle total sobre o teclado).
Em suma
A abordagem certa para você depende da complexidade do seu aplicativo e de qual nível de polimento da interface do usuário você ficará satisfeito.
Meu lema: use visualizações da Web sempre que possível, mas verifique se os usuários não sabem .