У меня есть угловое 7.0 веб-приложение, в котором есть облачные сообщения Firebase. Все работало нормально. Без изменений. Теперь, когда я спрашиваю разрешения для уведомления и запрашиваю токен Firebase, я получаю сообщение об ошибке - Регистрация не удалась - не удалось получить открытый ключ. Запуск веб-приложения в Chrome.
Я видел эту тему.
Ошибка регистрации работника службы Web Push - Ошибка регистрации - не удалось получить открытый ключ?
Попробовал предложенное.
Без кубиков.
Раньше все это работало нормально. Я настроил FireBase облачные сообщения в Android и не было никаких проблем.
В сервисе регистрации все в порядке в хроме. Запуск последней версии (версия 75.0.3770.100 (официальная сборка) (64-разрядная версия))
import { Injectable } from '@angular/core';
import * as firebase from 'firebase';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { BehaviorSubject, Observable, of } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { Globals } from './Globals';
import { EventEmitterService } from './event-emitter.service';
@Injectable({
providedIn: 'root'
})
export class MessagingService {
firebaseUrl = '';
data: any;
tokenRegistered: boolean;
firebaseToken: Promise<string>;
UserName: string;
constructor(private http: HttpClient,
private eventEmitterService: EventEmitterService) { }
messaging = firebase.messaging();
currentMessage = new BehaviorSubject(null);
updateToken(user: string, token: string): Observable<boolean> {
const body = { User: user, FireBaseCloudMessagingToken: token };
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
const response = this.http.post<boolean>(`${this.firebaseUrl}`, body, httpOptions)
.pipe(
catchError(this.handleError<boolean>('', false))
);
return response;
}
getPermission() {
if (Notification.permission === 'granted') {
return;
}
this.messaging.requestPermission()
.then(() => {
console.log('Notification permission granted.');
const token = this.messaging.getToken();
this.firebaseToken = token;
return token;
})
.then(token => {
this.updateToken(this.UserName, token).subscribe(resp => {
this.tokenRegistered = resp;
});
})
.catch((err) => {
console.log('Unable to get permission to notify.', err.message);
});
}
receiveMessage() {
this.messaging.onMessage((payload) => {
console.log('Message received in service worker.', payload);
this.eventEmitterService.messageReceived(payload);
this.currentMessage.next(payload);
});
}
private handleError<T>(operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
console.error(error); // log to console
// better job of transforming error for user consumption
console.log(`${operation} failed: ${error.message}`);
// let the app keep running by returning an empty result.
return of(result as T);
};
}
Ожидается: получение токена при разрешении обещания, Факт: регистрация не удалась - не удалось получить открытый ключ