15
respostas

Notificação Push para Dispositivo Android

Olá! Estou seguindo o curso de Ionic e, na última etapa, fiz os passos para receber notificação por push quando o agendamento fosse confirmado. Acontece que não recebo qualquer notificação, nem é possível ver qualquer retorno no web service, como, por exemplo, vemos quando um agendamento falha.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
15 respostas

Boa noite, Rithyelle! Como vai?

Vc seguiu todos os passos dessa atividade obrigatória?

Sim, professor! Criei a conta no OneSignal e no Firebase, usei as chaves do Firebase no OneSignal, usei as chaves no web-service e na app.

Vc está fazendo seus testes no navegador?

appId do oneSignal.startInit é ONESIGNAL APP ID do One Signal, certo?

googleProjectNumber é o Código do Remetente do Firebase, certo?

Não! Estava testando no telefone Android. OneSignal é compatível com todas as versões recentes do Android?

No navegador eu recebo a seguinte mensagem: this.oneSignal.startInit(...).iosSettings is not a function.

No navegador não é pra funcionar mesmo pq essa é uma funcionalidade nativa, então tem que ser testada no celular!

No entanto, como vc está fazendo pra testar no seu celular? Está utilizando o Ionic DevApp pra testar a aplicação ou está fazendo o build nativo?

Estou fazendo build nativo. Segue o código do app.component e do api.js.

let iosConfigs = {
        kOSSettingsKeyAutoPrompt: true,
        kOSSettingsKeyInAppLaunchURL: false
      }

      this.oneSignal
        .startInit('ae1c19f9-7efc-4c15-b803-c06924491549', '730363239832')
        .iosSettings(iosConfigs);

      this.oneSignal.inFocusDisplaying(this.oneSignal.OSInFocusDisplayOption.Notification);

      this.oneSignal
        .handleNotificationReceived()
        .subscribe((notificacao: OSNotification) => {
          let dadosAdicionais = notificacao.payload.additionalData;

          let agendamentoID = dadosAdicionais['agendamento-id'];

          this.agendamentoDAO
            .recupera(agendamentoID)
            .subscribe((agendamento: Agendamento) => {
              agendamento.confirmado = true;

              this.agendamentoDAO.salva(agendamento);
            });
        });

      this.oneSignal.endInit();
const message = {
            app_id: "ae1c19f9-7efc-4c15-b803-c06924491549",
            headings: {"en": "Aluracar"},
            contents: {"en": "Agendamento confirmado!"},
            data: {"agendamento-id": agendamentoId},
            included_segments: ["All"]
        };

        const headers = {
            "Content-Type": "application/json; charset=utf-8",
            "Authorization": "Basic ZjdhMzE5YWYtNmM5ZC00YzM2LWJjMDUtNzUyOGEwNGQ2YjM5"
        };

Aparentemente a configuração está correta! Faça as seguintes modificações da função enviaNotificacao() do api.js do servidor da API:

function enviaNotificacao(agendamento) {
       // código anterior omitido.

        console.log("Enviando notificação...");
        const req = https.request(options, function(res) {  
              res.on('data', function(data) {
                     console.log("Response:");
                     console.log(JSON.parse(data));
              });
       });

       req.on('error', function(e) {
              console.log("ERROR:");
              console.log(e);
       });

       req.write(JSON.stringify(message));
       req.end();
}

Feito isso, reinicie o servidor da API no terminal, tente fazer um agendamento pelo aplicativo, pegue a saída do terminal da API e cole aqui, por favor.

Agendamento recebido: {"nomeCliente":"Rithyelle","enderecoCliente":"Rua A","emailCliente":"rithyelle@email.com","modeloCarro":"Onix 1.6","data":"2018-06-06T02:00:00.000Z","precoTotal":36000,"confirmado":false,"enviado":false,"visualizado":false}
Enviando notificação...
Response:
{ id: '',
  recipients: 0,
  errors: [ 'All included players are not subscribed' ] }

Gabriel! Na página do OneSignal, tem informando um passo-a-passo para configurá-lo no Android Studio. É necessário fazer essa configuração nos arquivos da pasta platforms\android, uma vez que já foi feita por meio do Ionic?

Vc fez os passos 3 a 8 desse artigo que eu coloquei na atividade citada aqui anteriormente? Pelas buscas que fiz, o pessoal tem tido esse problema que vc está tendo quando há uma falha num desses passos!

Gabriel! Na página do OneSignal, tem informando um passo-a-passo para configurá-lo no Android Studio. É necessário fazer essa configuração nos arquivos da pasta platforms\android, uma vez que já foi feita por meio do Ionic?

Que passo-a-passo é esse? Manda o link aqui pra eu poder dar uma olhada!

Fiz todos os passos, sim.

Quando eu crio uma nova aplicação no OneSignal, abre um dialog com o título: Edit app 'nome da app', para selecionar uma plataforma. Na próxima etapa, já pede pra inserir as informações do Firebase. Para fazer como no tutorial, é necessário fechar a dialog e clicar em Leave Setup. Aí na página inicial, o projeto fica com a seguinte configuração:

[ ] Next: Configure a platform

[ ] Next: Select an Integration

[ ] Next: Subscribe a user

Já se eu criar uma app e, no dialog que aparece, escolher Android, setar os dados do Firebase, depois é me pedido pra escolher um SDK. Na primeira vez que fiz, escolhi Android, e foi me apresentado o link:

https://documentation.onesignal.com/docs/android-sdk-setup#section-android-studio

Na segunda vez, escolhi Ionic, e o link é esse:

https://documentation.onesignal.com/docs/ionic-sdk-setup

Mas no passo-a-passo do tutorial, não é mencionada qualquer dessas etapas.

Boa noite, Rithyelle!

Em relação ao tutorial, não bater exatamente não é um problema no geral. Até pq o princípio como um todo permanece o mesmo. Mas me diz uma coisa, qual a versão do Android que vc está tentando testar? Eu vou tentar reproduzir o problema para ver se consigo te ajudar.

Android 6.0