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

时间:2019-09-14 10:59:13

标签: javascript angular typescript sockets ionic4

出于背景目的,我在离子文档(本机且无本机)和其他页面中进行了深入搜索,发现可能有实现此目的的可能性(即使关闭了应用程序,也要继续运行订阅),但是我根本不明白应该在哪里放置一件事或其他东西来使BakckgroundMode插件正常工作...(我认为此插件无法在我的设备中运行),但是很难检查该事物,因为您无法使用chrome:// inspect ...检查设备是否处于后台模式...

这是BackgroundMode插件:

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

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

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

  

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

因此,为了运行后台模式,请在我的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...

      });

});

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);

});

在ionViewWillEnter我打电话:

ionViewWillEnter{

     this.socket.connect();

}

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

  getInvitation(){

    let observable = new Observable(observer =>{

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

        observer.next(data);

      });

    });

    return observable;

  }

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

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

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

0 个答案:

没有答案