Olá, neste post irei demonstrar como você pode implementar Push Notification em sua aplicação Xamarin.Forms utilizando o OneSignal.
ADICIONANDO O NUGET PACKAGE
Clique com o botão direito em cima de sua Solution e selecione “Manage NuGet Packages for Solution…”
Digite “Com.OneSignal” e selecione o plugin como demonstrado na imagem a seguir.
Selecione todos os projetos e clique no botão “Install”.
Firebase
Entre com uma conta da Google no Firebase e adicione um novo projeto.
Informe um nome para o seu projeto e o país, o Project ID será gerado automaticamente.
Em seguida selecione “Adicionar o Firebase ao seu aplicativo android”.
Informe o nome do pacote de sua aplicação android. Se o seu projeto android ainda não tem um nome do pacote, adicione.
O passo seguinte é ir em “Configurações do projeto”.
Em configurações selecione “Cloud Messaging”, guarde o Token da “Chave do servidor” e o Código do remetente, pois iremos utiliza-los mais pra frente.
OneSignal
Crie uma conta no site do OneSignal, não se preocupe, todo o serviço de Push disponibilizado é gratuito.
Adicione um novo projeto.
Informe um nome para o seu projeto no OneSignal.
Selecione “Google Android (GCM)”.
No campo “Google Server API Key” informe o token da Chave do Servidor adquirido no Firebase e no campo “Google Project Number” adicione o Código do remetente.
Ignore os passos seguintes clicando no “x” que encontra-se no canto superior direito.
No menu lateral selecione “App Settings”.
No canto superior direito selecione “Keys & IDs”.
Guarde as informações do “OneSignal App ID” e “REST API Key”, pois iremos utiliza-los mais pra frente.
Portable
Na classe App, dentro do método de inicialização, inicialize o OneSignal e no método “OnStart” chame o “RegisterForPushNotifications”, ambos demonstrado a seguir:
Substitua o texto “Insert OneSignal App ID here” pelo APP ID que se encontra no OneSignal.
App.xaml.cs
Android
No arquivo MainActivity.cs e dentro do método “OnCreate” inicialize o OneSignal.
MainActivity.cs
No arquivo AndroidManifest.xml adicione as Tags “permission”, “uses-permission” e “application” como demonstrado a seguir:
Substitua o texto “{InsertPackageNameHere}” pelo Package Name da sua aplicação andorid.
AndroidManifest.xml
iOS
No AppDelegate.cs dentro do método “FinishedLaunching” inicialize o OneSignal.
AppDelegate.cs
iOS Push Certificate
Para a plataforma iOS é necessário gerar um certificado com a sua conta de desenvolvedor da Apple. Veja como fazer isso aqui: Generate an iOS Push Certificate
Enviar uma mensagem
No Dashboard de sua aplicação no OneSignal, selecione “New push notification…”
Selecione para quem tanto deseja enviar a mensagem.
Defina o titulo e o conteúdo da mensagem.
Selecione “Background data” se desejar que a mensagem chegue para os usuários que estejam com o app fechado.
Em segue selecione next.
Enviar uma mensagem por outra aplicação
Caso você tenha uma aplicação para disparar o push notification, você pode montar um json com as configurações da mensagem, como o exemplo a seguir:
Para saber outras formas de sua aplicação disparar o push notification, clique aqui.
Resultado
Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.
Olá Juliano, parabéns pelo artigo.
Sabe se o teste de push funciona pelo emulador do Android?
Obrigado.
CurtirCurtir
Olá Marcio, obrigado.
Não, neste caso precisa ser um dispositivo físico mesmo.
Abraço
CurtirCurtir
Olá Juliano, apenas para deixar registrado que consegui usar o push no emulador (testei apenas no Genymotion). Para funcionar, é necessário que tenha instalado a última versão do Google Play na VM do Android.
CurtirCurtir
Ah legal Marcio 🙂
CurtirCurtir
Ok! Meu device já aparece no menu “All users” como ativo (selecionei a opção background data)
No Delivery Statistics aparece:
Total Messages 1
Pending 1
Apesar do app estar aberto ainda não recebi, saberia dizer se existe alguma configuração ou procedimento extra que dispare de fato o Push ou foi demorado para você também?
Obrigado.
CurtirCurtir
Não sei se o problema foi algum delay de longos minutos, mas agora funcionou. Obrigado pela atenção.
CurtirCurtir
Olá Marcio, não é para demorar muito não. Verifica se o device tinha conexão com a internet. Talvez possa ser isso.
CurtirCurtir
Olá. Fiz um teste e funcionou…pesquisando mais a fundo, vi a opção de adicionar Location Point ao One Signal. Mas utilizando o comando OneSignal.Current.PromptLocation() nada acontece no painel do One SIgnal. Diferente de quando uso SendTag, aí posso criar um atributo de localização, por exemplo. Mas gostaria de usar o location point dele…se souber como, agradeço.
CurtirCurtir
Olá Marcelo,
Da uma olhada nesse link, ele explica certinho como você pode utilizar o PromptLocation.
https://documentation.onesignal.com/v3.0/docs/location-triggered-event
Espero ter ajudado, abraço.
CurtirCurtir
Juliano, Boa Noite Amigo!
Primeiramente gostaria de agradecer por este mais este POST!
Após atualizar meu Projeto compartilhado para trabalhar com .NET Standard 2.0, o OneSignal parou de funcionar. Em pesquisas na Internet ainda não encontrei a solução. Saberia informar se existe alguma configuração adicional para que o OneSignal funcione com o .NET Standard 2.0 ?
Aguardo por seu contato ok!
Abs.
CurtirCurtir
Olá Wallace,
Acabei de verificar que a biblioteca não possui atualizações para o .NET Standard 2.0 ainda.
Porem, eu criei um projeto .NET Standard 2.0 e testei a biblioteca e ela funcionou normalmente. Apenas apresentou uma mensagem de alerta de compatibilidade, mas funcionou.
De qualquer forma irei entrar em contato com o pessoal para saber sobre a atualização.
Experimente instalar novamente a biblioteca ou fazer o teste em um projeto novo separado para ver se não afetou algum arquivo no momento da sua atualização.
Qualquer dúvida estou a disposição.
CurtirCurtir
Hi, did you had a chance to contact OneSignal team? any updates from them? their xamarin sdk needs to update to support .Net Standard as well as Android API 26. Currently its not working on Oreo. Its sad not being able to use such great service. seems they are not maintaining xamarin sdk
CurtirCurtir
Hi, I don’t have answers.
If not working and you need an immediate solution, I recommend downloading the project in github and using this method to perform the conversion.
https://blogs.msdn.microsoft.com/premier_developer/2017/10/27/converting-pcl-portable-class-libraries-libraries-to-net-standard-class-libraries
I hope help
CurtirCurtir
Olá ajudou bastante o Tutorial. Como eu faço para recuperar o IDUser? preciso guarda-lo para enviar push individuais….. como faço???
CurtirCurtir
Olá Jader, fico feliz em saber que te ajudou.
Utilize o exemplo a seguir, qualquer dúvida entre em contato comigo pela sessão contatos que eu te ajudo.
Abraços.
CurtirCurtir
Ola Juliano não sei se o primeiro comentário foi registrado mas se não vai esse, parabéns pelo post muito bom, só que no meu caso deu um erro que não consigo resolver:error: package com.google.android.gms.tasks does not exist
Meu projeto é Xamarin.Forms .NET Standard 2.0
Sabe me dizer se existe alguma solução ??
Abraço
CurtirCurtir
Olá Rafael, obrigado.
Experimente dar um downgrade nos pacotes do GooglePlayServices. Pois o OneSignal normalmente não funciona perfeitamente com as versões mais recentes.
Neste exemplo com a essa versão do OneSignal, experimente utilizar a versão 60.1142.1 dos pacotes do GooglePlayServices.
Espero ter ajudado.
Abraço
CurtirCurtir
Boa tarde Juliano. Estou no 2º app usando push baseado em seu tutorial. Obrigado…
Como fazer pra quando clicar no push, abrir alguma pagina específica do app ou escolher o que fazer? Abraço
CurtirCurtir
Perguntei mas consegui descobrir…hehehe
Usando HandleNotificationOpened … agora estou tentando abrir diferentes paginas de acordo com os Pushs.
CurtirCurtir
Olá Marcelo, que bom que conseguiu. 😀
CurtirCurtir
Olá Marcelo,
Fico feliz em saber que o post está te ajudando…
De uma olhada nesse link, acho que ele vai te ajudar: https://documentation.onesignal.com/docs/links
CurtirCurtir
Opa Juliano tudo bom? Então estou tentando montar um push no onesignal que ao clicar direcionasse a uma page especifica no meu aplicativo.. pode me ajudar ?
CurtirCurtir
Olá Michel,
De uma olhada nesse link, acho que ele vai te ajudar: https://documentation.onesignal.com/docs/links
CurtirCurtir
Boa noite meu caro!!
Antes de qualquer coisa… Obrigado pelo artigo!
Vamos lá:
Fiz o passo-a-passo e no OnSignal identifica os dispositivos com a aplicação corretamente. Assim, acredito que eu tenha feito tudo certo.
Depois de algumas tentativas de envio pelo site e uma hora depois… nenhuma das 4 mensagens foram recebidas.
As perguntas que não querem calar (risos): Onde eu posso ter feito a bagunça sendo que o OnSignal reconhece os dispositivos? Como debugar? Pode me ajudar?
CurtirCurtir
Ps: as mensagens aparecem com status de “Delivered”… mas juro que não apareceu nada nos celulares. rsrs…
CurtirCurtir
Opa!
Bem, funcionou. Agora preciso enviar pelo app. rsrs…
CurtirCurtir
Olá Fábio…. Que bom que funcionou. Abraço
CurtirCurtir