Невозможно получить токен от Firebase для обмена сообщениями

Я работаю над push-уведомлениями на firebase. Когда я пытаюсь получить доступ к messaging.getToken(), я не получаю токен, вместо этого я получаю сообщение об ошибке undefined. Я использую следующий код

private messaging = firebase.messaging(); //declaration
this.messaging.requestPermission().then(function () {
 console.info('Notification permission granted.');
 this.messaging.getToken().then(function (currentToken) {
    console.info(currentToken, 'currentToken');
    if (currentToken) {

    } else {
      // Show permission request.
      console.info('No Instance ID token available. Request permission to generate one.');
      // Show permission UI.

    }
  }).catch(function (err) {
    console.info('An error occurred while retrieving token. ', err);

  });
}).catch(function (err) {
  console.info('Unable to get permission to notify. , err);
});

Проблема в том, что первый журнал печатается Notification permission granted., и сразу же выполняется блок перехвата Unable to get permission to notify.. Я попытался добавить firebase-messaging-sw.js в свой корневой каталог и дал ссылку в index.html, а также тестирую это через https, но все же сталкиваюсь с та же проблема, что и ниже:

Notification permission granted.
home.component.ts:113 Unable to get permission to notify.
TypeError: Cannot read property 'messaging' of undefined
at home.component.ts:95
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (core.js:3760)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:138)
at zone.js:872
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:3751)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)

Любые предложения были бы полезны, спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 049
1

Ответы 1

Попробуйте изменить функцию на функцию стрелки.

replace this:
this.messaging.requestPermission().then(function(){

with this:

this.messaging.requestPermission().then(() => {

 console.info('Notification permission granted.');
 this.messaging.getToken().then((currentToken) => {
 ...

Вы используете функцию как обратный вызов, а «this» использует другой контекст. Используйте функцию стрелки, чтобы сохранить основной контекст даже внутри обратных вызовов.

Я решил это, объявив обмен сообщениями внутри функции. Это была проблема с областью действия. Спасибо

Shaik Nizamuddin 20.11.2018 10:10

Другие вопросы по теме