2017-02-20 30 views
1

Пытался создать оповещение с помощью AlertController в ионном приложении внутри FCMPlugin.onNotification(), но контроллер предупреждения не создается. На самом деле метод останавливается, и больше не работает console.log() после создания предупреждения в коде.AlertController не работает при вызове в FCMPlugin Ionic 2

pushNoteSetup(){ 
if(typeof(FCMPlugin) !== "undefined"){ 
    FCMPlugin.getToken(function(t){ 
    console.log("Use this token for sending device specific messages\nToken: " + t); 

    }, function(e){ 
    console.log("Uh-Oh!\n"+e); 
    }); 

    this.confirmAlert('Hi'); 

    FCMPlugin.onNotification(
    function(d){ 
     if(d.wasTapped){ 
     // Background receival (Even if app is closed), 
     // bring up the message in UI 
     let message = d['aps']['alert']; 
     console.log('Message received: ' + message); 
     this.alert = this.alertCtrl.create({ 
      title: 'Hi', 
      message: 'Boo', 
      buttons: ['Ok'] 
     }); 
     this.alert.present(); 
     console.log('Should have displayed an alert'); 
     this.confirmAlert(message); 
     console.log('Skipping over alers?'); 
     } else { 
     let message = d['aps']['alert']; 
     console.log('Message received: ' + message); 
     let alert = this.alertCtrl.create({ 
      title: 'Hi', 
      message: 'Boo', 
      buttons: ['Ok'] 
     }); 
     alert.present(); 
     console.log('Should have displayed an alert'); 
     this.confirmAlert(message); 
     console.log('Skipping over alers?'); 
     this.confirmAlert(message); 
     } 
    }, function(msg){ 
     // No problemo, registered callback 
     console.log('Message:' + msg); 
    }, function(err){ 
     console.log("Arf, no good mate... " + err); 
    }); 
    } else { 

    console.log("Notifications disabled, only provided in Android/iOS environment"); 
    } 
} 
public confirmAlert(message: any){ 
let mesg = String(message); 

console.log('Message to display ' + mesg + ' and ' + message); 

let confirmAlert = this.alertCtrl.create({ 
     title: 'Alert', 
     message: message, 
     buttons: [{ 
     text: 'Cancel', 
     role: 'cancel', 
     handler:() => { 
      console.log('cancel'); 
     } 
     }, { 
     text: 'Confirm', 
     handler:() => { 
      console.log('Confirm'); 
     } 
     }] 
    }); 
    confirmAlert.present(); 

} 

Это вызывается после того, как platform.ready() в app.componenet.ts

ответ

1

Вы используете JavaScript function, который изменяет значение this. Он будет указывать на контекст функции. Вы могли бы попытаться сохранить контекст как:

self = this; 

и жгутов обратного вызова,

function(d){ 
     if(d.wasTapped){ 
     // Background receival (Even if app is closed), 
     // bring up the message in UI 
     let message = d['aps']['alert']; 
     console.log('Message received: ' + message); 
     self.alert = self.alertCtrl.create({ 
      title: 'Hi', 
      message: 'Boo', 
      buttons: ['Ok'] 
     }); 
     self.alert.present(); 
     //... 

Или лучший способ заключается в использовании arrow function

FCMPlugin.onNotification(
    (d)=>{ 
    //create alert 
    }); 
0

Вы используете JavaScript, как сказал Сураджа.

Попробуйте использовать этот код вместо:

if(typeof(FCMPlugin) !== "undefined"){ 


FCMPlugin.getToken(
       (token)=>{ 
        console.log(token); 
       }, 
       (err)=>{ 
        console.log('error retrieving token: ' + err); 
       } 
      ); 



    FCMPlugin.onNotification(
     (data)=>{ 
      if(data.wasTapped){ 
       //Notification was received on device tray and tapped by the user. 
       //Do something 
      }else{ 
       //Notification was received in foreground. Maybe the user needs to be notified. 
       this.alertBox = this.alertCtrl.create({ 
       title: data.title, 
       subTitle: data.body, 
       buttons: [{ 
       text: 'Cancel', 
       role: 'cancel', 
       handler:() => { 
       console.log('cancel'); 
       } 
       }, { 
        text: 'Confirm', 
        handler:() => { 
        console.log('Confirm'); 
        } 
       }] 
       });  
       this.alertBox.present();     
      } 
     }, 
     (msg)=>{ 
      console.log('onNotification callback successfully registered: ' + msg); 
     }, 
     (err)=>{ 
      console.log('Error registering onNotification callback: ' + err); 
     } 
    ); 
} 
else console.log("Notifications disabled, only provided in Android/iOS environment");