DEV Community

loading...

Ionic + OneSignal: Utilizando na web e no mobile.

Vitor Freitas
I'm a Full Stack Web Developer. Enthusiast of many things.
・2 min read

Contexto

Estou trabalhando em uma aplicação mobile feita em Ionic, que precisou ser portada também para web. A versão antiga dessa aplicação (web) era feita em Angular 1 e, com o objetivo de melhorar a experiência e reduzir o custo da manutenção, resolvemos utilizar a base de código do nosso app também para web.

O problema

Para notificar no mobile usamos o @ionic-native/onesignal e na web o OneSignalWebSDK. Tudo funcionava bem com um simples ionic serve. Entretanto, após fazer um build com ionic cordova build browser, o OneSignal que era injetado no objeto window não era aquele provido pelo OneSignalWebSDK, e sim o do cordova. Cheguei nessa conclusão após analisar vários console.logs e ver diferenças marcantes entre o output dos logs de desenvolvimento e de produção.

A solução

Para solucionar precisei importar o OneSignalWebSDK programaticamente. Isto é, usando JavaScript ao invés de uma tag <script> no arquivo index.html. Este chunk de código é executado após o cordova carregar todos os seus plugins, ou seja, após a Promise platform.ready() ser resolvida.

O código

app/app.component.ts
app.component.ts

providers/notification/notification.ts
notification.ts

notification.ts

notification.ts

Problem Solved

Resolvi omitir a implementação do OneSignal do cordova pois na documentação contém o necessário para sair usando. Espero que isto resolva o seu problema assim como resolveu o meu. Obrigado!

Discussion (0)