Я работаю над приложением Angular, в котором я пытаюсь интегрировать в него push-уведомление на базе огня
на данный момент Push-уведомление работает в localhost, но на производстве я получаю сообщение об ошибке, приведенное ниже ->
Ресурс скрипта находится за редиректом, что запрещено.
Невозможно получить разрешение на уведомление.
{code: "message / failed-serviceworker-registration", сообщение:
Msgstr "Обмен сообщениями: мы не можем зарегистрировать s… d.
(Messaging / fail-serviceworker-Registration). ", browserErrorMessage:
"Не удалось зарегистрировать ServiceWorker: ресурс сценария находится за
redirect, который запрещен. ", stack:" FirebaseError: Messaging: We
не в состоянии
Registe ... ication / polyfills.76dea468333ac7c61c16.js: 1: 3929) "}
Я размещаю все подробности о том, как интегрировать push-уведомления в угловой проект.
В файле environment.ts
export const environment = {
production: true,
firebase : {
apiKey: "AIzaSyDpEDLFS################gn####",
authDomain: "#######.firebaseapp.com",
databaseURL: "https://######.firebaseio.com",
projectId: "####-3#e#6",
storageBucket: "#####-3#e#6.a###pot.c#m",
messagingSenderId: "1#9#0#7#5#2#5"
}
};
В добавлении gcm_sender_id на Manifeast.json
{
"gcm_sender_id": "1#3#5#8#7#0#"
}
Файл Service.ts сообщений
import { Injectable } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFireMessaging } from '@angular/fire/messaging';
import { mergeMapTo } from 'rxjs/operators';
import { take } from 'rxjs/operators';
import { BehaviorSubject } from 'rxjs'
@Injectable()
export class MessagingService {
currentMessage = new BehaviorSubject(null);
constructor(
private angularFireDB: AngularFireDatabase,
private angularFireAuth: AngularFireAuth,
private angularFireMessaging: AngularFireMessaging) {
this.angularFireMessaging.messaging.subscribe(
(_messaging) => {
_messaging.onMessage = _messaging.onMessage.bind(_messaging);
_messaging.onTokenRefresh = _messaging.onTokenRefresh.bind(_messaging);
}
)
}
/**
* update token in firebase database
*
* @param userId userId as a key
* @param token token as a value
*/
updateToken(userId, token) {
// we can change this function to request our backend service
this.angularFireAuth.authState.pipe(take(1)).subscribe(
() => {
const data = {};
data[userId] = token
this.angularFireDB.object('fcmTokens/').update(data)
})
}
/**
* request permission for notification from firebase cloud messaging
*
* @param userId userId
*/
requestPermission() {
this.angularFireMessaging.requestToken.subscribe(
(token) => {
console.log(token);
//this.updateToken(userId, token);
},
(err) => {
console.error('Unable to get permission to notify.', err);
}
);
}
/**
* hook method when new notification received in foreground
*/
receiveMessage() {
this.angularFireMessaging.messages.subscribe(
(payload) => {
console.log("new message received. ", payload);
this.currentMessage.next(payload);
})
}
}
Firebase-Messaging -sw.js
importScripts('https://www.gstatic.com/firebasejs/5.5.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/5.5.0/firebase-messaging.js');
firebase.initializeApp({
'messagingSenderId': '57#####5###',
});
const messaging = firebase.messaging();
app.component.ts
constructor(){
this.messagingService.requestPermission();
this.messagingService.receiveMessage();
}