O Mestre do Background : Shiny — Parte 1

Thiago Bertuzzi
5 min readNov 28, 2019

Fala galera,

tudo beleza?

Demorei mas finalmente vou falar desse pacote incrivel , que merece ate uma foto de capa especial para ele… O Incrivel Shiny!

Mas antes de tudo, o que é Shiny?

BackGround -> AME-O OU ODEIO-O. Creio que isso define bem o problema de algumas pessoas com BackGround hahahaha.

Rodar tarefas em "segundo plano", pode ser um problema. Principalmente quando trabalhamos com injeção de dependencia, métodos assíncronos, e tarefas que queremos executar depois de outras tarefas (confuso né? Igual thread de background).

Existem diversos plugins ou formas que tentam simplificar a utilização de tarefas em background. Eu mesmo fiz um artigo ensinando a utilizar um plugin para isso : Meu plugin minha vida — BackGround Services .

Porem cada plugin tem uma implementação diferente, alguns resolvem background services, outro bluetooth e etc.. Mas nenhum deles tem a capacidade de reunir a maioria das funcionalidades que precisamos, organiza-las com maestria e ainda por cima faze-las funcionar de forma perfeita como uma orquestra em background. Mas onde todos eles falham é onde o Shiny brilha ( AEEEEEEEEE QUE TROCADILHO DO ….) !

O Shiny (criado por Allan ritchie) simplifica a utilização de injeção de dependencia, BluetoothLE, GPS, Geofencing, serviços em background… ufa , tudo em um pacote só .. e detalhe de uma forma tão simples para Cross-platform que parece bruxaria 🧙‍♂️.

Uma lista de funcionalidades que o Shiny suporta :

  • A Centralized Hosting Platform
  • Environment (App & Device Information)
  • Logging
  • Connectivity
  • File System & IO Extensions
  • Power Management
  • Permissions
  • Settings
  • Background Jobs
  • Geofencing
  • GPS (Foreground & Background)
  • Bluetooth LE (GATT Peripheral & Central)
  • Beacons
  • Speech Recognition
  • HTTP File Transfers
  • Sensors
  • Notifications
  • Integração com3rd Party MVVM Frameworks : Prism, ReactiveUI, & MvvmCross

Fonte : https://allancritchie.net/posts/introducingshiny

E ae curtiu ? Então vamos ver como utiliza-lo !

Configurando o Shiny

Vamos ao nuget instalar o nosso pacote Shiny.. isso que eu costumo dizer, porem dessa vez o termo correto é "Pacotes". Sim , o shiny esta separado em diversos pacotes e você precisa instalar aqueles que vai utilizar no seu projeto :

fonte : https://github.com/shinyorg/shiny

MEU DEUS , É BETA? , Sim e dai ? Funciona muito bem :) … E tambem se tiver bugs você pode contribuir reportando ou corrigindo ;)

O Shiny tambem possui alguns plugins de integração, o que facilita a utilização de outros plugins :

fonte : https://github.com/shinyorg/shiny

Tambem Existe a Integração do Shiny com Frameworks MVVM, como o Prism e MVVMCross.. Mas isso fica para outro artigo 👀

Tudo explicado , vou instalar todos os pacotes apenas porque é um projeto de exemplo. Mas volto a lembrar, instale apenas os que precisa… Nunca referencie pacotes que não serão utilizados.

Dica : Se quiser saber mais sobre dicas de perfomance e porque não se referencia pacotes sem utilizar sugiro o artigo : O X do Xamarin Forms — Boas práticas e melhorias de perfomance

Como o Shiny ainda é um pacote pre-release não esqueça de marcar este opção ao baixar, seja no visual studio do Windows ou Mac. Instalando em todos os projetos :

Cada Plugin do Shiny que você instalar, ele vai abrir um Readme.txt , ensinando a configura-lo. Por exemplo o de locations ensinando a configurar as permissoes do GPS :

É um plugin bem documentado , inclusive na instalação, o que facilita cada pacote novo instalado.

Para nosso tutorial, vamos seguir a configuração do Shiny.Core, que seria o pacote padrão para executar todos os plugins.

No projeto compartilhado vamos criar uma classe Startup.cs (O nome pode ser o que você quiser, eu apenas vou utilizar o sugerido pelo Shiny como padrão) como abaixo :

Agora no projeto Android vamos criar um Application, no meu caso ShinyApplication.cs :

Em seguinda na MainActivity.cs, vamos adicionar o Shiny ( Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);) para ter acesso as permissões :

No Projeto iOS, caso queira utilizar os jobs devemos adicionar um override no PerformFetch na classe AppDelegate.cs :

E no Info.Plist Adicionar

<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
</array>

Pronto! As outras configurações serão sempre por cada plugin do Shiny você quiser utilizar ;)

Utilizando o Shiny

Existem diversas funcionalidades no Shiny cada uma requer uma configuração especifica , por exemplo para utilizar o GPS precisamos adicionar a inicialização no configure Services :

Notem que eu adicionei tambem o services.UseMotionActivity();, isto nos ajuda a indentificar o dispositivo em movimento.

Podemos tambem sobrescrever o delegate do gps, para efetuar tratamentos ou realizar funções conforme o GPS muda :

Em seguida devemos adicionar esse delegate na injeção de dependencia :

Claro não esqueça de configurar as permissões para o Gps no iOS e Android.

O Repositorio oficial do Shiny possui um app com os Exemplos completos e você pode ve-los clicando aqui.

Este é apenas um artigo inicial introdutorio do Shiny, logo pretendo fazer outras partes demonstrando a utilização dos serviços e a configuração com o Prism.

Caso queira baixar o código utilizado no Exemplo: Clique aqui.

Quer ver outros artigos sobre Xamarin ? Clique aqui.

Recomendo esse artigo do grande Felipe Baltazar falando de Shiny com Prism : https://medium.com/@felipedasilvabaltazar/xamarin-utilizando-shiny-com-prism-a39bc579a5f6

Espero ter ajudado!

Aquele abraço!

--

--

Thiago Bertuzzi

Microsoft MVP,Gamer, Desenvolvedor e apaixonado por tecnologia!