O Mestre do Background : Shiny — Parte 1

Thiago Bertuzzi
Nov 28 · 5 min read

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

Written by

Microsoft MVP,Gamer, Desenvolvedor e apaixonado por tecnologia!

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade