像凡人一样使用Ionic进行后台通知

时间:2019-01-10 18:43:35

标签: ionic-framework push-notification ionic3

我已经尝试了几个月的时间来实现一个接收通知的应用程序,该通知的内容我想存储在应用程序的数据库中。我正在使用Firebase Messagging插件,并且在前台和后台都可以正确接收通知。

但是,在后台,我无法执行回调,而无需用户明确按下通知。同样,当应用程序未打开时,也无法增加其标志。

现在,我不明白诸如WhatsApp,Telegram之类的应用程序以及非凡人制作的任何其他应用程序如何工作。他们如何才能获得背景数据,管理徽章,同步消息等?因此,据说Firebase之类的服务在后台受到限制。即使使用Background Mode之类的插件,当用户关闭应用程序时,它也会被Android暂停。

我当前用于处理通知的代码如下:

// In foreground (WORKS)
this.firebaseMessaging.onMessage().subscribe((notificacion) => { 
    // Insert in DB
    ...
});

// In background (DOESN'T WORK)
this.firebaseMessaging.onBackgroundMessage().subscribe((notificacion) => {
    // Insert in DB
    ...
});

还剩下什么选择?对我而言,唯一发生的事情是仅在前台和后台使用通知作为警告。因此,每次打开应用程序时,我都必须与服务器(包括徽章管理)一起调用消息同步回调。

如果有人有更好的方法,如果您对这个问题稍加了解,我将不胜感激。

非常感谢您

1 个答案:

答案 0 :(得分:0)

好吧,一年多以后,我认为是时候解决这个问题了。我这样解决了这个问题:

  1. 假设我需要获取消息列表。此操作由名为getMessages()
  2. 的函数执行
  3. 在后端创建新消息时,我通过Firebase服务发送了推送通知。
  4. 如果在前台收到推送通知,则我直接刷新该方法:
this.firebaseMessaging.onMessage().subscribe((notificacion) => { 
    getMessages();
});
  1. 如果推送通知是在后台收到的,并且用户点击了,则不会有问题,因为插件支持该
this.firebaseMessaging.onBackgroundMessage().subscribe((notificacion) => {
    getMessages();
});
  1. 如果推送通知是在后台收到的,但用户没有点击它,并且以不同于通知的其他方式打开应用程序,则当在以下位置打开应用程序时,我们需要执行相应的功能app.component.ts个文件:
this.platform.ready().then(() => {
  getMessages();
  // Extra stuff like this.statusBar.styleDefault(); or this.splashScreen.hide();
});

这样,所有情况都被考虑了!您应该牢记,像Whatsapp或Telegram之类的应用程序是使用Java或Kotlin之类的官方技术开发的,它们不仅具有官方的本机插件,而且其代码是本机执行的,而不是像Cordova或Capacitor框架那样在受限的浏览器中执行