Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 1608676

Browse files
authoredSep 25, 2020
fix: Fixing perf and fcm (#2597)
1 parent ebf537e commit 1608676

File tree

16 files changed

+1185
-1870
lines changed

16 files changed

+1185
-1870
lines changed
 

‎sample/angular.json

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"src/favicon.ico",
2424
"src/assets",
2525
"src/manifest.webmanifest",
26+
"src/main-sw.js",
2627
"src/firebase-messaging-sw.js"
2728
],
2829
"styles": [
@@ -120,20 +121,34 @@
120121
"bundleDependencies": true,
121122
"externalDependencies": [
122123
"firebase",
123-
"@firebase/app",
124124
"@firebase/analytics",
125+
"@firebase/analytics-types",
125126
"@firebase/app",
127+
"@firebase/app-types",
126128
"@firebase/auth",
129+
"@firebase/auth-interop-types",
130+
"@firebase/auth-types",
127131
"@firebase/component",
128132
"@firebase/database",
133+
"@firebase/database-types",
129134
"@firebase/firestore",
135+
"@firebase/firestore-types",
130136
"@firebase/functions",
137+
"@firebase/functions-types",
131138
"@firebase/installations",
139+
"@firebase/installations-types",
140+
"@firebase/logger",
132141
"@firebase/messaging",
133-
"@firebase/storage",
142+
"@firebase/messaging-types",
134143
"@firebase/performance",
144+
"@firebase/performance-types",
145+
"@firebase/polyfill",
135146
"@firebase/remote-config",
136-
"@firebase/util"
147+
"@firebase/remote-config-types",
148+
"@firebase/storage",
149+
"@firebase/storage-types",
150+
"@firebase/util",
151+
"@firebase/webchannel-wrapper"
137152
]
138153
},
139154
"configurations": {

‎sample/ngcc.config.js

Lines changed: 0 additions & 72 deletions
This file was deleted.

‎sample/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@angular/router": "~10.1.3",
2727
"@angular/service-worker": "^10.1.3",
2828
"@nguniversal/express-engine": "~10.1.0",
29-
"firebase": "~7.13.2",
29+
"firebase": "^7.21.1",
3030
"first-input-delay": "^0.1.3",
3131
"proxy-polyfill": "^0.3.2",
3232
"rxjs": "~6.6.3",

‎sample/src/app/messaging/messaging.component.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import { Component, OnInit } from '@angular/core';
22
import { AngularFireMessaging } from '@angular/fire/messaging';
33
import { trace } from '@angular/fire/performance';
4-
import { Observable, fromEvent } from 'rxjs';
5-
import { tap, map, filter } from 'rxjs/operators';
6-
import * as firebase from 'firebase/app';
7-
import 'firebase/messaging';
4+
import { Observable } from 'rxjs';
5+
import { tap } from 'rxjs/operators';
86
import { SwPush } from '@angular/service-worker';
7+
import { environment } from '../../environments/environment';
98

109
@Component({
1110
selector: 'app-messaging',
@@ -25,8 +24,15 @@ export class MessagingComponent implements OnInit {
2524
message$: Observable<any>;
2625
showRequest = false;
2726

28-
constructor(public readonly messaging: AngularFireMessaging, swPush: SwPush) {
29-
messaging.usePublicVapidKey('BIDPctnXHQDIjcOXxDS6qQcz-QTws7bL8v7UPgFnS1Ky5BZL3jS3-XXfxwRHmAUMOk7pXme7ttOBvVoIfX57PEo').then(() => {
27+
constructor(public readonly messaging: AngularFireMessaging, readonly swpush: SwPush) {
28+
swpush.messages.subscribe(it => console.log('swpush', it));
29+
messaging.usePublicVapidKey(environment.vapidKey).then(async () => {
30+
if (navigator && navigator.serviceWorker) {
31+
const registration = await navigator.serviceWorker.getRegistration();
32+
if (registration) {
33+
await messaging.useServiceWorker(registration);
34+
}
35+
}
3036
this.message$ = messaging.messages;
3137
this.token$ = messaging.tokenChanges.pipe(
3238
trace('token'),

‎sample/src/environments/environment.prod.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ export const environment = {
99
messagingSenderId: '480362569154',
1010
appId: '1:480362569154:web:2fe6f75104cdfb82f50a5b',
1111
measurementId: 'G-CBRYER9PJR'
12-
}
12+
},
13+
vapidKey: 'BIDPctnXHQDIjcOXxDS6qQcz-QTws7bL8v7UPgFnS1Ky5BZL3jS3-XXfxwRHmAUMOk7pXme7ttOBvVoIfX57PEo'
1314
};

‎sample/src/environments/environment.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ export const environment = {
1313
messagingSenderId: '480362569154',
1414
appId: '1:480362569154:web:2fe6f75104cdfb82f50a5b',
1515
measurementId: 'G-CBRYER9PJR'
16-
}
16+
},
17+
vapidKey: 'BIDPctnXHQDIjcOXxDS6qQcz-QTws7bL8v7UPgFnS1Ky5BZL3jS3-XXfxwRHmAUMOk7pXme7ttOBvVoIfX57PEo'
1718
};
1819

1920
/*

‎sample/src/firebase-messaging-sw.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
importScripts('https://www.gstatic.com/firebasejs/7.13.2/firebase-app.js');
2-
importScripts('https://www.gstatic.com/firebasejs/7.13.2/firebase-messaging.js');
1+
importScripts('https://www.gstatic.com/firebasejs/7.21.1/firebase-app.js');
2+
importScripts('https://www.gstatic.com/firebasejs/7.21.1/firebase-messaging.js');
33

44
firebase.initializeApp({
55
apiKey: 'AIzaSyA7CNE9aHbcSEbt9y03QReJ-Xr0nwKg7Yg',

‎sample/src/main-sw.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
importScripts('/ngsw-worker.js');
2+
importScripts('/firebase-messaging-sw.js');

‎sample/yarn.lock

Lines changed: 1048 additions & 1751 deletions
Large diffs are not rendered by default.

‎sample/~ngcc.config.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
module.exports = {
2+
packages: {
3+
"firebase": {
4+
entryPoints: {
5+
".": { override: { browser: undefined } },
6+
"./analytics": { override: { browser: undefined } },
7+
"./app": {override: { browser: undefined } },
8+
"./auth": {override: { browser: undefined } },
9+
"./database": { override: { browser: undefined } },
10+
"./firestore": { override: { browser: undefined } },
11+
"./functions": { override: { browser: undefined } },
12+
"./installations": { override: { browser: undefined } },
13+
"./storage": { override: { browser: undefined } },
14+
"./performance": { override: { browser: undefined } },
15+
"./remote-config": { override: { browser: undefined } },
16+
},
17+
generateDeepReexports: true
18+
},
19+
"@firebase/analytics": {
20+
entryPoints: { ".": { override : { browser: undefined } } },
21+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
22+
},
23+
"@firebase/app": {
24+
entryPoints: { ".": { override : { browser: undefined } } },
25+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
26+
},
27+
"@firebase/auth": {
28+
entryPoints: { ".": { override : { browser: undefined } } },
29+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
30+
},
31+
"@firebase/component": {
32+
entryPoints: { ".": { override: { browser: undefined } } },
33+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
34+
},
35+
"@firebase/database": {
36+
entryPoints: { ".": { override: { browser: undefined } } },
37+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
38+
},
39+
"@firebase/firestore": {
40+
entryPoints: { ".": { override: { browser: undefined } } },
41+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
42+
},
43+
"@firebase/functions": {
44+
entryPoints: { ".": { override: { browser: undefined } } },
45+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
46+
},
47+
"@firebase/installations": {
48+
entryPoints: { ".": { override: { browser: undefined } } },
49+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
50+
},
51+
"@firebase/messaging": {
52+
entryPoints: { ".": { override: { browser: undefined } } },
53+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
54+
},
55+
"@firebase/storage": {
56+
entryPoints: { ".": { override: { browser: undefined } } },
57+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
58+
},
59+
"@firebase/performance": {
60+
entryPoints: { ".": { override: { browser: undefined } } },
61+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
62+
},
63+
"@firebase/polyfills": {
64+
entryPoints: { ".": { override: { browser: undefined } } },
65+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
66+
},
67+
"@firebase/remote-config": {
68+
entryPoints: { ".": { override: { browser: undefined } } },
69+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
70+
},
71+
"@firebase/util": {
72+
entryPoints: { ".": { override: { browser: undefined } } },
73+
ignorableDeepImportMatchers: [ /@firebase\/app-types\/private/ ]
74+
},
75+
}
76+
}

‎src/analytics/analytics.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ export class AngularFireAnalytics {
9292
analytics = of(undefined).pipe(
9393
observeOn(new ɵAngularFireSchedulers(zone).outsideAngular),
9494
switchMap(() => isPlatformBrowser(platformId) ? import('firebase/analytics') : EMPTY),
95-
switchMap(() => import('@firebase/analytics')),
96-
tap(analytics => analytics.registerAnalytics && analytics.registerAnalytics(firebase as any)),
9795
map(() => ɵfirebaseAppFactory(options, zone, nameOrConfig)),
9896
map(app => app.analytics()),
9997
tap(analytics => {

‎src/auth-guard/auth-guard.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ export class AngularFireAuthGuard implements CanActivate {
3838
const auth = of(undefined).pipe(
3939
observeOn(new ɵAngularFireSchedulers(zone).outsideAngular),
4040
switchMap(() => zone.runOutsideAngular(() => import('firebase/auth'))),
41-
tap((it: any) => it), // It seems I need to touch the import for it to do anything... race maybe?
4241
map(() => ɵfirebaseAppFactory(options, zone, nameOrConfig)),
4342
map(app => zone.runOutsideAngular(() => app.auth())),
4443
shareReplay({ bufferSize: 1, refCount: false }),

‎src/auth/auth.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
} from '@angular/fire';
1515
import { User, auth } from 'firebase/app';
1616
import { isPlatformServer } from '@angular/common';
17-
import firebase from 'firebase/app';
1817

1918
export interface AngularFireAuth extends ɵPromiseProxy<auth.Auth> {}
2019

@@ -58,7 +57,6 @@ export class AngularFireAuth {
5857
const auth = of(undefined).pipe(
5958
observeOn(schedulers.outsideAngular),
6059
switchMap(() => zone.runOutsideAngular(() => import('firebase/auth'))),
61-
tap((it: any) => it), // It seems I need to touch the import for it to do anything... race maybe?
6260
map(() => ɵfirebaseAppFactory(options, zone, nameOrConfig)),
6361
map(app => zone.runOutsideAngular(() => app.auth())),
6462
shareReplay({ bufferSize: 1, refCount: false }),

‎src/functions/functions.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ export class AngularFireFunctions {
3939
const functions = of(undefined).pipe(
4040
observeOn(schedulers.outsideAngular),
4141
switchMap(() => import('firebase/functions')),
42-
tap((it: any) => it),
4342
map(() => ɵfirebaseAppFactory(options, zone, nameOrConfig)),
4443
map(app => app.functions(region || undefined)),
4544
tap(functions => {

‎src/messaging/messaging.ts

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Inject, Injectable, NgZone, Optional, PLATFORM_ID } from '@angular/core
22
import { messaging } from 'firebase/app';
33
import firebase from 'firebase/app';
44
import { concat, EMPTY, Observable, of, throwError, fromEvent } from 'rxjs';
5-
import { catchError, defaultIfEmpty, map, mergeMap, observeOn, switchMap, switchMapTo, tap, shareReplay, filter } from 'rxjs/operators';
5+
import { catchError, defaultIfEmpty, map, mergeMap, observeOn, switchMap, switchMapTo, shareReplay, filter, subscribeOn } from 'rxjs/operators';
66
import {
77
FIREBASE_APP_NAME,
88
FIREBASE_OPTIONS,
@@ -40,54 +40,51 @@ export class AngularFireMessaging {
4040
const schedulers = new ɵAngularFireSchedulers(zone);
4141

4242
const messaging = of(undefined).pipe(
43-
observeOn(schedulers.outsideAngular),
43+
subscribeOn(schedulers.outsideAngular),
44+
observeOn(schedulers.insideAngular),
4445
switchMap(() => isPlatformServer(platformId) ? EMPTY : import('firebase/messaging')),
45-
tap((it: any) => it), // It seems I need to touch the import for it to do anything... race maybe?
4646
map(() => ɵfirebaseAppFactory(options, zone, nameOrConfig)),
4747
map(app => app.messaging()),
4848
shareReplay({ bufferSize: 1, refCount: false })
4949
);
5050

5151
this.requestPermission = messaging.pipe(
52-
observeOn(schedulers.outsideAngular),
52+
subscribeOn(schedulers.outsideAngular),
53+
observeOn(schedulers.insideAngular),
5354
// tslint:disable-next-line
5455
switchMap(messaging => firebase.messaging.isSupported() ? messaging.requestPermission() : throwError('Not supported.'))
5556
);
5657

5758
this.getToken = messaging.pipe(
58-
observeOn(schedulers.outsideAngular),
59+
subscribeOn(schedulers.outsideAngular),
60+
observeOn(schedulers.insideAngular),
5961
switchMap(messaging => firebase.messaging.isSupported() && Notification.permission === 'granted' ? messaging.getToken() : EMPTY),
6062
defaultIfEmpty(null)
6163
);
6264

6365
const tokenChanges = messaging.pipe(
64-
observeOn(schedulers.outsideAngular),
66+
subscribeOn(schedulers.outsideAngular),
67+
observeOn(schedulers.insideAngular),
6568
switchMap(messaging => firebase.messaging.isSupported() ? new Observable<string>(emitter =>
6669
messaging.onTokenRefresh(emitter.next, emitter.error, emitter.complete)
6770
) : EMPTY),
6871
switchMapTo(this.getToken)
6972
);
7073

7174
this.tokenChanges = messaging.pipe(
72-
observeOn(schedulers.outsideAngular),
75+
subscribeOn(schedulers.outsideAngular),
76+
observeOn(schedulers.insideAngular),
7377
switchMap(messaging => firebase.messaging.isSupported() ? concat(this.getToken, tokenChanges) : EMPTY)
7478
);
7579

76-
// TODO 6.1 add observable for clicks
77-
if (isPlatformServer(platformId)) {
7880

79-
this.messages = EMPTY;
80-
81-
} else {
82-
83-
this.messages = fromEvent(navigator.serviceWorker, 'message').pipe(
84-
map((event: MessageEvent) => event.data.firebaseMessaging),
85-
filter((message: any) => !!message && message.type === 'push-received'),
86-
map((message: any) => message.payload),
87-
filter((payload: any) => !!payload)
88-
);
89-
90-
}
81+
this.messages = messaging.pipe(
82+
subscribeOn(schedulers.outsideAngular),
83+
observeOn(schedulers.insideAngular),
84+
switchMap(messaging => firebase.messaging.isSupported() ? new Observable<string>(emitter =>
85+
messaging.onMessage(next => emitter.next(next), err => emitter.error(err), () => emitter.complete())
86+
) : EMPTY),
87+
);
9188

9289
this.requestToken = of(undefined).pipe(
9390
switchMap(() => this.requestPermission),
@@ -96,7 +93,8 @@ export class AngularFireMessaging {
9693
);
9794

9895
this.deleteToken = (token: string) => messaging.pipe(
99-
observeOn(schedulers.outsideAngular),
96+
subscribeOn(schedulers.outsideAngular),
97+
observeOn(schedulers.insideAngular),
10098
switchMap(messaging => messaging.deleteToken(token)),
10199
defaultIfEmpty(false)
102100
);

‎src/performance/performance.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { map, shareReplay, switchMap, tap } from 'rxjs/operators';
44
import { performance } from 'firebase/app';
55
import { FirebaseApp, ɵlazySDKProxy, ɵPromiseProxy } from '@angular/fire';
66
import { isPlatformBrowser } from '@angular/common';
7-
import firebase from 'firebase/app';
87

98
// SEMVER @ v6, drop and move core ng metrics to a service
109
export const AUTOMATICALLY_TRACE_CORE_NG_METRICS = new InjectionToken<boolean>('angularfire2.performance.auto_trace');
@@ -32,14 +31,12 @@ export class AngularFirePerformance {
3231

3332
this.performance = of(undefined).pipe(
3433
switchMap(() => isPlatformBrowser(platformId) ? zone.runOutsideAngular(() => import('firebase/performance')) : EMPTY),
35-
switchMap(() => import('@firebase/performance')),
36-
tap(perf => perf.registerPerformance && perf.registerPerformance(firebase as any)),
3734
map(() => zone.runOutsideAngular(() => app.performance())),
3835
tap(performance => {
39-
if (instrumentationEnabled !== true) {
36+
if (instrumentationEnabled === false) {
4037
performance.instrumentationEnabled = false;
4138
}
42-
if (dataCollectionEnabled !== true) {
39+
if (dataCollectionEnabled === false) {
4340
performance.dataCollectionEnabled = false;
4441
}
4542
}),

0 commit comments

Comments
 (0)
Please sign in to comment.