не удалось зарегистрировать сервисную базу firebase в угловом приложении - PullRequest
0 голосов
/ 21 мая 2019

Я работаю над приложением 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...