Tutorial: Todo o processo para desenvolver uma plataforma
Durante o último ano construí uma plataforma online, que tem como objetivo simplificar a encomenda de refeições em Lisboa.
Neste artigo partilharei a experiência que adquiri ao desenvolver esta plataforma, os erros que cometi e abordarei as principais tecnologias que utilizei.
Como referi, desenvolvi uma plataforma online. Esta plataforma designa-se Magnar e é uma app mobile em que o utilizador pode encontrar e encomendar almoços de restaurantes locais. Existe também uma app em que os restaurantes gerem vendas e pedidos de refeições.
De seguida podem encontrar todo o processo por detrás do desenvolvimento e criação desta plataforma, todas as tecnologias que utilizei e alguns prós e contras.
Arquitetura
A solução de software utilizada segue uma arquitetura clássica cliente/servidor:
- Servidor: responsável pela disponibilização e armazenamento dos dados e comunicação com serviços externos:
- Pagamentos
- Analytics
- Push notifications
- Clientes: aplicações mobile.
Nos próximos capítulos abordarei cada um dos componentes que integra a plataforma.
Apps Mobile
O desenvolvimento mobile pode seguir três abordagens principais:
- Nativo: utilizando os IDE (Xcode no caso de iOS e Android Studio ou Eclipse no caso de Android) e linguagens nativas;
- Cross-platform híbrido: com tecnologias web (usando Cordova, Phonegap, Ionic, etc). As apps são alojadas dentro de uma WebView de uma aplicação nativa;
- Cross-platform nativo: desenvolvimento de apps que são convertidas para múltiplos sistemas (iOS, Android, Windows Mobile) de forma nativa (usando o Xamarin).
Sou quase sempre contra apps híbridas porque:
- Não conseguem oferecer uma experiência nativa devido às limitações de viverem dentro de uma WebView
- Nos casos em que fazem sentido, provavelmente um bom website mobile friendly seria o suficiente
Tecnologias de cross-platform nativo, como por exemplo o Xamarin, por outro lado, acabam por oferecer uma experiência nativa aos utilizadores e benefícios óbvios na programação.
A experiência que tenho em desenvolvimento mobile nativo (Swift e Kotlin) levou-me a optar por esse caminho neste projeto. Hoje teria optado por Xamarin: o tempo de desenvolvimento poderia ser semelhante, mas ganharia quando começasse a adicionar novas funcionalidades.
O fastlane é uma ferramenta de Continuous Integration que permite automatizar tarefas como o lançamento de versões, geração de screenshots, manutenção de provisioning profiles, entre outras. É comparável ao Jenkins e ao Bamboo.
Apesar de ter sido desenvolvida para iOS, já conta com algumas ferramentas para Android.
Esta tecnologia traz benefícios para qualquer projeto, tornando-se mais necessária quanto mais frequentes forem as publicações de novas versões.
Para lidar com traduções usei o Twine, que permite ter um ficheiro de strings (master) e a partir dele exportar para vários formatos: iOS, Android, gettext e jQuery. Os ficheiros são gerados a partir da linha de comandos. É portanto imprescindível em projetos que precisam de suportar mais que uma língua.
Backend
Na altura em que iniciei o projeto, o Parse era a plataforma líder de BaaS (backend as a service), muito útil para programadores sem experiência em backend. Entretanto o Facebook, que o comprou em 2013, decidiu fechá-lo no início de 2016, disponibilizando o Parse-Server, o mesmo que o Parse mas hospedado pelo programador. Neste momento, o Firebase, mantido pela Google, é um substituto à altura.
Com o fim do Parse à vista, decidi aproveitar para criar um backend à medida daquilo que preciso.
Web application framework
O Spring Boot é a web application framework web ideal para construir microserviços de forma rápida. Integra anos de experiência com o Spring, adota a técnica 'convention over configuration' e é facilmente personalizado através de bibliotecas-plugin. É equivalente ao Ruby on Rails ou ao Laravel, mas para Java (embora também possa ser usado com Kotlin ou Groovy).
Sendo uma web application framework, apoia imenso em tarefas comuns, nomeadamente, na construção de APIs REST ou na criação de repositórios de dados.
Autenticação de utilizadores
Decidi manter a autenticação de utilizadores do Parse pelos seguintes motivos:
- Disponibiliza as funcionalidades de registo, login e recuperar password;
- Trata da segurança dos dados dos utilizadores;
- Gere as sessões dos utilizadores (mecanismo baseado em tokens).
Pagamentos
Qualquer sistema que aceite, processe, guarde ou transmita dados de cartão de crédito tem de seguir um conjunto de medidas de segurança criadas pela Payment Card Industry Data Security Standard (PCI DSS). Seguir estas medidas é extremamente complicado e por isso surgem serviços como a PayPal e o Stripe, que abstraem esta complexidade permitindo a qualquer empresa processar pagamentos de forma segura.
Neste momento existem dois líderes no mercado dos pagamentos mobile:
- Braintree: empresa Americana fundada em 2007 e comprada pelo Paypal em 2013. Tem SDKs para várias plataformas que permitem uma fácil integração de pagamentos com cartão de crédito.
- Stripe: também Americana, fundada em 2010. Destacam-se por estarem constantemente a criar novas funcionalidades e a permitir novos métodos de pagamento. Recentemente incluíram SEPA Direct Debit.
Existe outra opção, vinda de França, que vale a pena conhecer também: Lemonway.
Mercado
Um mercado permite ter clientes e vendedores na plataforma, sendo que os pagamentos são feitos ao dono do mercado e redirecionados por ele para a conta dos vendedores.
Esta funcionalidade é extremamente importante neste projeto porque nos permite:
- Não ter de fazer transferências manuais para os restaurantes. Não é relevante quando há apenas alguns restaurantes associados à plataforma, mas compensará quando houverem centenas
- Obter uma taxa por cada transação efetuada
O mercado do Braintree ainda só está disponível no EUA e foi essa a principal razão que me levou a optar pelo Stripe.
Integração
A integração consiste em duas partes:
- Frontend: em que se recolhem os dados do cartão de crédito. O SDK trata de enviar os dados do cartão de crédito para o Stripe de forma segura e de retornar um token que é enviado para o backend. Desta forma, o programador nunca tem de lidar com informação sensível.
- Backend: recebe o token e o valor a debitar, e utiliza o SDK do Stripe para processar o pagamento.
Push Notifications
Push notifications são mensagens que os utilizadores recebem nos smartphones, normalmente enviadas pelo backend. As notificações que recebemos de emails, de conversas de whatsapp e ofertas de marketing são alguns exemplos de push notifications.
O OneSignal destaca-se dos outros serviços pelos seguintes aspetos:
- Integração rápida e boa documentação
- É gratuito
- Suporta bastantes plataformas (mobile, browser, apps Chrome, etc.) e oferece vários SDKs (tanto nativos como híbridos).
- O painel de controlo é intuitivo e permite personalizar bastante as notificações. Importante numa altura em que a apresentação push notifications de Android e iOS estão cada vez mais diferentes e complexas.
- Oferece boas ferramentas de marketing, como por exemplo: A/B testing, segment targeting, drip marketing e conversion tracking.
Não oferecem SDK para o backend, mas facilmente se criam bibliotecas a partir da API REST que disponibilizam.
Analytics
A utilização de analytics em negócios online é fundamental a vários níveis. No caso da Magnar há quatro métricas que me interessam bastante:
- Daily active users: se este valor for demasiado baixo em comparação com o número total de registos, é porque os clientes não estão a voltar. É necessário perceber a razão e iterar o produto.
- Daily new users: média de utilizadores que se registam diariamente. Este número aumentará com o marketing e, se o produto for bom, com o ‘passa-palavra’.
- Crash-free users: percentagem de utilizadores que não experienciam crashes. Mais importante em mobile que na web. Este indicador nunca deverá ser inferior a 95%.
- Pagamentos iniciados e pagamentos finalizados: É importante comparar estes dados diários com o número de daily active users. Se a diferença entre pagamentos iniciados e finalizados for grande, provavelmente será necessário melhorar a usabilidade da app.
O Fabric, desenvolvido pelo Twitter e comprado recentemente pela Google, inclui tudo isto através de dois serviços: Answers (analytics) e Crashlytics (relatórios de erros).
Existem outros serviços de analytics mobile bastante fortes; alguns já oferecem heatmap (bastante comum na web). A escolha do serviço deve ser baseada principalmente nas métricas que se pretendem obter.
Conclusão
Existem vários aspetos a ter em conta durante a escolha de tecnologias, entre eles:
- Experiência prévia: na maioria das vezes escolher uma tecnologia familiar será a opção correcta. "Go with what you know".
- Requisitos específicos ao projeto: para evitar transferências bancárias manuais, escolhi o Stripe como plataforma de pagamentos por oferecer um mercado online na Europa.
- Orçamento: no caso das push notifications, por exemplo, optei por um serviço gratuito.
Depois da publicação, é necessário continuar a iterar e a melhorar o produto regularmente:
- Continuous delivery tem como objectivo publicar software frequentemente e de forma rápida. Ferramentas como o fastlane e o jenkins ajudam a automatizar estes processos.
- As ferramentas de analytics permitem perceber a forma como os utilizadores estão a usar o software e a detetar problemas de usabilidade. “What gets measured, gets improved”.
Deixo também alguma leitura complementar:
- Stripe vs Braintree
- Como escolher uma biblioteca/framework?
- What is the difference between Spring Boot and the Spring framework?
- The Good and The Bad of Xamarin Mobile Development (também aborda um pouco de desenvolvimento híbrido)
Este artigo tem mais de um ano
Grande Artigo. Parabéns e mais artigos como este sobre abordagens de arquitectura de plataformas, ou mais a fundo sobre boas práticas de construção de plataformas são bem-vindos.
Obrigado ao Diogo Mateus
Excelente artigo os meus parabéns. Isto sim merece a pena.
Estes artigos são sempre bem vindos
Muitos parabéns. Excelente conteúdo.
Bom artigo. Parabéns
Muitos Parabéns!
Excelente Artigo de partilha de experiencia e conhecimento.
Óptimo Artigo.
Continua o bom trabalho 🙂
Parabéns ao criador desta plataforma. Bom trabalho
Bom Artigo esse do onesignal da jeito!
Precisamos de mais artigos destes.
Nao sou cliente, mas vou dizer: MUITO….MUITO…..MUITO, BOM , a ATITUDE.
O ARTIGO, parece-me BOM, mas nao tenho conhecimentos na matéria para AVALIAR com JUSTIÇA, mas a ATITUDE de quem o escreveu é TOP.
Eu nao conheço a Srºa, nunca a comentei, mas apenas COMPARO , com um artigo recente sobre a APPLE, que nao quer que OUTROS mexam nos seus produtos, questões de segurança…….tretas.
Esta Sra, deve ter perdido horas a estudar, executar, ERRAR, e no fim…DÀ tudo de BORLA, ao pessoal.
Sim Senhora, podem nao gostar, de mim, mas eu gosto de apreciar quem merece.
Sra. ….??? Bem, se leu o artigo, com a mesma atenção, que detectou O Autor…deve ter sido mesmo uma confusão.
O autor do artigo foi o Sr. Diogo Mateus. A Sra. , Marisa limitou-se a publicar na plataforma.
O seu, a seu dono!
Ainda assim, mesmo com uma “partitura” 5*, é necessário ter unhas para a executar e toca-la na perfeição, o que não está ao alcance de todos. Parabéns ao autor.
Excelente artigo. Continuação do bom trabalho ☺☺
Muito bom artigo. Parabéns.
Sugestão: Podiam dizer qual a ferramenta AGILE (tipo JIRA, etc) que usaram (se é que usaram alguma) neste projeto?
Podem fazer um ranking das ferramentas AGILE mais usadas fazendo a distinção entre as pagas e as open-source.
Boas Ricardo!
Neste projecto, como fui responsável por quase todo o desenvolvimento da plataforma, acabei por não utilizar nenhuma, mas se tivesse utilizado teria optado pelo JIRA.
Like
São artigos destes que trazem os leitores diariamente ao pplware. Parabéns.
Obrigada 😉
Excelente trabalho.
Excelente artigo. Parabéns e boa continuação.
Excelente artigo e uma boa fonte de inspiração. Obrigado ao Diogo Mateus pelo trabalho e à Marisa por ter feito chegar a nós este magnifico artigo. Que venham muitos mais!
Obrigada 😉
Excelente artigo! Fiquei a conhecer serviços que desconhecia e que me irão ajudar em futuros desenvolvimentos.
Parabens!
Muito bom, por acaso não existe repositório publico para se ter ideia da integração e etc?
Não existe repositório público, mas tenciono publicar algumas bibliotecas que tive de desenvolver (para o OneSignal, por exemplo). Entretanto, disponho-me a esclarecer quaisquer dúvidas que tenhas.
Parabéns pelo artigo.!É pena serem muito poucos …
@Diogo Mateus
Sobre o uso de ferramentas cross plataform nativo nunca usei o Xamarin, mas costumo usar o Qt. Tens alguma experiência com Qt, queres partilhar um comparativo sobre os dois ?
Olá João!
Não sou a melhor pessoa para partilhar experiência nesta área porque não a tenho. Mas pelas pesquisas que fiz fiquei com a ideia de que o Qt permite partilhar mais código entre as apps que o Xamarin, mas oferece uma experiência menos nativa. Corrige-me se estiver errado!
Parabéns! Grande projeto/ideia!
Bom artigo. É evidente que tem muito trabalho e investigação por trás do desenvolvimento de uma app séria que pretende servir um propósito e uma clientela, embora nos estejam sempre a impingir a ideia de que é fácil fazer uma app da noite para o dia e ficar rico à custa disso (normalmente escrevem livros sobre como fazê lo e não enriquecem fazendo-o). Para os sonhadores: atentem a este artigo. Hard work right here. Hope it pays off.
Excelente!
Excelente artigo e os meus parabéns ao Diogo Mateus! Atitudes como esta são TOP! E, claro, um muito obrigado à Marisa por disponibilizar a coisa neste canal! Vamos seguir e aprender com ele, claro, e participar nas boas discussões sempre! 🙂
eheh é isso que se quer 🙂
Obrigada
Parabéns ao Diogo pelo artigo e à Marisa pela divulgação 🙂 qualidade de topo!
Boa tarde,
eu precisava de desenvolver (ou que alguém desenvolvesse) uma pequena solução para o meu local de trabalho. Pedidos de componentes a nivel interno. (pedido ao armazem) a funcionar entre 2 tablets o mais intuitivo possível.
Alguém me ajuda?
Obrigado
Olá MJC,
Podes entrar em contacto comigo por LinkedIn. Se não conseguir ajudar, posso tentar redirecionar-te para alguém que consiga.
Óptimo artigo! Parabéns 🙂
Boa tarde Diogo,
Antes de mais parabéns pela excelente aplicação e pelo artigo.
Confesso que estou a entrar na área de desenvolvimento mobile e este artigo consolidou os conhecimentos que adquiri ao longo de algumas formações online que tive.
Porém, coloco uma questão (que poderá ser muito básica): Relativamente ao backend, vi que escolheste heruku, consegues explicar-me a diferença entre usar ou não uma solução BaaS, nomeadamente a heruku, e para que serve na realidade? Quais as vantagens?
Isto porque estou a fazer o planeamento da arquitetura para uma aplicação mobile híbrida e queria tentar perceber se devo usar uma solução dessas e que vantagem me traz.
Espero ter sido claro na questão 🙂
Mais uma vez parabéns pelo artigo.
Boas CF!
O heroku não é um BaaS, é um cloud platform-as-a-service. Basicamente permite-te alojar aplicações web. Utilizei-o para alojar a web app spring boot.
Um BaaS (backend-as-service) permite-te não ter de desenvolver uma solução backend. Ficas com base de dados, API’s para leres e escreveres na tua base dados, alguns oferecem push notifications, autenticação de utilizadores, etc. Neste artigo falei sobre o Parse (que já fechou), mas tens muitas outras opções como por exemplo o Firebase, que já usei e aconselho.
Como decidir entre desenvolver um backend ou usar um BaaS? BaaS é útil quando não precisas de processar muito os teus dados, isto é, quando apenas queres enviar dados para a base de dados e depois ler. A partir do momento em que precisas de algo mais complexo, como eu no desenvolvimento dos pagamentos, tens de ter um backend à tua medida.
Se não for um projecto pequeno e tiveres tempo e conhecimentos, aconselho-te a desenvolver o teu próprio backend. O principal benefício de ter um BaaS prende-se com evitar o esforço de desenvolver e manter um backend.
Espero ter ajudado, qualquer outra questão, não hesites!
Muito obrigado pela excelente explicação.
Aproveito assim para colocar mais uma questão (que poderá ser muito básica), mas no meu caso em pretendia fazer o desenvolvimento de uma aplicação hibrida com recurso às framework ionic e cordova. Nesta caso, o que recomendarias como backend?
Para este caso especifico pretendia ter base de dados, notificações e provavelmente autenticação de utilizadores.
Peço desculpa por colocar estas questões.
Uma vez mais muito obrigado.
Muito bom 🙂
Venham mais 🙂
Bem haja. Muito bom, parabéns.
Bom artigo! Mandem vir mais destes <3
a ingenico.com é igualmente reconhecida como merchant account
Que tecnologias vou usar se pretendo criar um “AplicativoWeb em que:
– O usuário faz o cadastro.
– O Usuário faz uma compra dos créditos, através de um depósito na minha conta…
– Através dessa conta, o usuário poderá comprar recargas electrónicas (dados e voz) das diferentes operadoras existentes no mercado…