Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

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.

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