即使关闭了应用程序,也可以保持订阅运行吗?

Riv*_*ven 5 javascript sockets typescript angular ionic4

出于背景目的,我在离子文档(本机和非本机)以及其他页面中进行了深入搜索,发现可能有实现此目的的可能性(即使关闭了应用程序,也要继续运行订阅),但是我可以我根本不知道应该在哪里放置BakckgroundMode插件才能正常工作……(我认为该插件无法在我的设备上正常工作),但是很难检查该东西,因为您无法检查设备如果它在chrome:// inspect的背景模式下...

这是BackgroundMode插件:

https://github.com/katzer/cordova-plugin-background-mode

我安装了backgroundMode 0.7.2,它不是最实用的插件,但是尝试安装最新的插件会使我在构建时出现错误,因此我尝试了此版本并可以正常工作。

在文档中,我看到以下内容:

该插件创建对象cordova.plugins.backgroundMode,并且在触发deviceready事件后可以访问该插件。

因此,为了运行后台模式,在构造函数内部的page.ts中(稍后我将讨论为什么在构造函数中),我将:

document.addEventListener('deviceready', ()=> {

      this.backgroundMode.enable();
      this.backgroundMode.setDefaults(
        {
          title: 'executing in bg mode...',
          text: 'background mode was activated successfully!',
          color: '#fff',
          resume: true,
          silent: false
        }
      );

      this.backgroundMode.disableWebViewOptimizations();

      this.backgroundMode.on('activate').subscribe(()=>{

         this.isAcceptedObservable = this.localNotifications.on('yes').subscribe(res =>{

            console.log('confirmed!');
            this.backgroundMode.unlock();

         });

         //And more observables...

      });

});
Run Code Online (Sandbox Code Playgroud)

即使关闭应用,backgroundMode.on('activate')订阅中的订阅也是我需要保持运行的东西。

之所以将代码放在构造函数中,是因为我还使用ngx-socket-io来侦听我创建的节点中套接字服务器的发射和广播功能,因此链接到套接字的订阅之一事件是:

this.getInvitationSubscriber = this.getInvitation().subscribe(data =>{

     this.invitations.push(data);
     this.showNotification({
          title: 'Invitation received!',
          text: 'Someone invited you!',
          icon: data['from']['avatar_src'],
          attachments: [data['from']['invitation_src']]
     });

     console.log(this.invitations);

});
Run Code Online (Sandbox Code Playgroud)

在ionViewWillEnter中我打电话:

ionViewWillEnter{

     this.socket.connect();

}
Run Code Online (Sandbox Code Playgroud)

并且此函数在构造函数之外:

  getInvitation(){

    let observable = new Observable(observer =>{

      this.socket.on('subject', data =>{

        observer.next(data);

      });

    });

    return observable;

  }
Run Code Online (Sandbox Code Playgroud)

我期望继续运行在backgroundMode.on('activate')函数内部的构造函数中的“通知侦听器”,即使应用程序已关闭也可以接收通知,但是我不知道ngx-socket-io和我的结构。

我也已经在app.module提供程序和otherpage.module.ts提供程序中注入了后台模式并正确导入,所以这不是错误,但是我没有收到通知...

我知道通知调度是正确的,因为如果我简单地尝试不使用backgroundMode并将该订阅置于backgroundMode.on('activate')订阅之外,我会再次收到通知,但仅在应用程序处于前台或挂起状态时才有效。 ..