Desenvolvimento

26 set, 2016

Dados no mobile – mais fácil que roubar doce de criança

Publicidade

Na construção de aplicativos mobile, a necessidade de tratamento de dados, ou ainda o famoso CRUD (create, read, update e delete), é extremamente comum. Nas principais plataformas mobile, as possibilidades oferecidas se assemelham bastante. Basicamente temos estas opções:

  • Mídia interna: as plataformas oferecem um sistema de arquivo específico para o aplicativo.
  • Mídia externa: basicamente podemos resumir esta opção ao SDCard.
  • Acesso à rede de dados: enviar os dados para um web service e este, por sua vez, persistir as informações também pode ser considerado uma alternativa para aplicativos mobile;
  • Banco de dados relacional: todas as principais plataformas fornecem uma implementação do SQLite nativa;
  • Um par chave-valor: as principais plataformas permitem que um par de dados, composto por um valor associado a uma chave, seja persistido mesmo quando a aplicação seja fechada pelo usuário. Para os programadores Java, uma analogia pode ser feita com a classe Imagine essa classe estática dentro do ambiente do sistema operacional.

Uma das opções mais utilizadas é o banco de dados relacional com o SQLite. Nas duas principais plataformas, Android e iOS, esse trabalho não é muito amigável. Para os desenvolvedores iniciantes, chega a ser um ponto de cuidado no desenvolvimento de novas aplicações.

Quem já precisou implementar uma classe que estende de SQLiteOpenHelpder e trabalhar com os métodos de CRUD da classe SQliteDatabase sabe do que estou falando. E para os desenvolvedores Apple, compartilho com vocês o processo penoso, pelo menos para os viajantes inexperientes, de configurar o(s) arquivo(s) xcdatamodel, os modelos de dados, os coordenadores de persistência e o contexto.

Porém, trago-lhes boas novas! A primeira delas se chama Realm. Essa biblioteca promete (e cumpre) deixar o trabalho com dados mais simples e, o mais importante, mais rápido que qualquer outra biblioteca ORM (Object-Relational Mapping). Sobre esta última promessa, posso afirmar que nos testes que fiz com o SQLite puro do Android SDK, realmente foi mais rápido. Porém, não posso concluir categoricamente que eles cumprem esse requisito.

Para o leitor ter noção da beleza do código gerado com a Realm, veja este exemplo retirado da própria página oficial (Android):

public class Dog extends RealmObject { 
public String name; 
public int age; 
} 

Dog dog = new Dog(); 
dog.name = "Rex"; 
dog.age = 1; 

Realm realm = Realm.getDefaultInstance(); 
realm.beginTransaction(); 
realm.copyToRealm(dog);
realm.commitTransaction(); 

RealmResults<Dog> pups = realm.where(Dog.class) .lessThan("age", 2) .findAll();

O seu código ficará condizente com o restante do projeto, com uma roupagem mais adequada ao mundo orientado a objetos. Além disso, perceba que o uso de cláusulas de pesquisa de dados também fica mais compreensível e poderoso.

Bem, mas as novidades não param por aí. Vamos passar para o próximo nível de uma aplicação mobile de nível médio para cima. Com muita frequência, temos um suporte de um sistema back end – seja como fornecedor de dados ou como um mantenedor de informações geradas pelo mobile. Independentemente da razão, esse caminho de mão dupla entre cliente e servidor deve ser construído.

E, para piorar o cenário, temos a questão de notificações. Por exemplo: imagine uma aplicação para Internet das Coisas que alerta o usuário caso o nível de gás na cozinha ultrapasse um dado valor. Quando o servidor recebe um valor alarmante, o aplicativo móvel deve ser avisado e, consequentemente, alertar o usuário.

A boa nova que trago nesse caso se chama Firebase. Uma das principais estrelas do último Google IO, permite File Storage e Google Cloud Messaging Push Notification, dentre outras coisas.

No site da ferramenta, é possível criar uma base de dados NOSql com JSON. E na aplicação (Android, iOS, Rect, dentre outros), basta colocar um listener para mudança de dados. Simples assim. A aplicação recebe listagem de dados. Tem possibilidade de filtros. E o mais importante: qualquer mudança na base de dados dispara automaticamente um push para seu listener, que pode atualizar a interface gráfica quase que em tempo real.

Para deixar mais claro, segue um exemplo da própria página oficial do Firebase para uso no iPhone com Swift:

	// Get a reference to our posts
	var ref = Firebase(url:"https://docs-examples.firebaseio.com/web/saving-data/fireblog/posts")
	
	// Get the data on a post that has changed
	ref.observeEventType(.ChildChanged, withBlock: { snapshot in
	   let title = snapshot.value.objectForKey("title") as? String
	   println("The updated post title is \(title)")
	})

Existe uma diversidade de frameworks, bibliotecas e APIs (Application Programming Interface) que trabalham com dados. Porém, confesso aos amigos leitores que a Realm e o Firebase impressionaram de verdade este que vos fala. Com esse par de ferramentas, a parte de dados da sua aplicação, incluindo a parte de servidor e push notifications, pode ser feita, na sua totalidade, em algumas horas.

***

Artigo publicado originalmente na Revista iMasters #19