angular - 使用 Firebase 云消息传递 Angular 在 PWA 中处理来自推送通知的有效负载信息
问题描述
我正在使用 ionic / angular 在 pwa 中实现推送通知,一切对我来说都很完美,但是当我收到推送时,不会触发事件来获取有效负载。
因此,当它首先请求许可以获取通知时,然后当许可被授予时,接收消息方法是火,但我没有从推送中获取信息
这是服务
import { Injectable } from '@angular/core';
import { AngularFireMessaging } from '@angular/fire/messaging';
import { mergeMapTo } from 'rxjs/operators';
import { AngularfireService } from './angularfire.service';
import { HttpClient, HttpHeaders} from '@angular/common/http';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class PushService {
currentMessage = new BehaviorSubject(null);
constructor( private afMessaging: AngularFireMessaging,
public afs:AngularfireService,
public http:HttpClient) {
this.afMessaging.messaging.subscribe(
(_messaging) => {
_messaging.onMessage = _messaging.onMessage.bind(_messaging);
_messaging.onTokenRefresh =
_messaging.onTokenRefresh.bind(_messaging);
}
)
}
requestPermission(user) {
console.log(user);
this.afMessaging.requestPermission
.pipe(mergeMapTo(this.afMessaging.tokenChanges))
.subscribe(
(token) => { console.log('Permission granted! Save to the server!', token);
this.afs.GuardarTokenPush(user,token); this.receiveMessage()},
(error) => { console.error(error); },
);
}
receiveMessage() {
console.log('Receive message');
this.afMessaging.messages.subscribe(
(payload) => {
console.log("new message received. ", payload);
this.currentMessage.next(payload);
})
}
THIS IS my app.component.ts
import { Component } from '@angular/core';
import { Platform } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AngularfireService } from './servicios/angularfire.service';
import { SwPush, SwUpdate } from '@angular/service-worker';
import { AlertsService } from './servicios/alerts.service';
import { PushService } from './servicios/push.service';
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.scss']
})
export class AppComponent {
constructor(
private platform: Platform,
private splashScreen: SplashScreen,
private statusBar: StatusBar,
private afs :AngularfireService,
private swUpdate: SwUpdate,
private AS:AlertsService,
private PS:PushService
) {
this.initializeApp();
this.CheckNewVersion()
}
initializeApp() {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
});
}
ngOnInit() {
this.PS.receiveMessage();
}
CheckNewVersion(){
if (this.swUpdate.isEnabled) {
console.log(this.swUpdate.isEnabled);
this.swUpdate.available.subscribe(() => {
this.AS.Update().then((result) => {
if (result.value) {
window.location.reload();
}
})
});
}
}
}
解决方案
推荐阅读
- common-lisp - 如何循环所有导入键?
- xml - 循环遍历节点并更改树结构 xml
- javascript - 使用烧瓶渲染对 html 模板的更改
- mongoose - 猫鼬聚合返回对象承诺
- angular - Angular - 在不知道结构的情况下循环显示视图组件视图上的任何 json 数据
- flutter - 无法使用 Flutter 从 Firestore 检索文档
- python-3.x - NumPy - 创建具有递增幂的对角线的上三角矩阵
- python - pipenv 无法创建虚拟环境
- ios - 在纵向模式下输入 iPad 密码屏幕很奇怪
- html - select2 元素缩小宽度的原因可能是什么?