-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
Copy pathmessaging.ts
44 lines (34 loc) · 1.25 KB
/
messaging.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { FirebaseApp } from 'angularfire2';
import { FirebaseMessaging } from '@firebase/messaging-types';
import { requestPermission } from './observable/request-permission';
import { from } from 'rxjs/observable/from';
import { mergeMap } from 'rxjs/operators';
@Injectable()
export class AngularFireMessaging {
messaging: FirebaseMessaging;
requestPermission: Observable<void>;
getToken: Observable<string>;
tokenChanges: Observable<string>;
messages: Observable<{}>;
requestToken: Observable<string>;
constructor(public app: FirebaseApp) {
this.messaging = app.messaging();
this.requestPermission = requestPermission(this.messaging);
this.getToken = from(this.messaging.getToken()!);
this.tokenChanges = new Observable(subscriber => {
this.messaging.getToken()!.then(t => subscriber.next(t));
this.messaging.onTokenRefresh(subscriber);
});
this.messages = new Observable(subscriber => {
this.messaging.onMessage(subscriber);
});
this.requestToken = this.requestPermission.pipe(
mergeMap(() => this.tokenChanges)
);
}
deleteToken(token: string) {
return from(this.messaging.deleteToken(token)!);
}
}