O Mestre do Background : Shiny — Parte 1
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
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 :
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 :
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!