Domexception registration failed push service error

Setup Operating System: Linux & OS X Node Version: v12.13.1 web-push Version: ^3.4.3 Please select any browsers that you are experiencing problems with: Chrome for Android Chrome Beta for Andro...

Setup

Operating System: Linux & OS X
Node Version: v12.13.1
web-push Version: ^3.4.3

Please select any browsers that you are experiencing problems with:

  • Chrome for Android
  • Chrome Beta for Android
  • Firefox for Android
  • Brave Browser Android
  • Chrome
  • Firefox Developer Edition
  • Opera for Android
  • Samsung Internet Browser
  • Other

Crossed ones I didn’t try.

Please list the browsers you are have tested this, including the version
of the browser (i.e. Chrome Beta, Firefox Beta etc).

  • Chrome for Android (Chrome 81.0.40044.96, Android 10)
  • Chrome Beta for Android (Chrome 81.0.40044.96, Android 10)
  • Firefox for Android (68.7.0)
  • Brave Browser Android (Brave 1.5.131, Chromium 80.0.3987.162)
  • Chrome (Version 80.0.3987.162 (Official Build) (64-bit) Mac)
  • Firefox Developer Edition (76.0b1 (64-bit))
  • Opera for Android
  • Samsung Internet Browser
  • Other

Crossed ones I didn’t try.

Problem

Please explain what behaviour you are seeing.

I have implemented push notifications on this site, https://livecovid.in.

It works on all the browsers(Firefox and Chrome) on my Mac. But when I try the same on my phone I am getting this error. On all browsers.

DOMException: Registration failed - push service error

Now at first I thought this was a problem with my website, I checked and re-cheked that the configuration was correct on the server and client side. I made sure private and public keys were correct. And they are. And this whole time the problem was only in the browsers on the phone.

So I tried this other demo website https://gauntface.github.io/simple-push-demo/ and the same error occured (on my phone). Then I tried this demo https://serviceworke.rs/push-payload_demo.html.

Both demos worked fine on my Mac, but none of them worked in any of my phone browsers.

Now, at this point I asked one of my friends to try it and they seem to have no such issues on their phone in any browser, which was weird. Then I asked one of my other friends, and they had the same problem as me.

How to reproduce?

  • Goto https://livecovid.in or https://gauntface.github.io/simple-push-demo/
  • Click any row in the table and click on the little bell icon.
  • It will prompt you for notifications, Click yes, approve the notification access.
  • If it works for you you will see this.

Screenshot 2020-04-13 at 10 31 37 AM

  • Otherwise you will see something like this if it fails.

Screenshot 2020-04-13 at 10 33 14 AM

Expected

Please explain what you expected to happen
Everyone should be able to register for the notifications regardless of what device they are on.

Features Used

  • VAPID Support
  • GCM API Key
  • Sending with Payload

Example / Reproduce Case

Please provide a code sample that reproduces the issue. If there is a
repository that reproduces the issue please put the link here.

https://github.com/anamritraj/livecovid.in-webapp

https://github.com/anamritraj/livecovid.in-webapp/blob/master/src/services/subscription.service.js#L21-L64

Other

  • One strange thing was that if I emulated a mobile device in Firefox Developer Edition browser on Mac, the notifications permission was just denied without even getting a prompt, but that might just be a browser thing.

  • You can test this on https://gauntface.github.io/simple-push-demo/ by opening it in Firefox Developer and then goto developer tools and then click that phone icon on the top right (I guess you already know how to do this, but just in case 🤭)

  • Also, I googled and in one of the posts they suggested to add gcm_id in manifest.json. I added a random gcm_id in the manifest but on further digging I realised this is not required anymore.

I am trying to enable push notifications on my website using VAPID keys.
When i include the gcm_sender_id and remove the applicationServerKey from the pushManager.subscribe method, it runs fine.

Only when i enable VAPID keys and remove the gcm_sender_id from manifest.json file. i get the foloowing error.

DOMException: Registration failed - push service error

I am using Chrome browser.

asked Feb 22, 2017 at 7:36

Kaushik Wavhal's user avatar

2

I encountered this error in Brave browser. By default, Google Services for push messaging are disabled in Brave. To enable this, open the following URL in brave:

brave://settings/privacy

After this, enable the flag «Use Google services for push messaging»:

Source:
https://github.com/firebase/firebase-js-sdk/issues/3195#issuecomment-848036637

answered Oct 19, 2021 at 3:06

Nicodemuz's user avatar

NicodemuzNicodemuz

3,3091 gold badge26 silver badges31 bronze badges

2

The applicationServerKey that i was using in the pushManager.subscribe method was somehow incorrect.
It worked when i regenerated the keys in node using the following module.

const webpush = require('web-push');
const vapidKeys = webpush.generateVAPIDKeys()

answered Feb 22, 2017 at 7:36

Kaushik Wavhal's user avatar

In my case,I was trying to run firebase messaging on a flutter web.
My Browser was BRAVE.

It always failed with an exception of firebase fcm registration push servic error.

I followed @Nicodemuz answer, but it didn’t solve the issue. I get the same error.

The only solution was setting Google chrome as my executable.

Anyhow the issue is not with firebase or flutter, it’s with the brave browser itself.

answered Oct 5, 2022 at 8:11

Rajesh's user avatar

RajeshRajesh

3,4046 gold badges23 silver badges42 bronze badges

Add Answer
|
View In TPC Matrix

Technical Problem Cluster First Answered On
February 3, 2022

Popularity
3/10

Helpfulness
1/10


Contributions From The Grepper Developer Community

Contents

Code Examples

  • An error occurred while retrieving token. DOMException: Registration failed — push service error
  • Related Problems

  • An error occurred while retrieving token. DOMException: Registration failed — push service error
  • TPC Matrix View Full Screen

    An error occurred while retrieving token. DOMException: Registration failed — push service error

    Comment

    0


    Popularity

    3/10 Helpfulness
    1/10
    Language
    html

    Source: search.brave.com

    Tags: html
    push
    registration
    service

    Bathila

    Contributed on Feb 03 2022

    Bathila

    32 Answers  Avg Quality 5/10


    # #javascript #reactjs #firebase #firebase-cloud-messaging #token

    Вопрос:

    Я делаю PWA. Мне нужно сохранить токен в firebase, но я получаю DOMException: Registration failed - push service error . Это return messaging.getToken(); приводит к ошибке, о которой я упоминал. Если я удалю оператор return, я получу сообщение об ошибке от firebase, потому что токен не определен по очевидным причинам.

    Вот мой код:

     const messaging = firebase.messaging();
    var perm;
    function InitializeFirebaseMessaging(){
      messaging.requestPermission().then(function(){
        
        console.log("Notification permission");
        return messaging.getToken();
      }).then(function(token){
        
        console.log("Token: " token);
       
        firestore.collection("tokens").doc(auth.currentUser.email).set({
          mail: auth.currentUser.email,
          token: token 
      })//.then(() => {perm=true;});
      
      }).catch(function (reason){
        console.log(reason);
      });
      if(perm){
      ChatRoom();
      }
      return null;
    }
    messaging.onMessage(function (payload){
      
      console.log("payload:" payload);
    });
    messaging.onTokenRefresh(function () {
      messaging.getToken()
          .then(function (newtoken) {
            firestore.collection("tokens").doc(auth.currentUser.email).set({
              mail: auth.currentUser.email,
              token: newtoken 
          })//.then(() => {perm=true;console.log("New Token : "  newtoken);});
            
              
             
          })
          .catch(function (reason) {
              console.log(reason);
          })
    });
     

    Итак, мой вопрос в том, почему я не могу получить свой токен, почему я получаю ошибку, упомянутую выше? Я нажимаю «принять», когда он запрашивает разрешение, и после этого я получаю сообщение об ошибке.

    В этой статье я в основном хочу рассказать о том, как использовать Service Worker для отправки push-уведомлений или уведомлений через Интернет. Веб-push очень популярен на иностранных сайтах, но вряд ли его можно увидеть в Китае, в основном потому, что Google недоступен в стране, потому что веб-канал использует канал Google FCM и должен иметь возможность получать сообщения с серверов Google. Однако в обычной сетевой среде доступ к Google невозможен.Если требуется нормальный доступ, соответствующий сервер должен работать на веб-сервере, который может обращаться к Google.

    1. Отправить Push

    Отправьте Push в браузер или клиент пользователя, этот процесс выглядит следующим образом:

    На стороне браузера, после регистрации Service Worker, будет возвращен зарегистрированный объект.При вызове метода pushManager.subscribe этого объекта браузер открывает всплывающее окно и спрашивает пользователя, разрешать ли уведомление о сообщении:

    Если вы нажмете «Разрешить», браузер запросит FCM сгенерировать информацию о логотипе подписки (подписки), а затем отправит подписку на сервер для ее сохранения, который используется для отправки Push текущему пользователю. Сервер использует информацию этой подписки для передачи API-интерфейса, предоставляемого веб-push, для отправки сообщения в FCM, а затем FCM отправляет его в соответствующий браузер. Затем браузер вызовет событие Push работника сервиса и позволяет работнику сервиса вызвать showNotification для отображения содержимого push. Операционная система отобразит этот Push:

    Установите этот флажок, чтобы перейти к указанному URL-адресу, чтобы просмотреть содержимое. Это весь процесс, а именно:

    (1) Браузер инициирует запрос и генерирует подписку

    После регистрации работника сервиса позвоните по подписке, чтобы узнать, разрешено ли пользователю получать уведомления, как показано в следующем коде:

    navigator.serviceWorker.register("sw-4.js").then(function(reg){
        console.log("Yes, it did register service worker.");
        if (window.PushManager) {
            reg.pushManager.getSubscription().then(subscription => {
                             // Если у пользователя нет подписки
                if (!subscription) {
                    subscribeUser(reg);
                } else {
                    console.log("You have subscribed our notification");
                }       
            });     
        }
    }).catch(function(err) {
        console.log("No it didn't. This happened: ", err)
    });

    Прежде чем инициировать подписку, проверьте приведенный выше код, чтобы увидеть, если вы уже подписались ранее. Если нет, то инициируйте подписку. Реализация subseUser, инициировавшего подписку, показана в следующем коде:

    function subscribeUser(swRegistration) {
        const applicationServerPublicKey = "BBlY_5OeDkp2zl_Hx9jFxymKyK4kQKZdzoCoe0L5RqpiV2eK0t4zx-d3JPHlISZ0P1nQdSZsxuA5SRlDB0MZWLw";
        const applicationServerKey = urlB64ToUint8Array(applicationServerPublicKey);
        swRegistration.pushManager.subscribe({
            userVisibleOnly: true,
            applicationServerKey: applicationServerKey
        })
             // Пользователь соглашается
        .then(function(subscription) {
            console.log('User is subscribed:', JSON.stringify(subscription));
            jQuery.post("/add-subscription.php", {subscription: JSON.stringify(subscription)}, function(result) {
                console.log(result);
            });
        })
             // Пользователь не согласен или не может создать
        .catch(function(err) {
            console.log('Failed to subscribe the user: ', err);
        });
    }

    Subscribe передает два параметра, один из которых userVisibleOnly, это указывает, должно ли сообщение быть видимым; если установлено значение невидимое, Chrome сообщит об ошибке:

    Chrome currently only supports the Push API for subscriptions that will result in user-visible messages. 
    
    You can indicate this by calling pushManager.subscribe({userVisibleOnly: true}) instead. 
    
    See https://goo.gl/yqv4Q4 for more details.

    Но на самом деле это не влияет, мы устанавливаем значение true, но вы можете использовать postMessage, чтобы уведомить страницу о выполнении соответствующей операции без получения фрейма после получения сообщения.

    Второй параметр applicationServerKey — это открытый ключ сервера, его можно использоватьПакет Node для веб-pushСоздайте, сначала установите один:

    npm install web-push --save

    Затем используйте следующий код для генерации:

    const webpush = require('web-push');
    //VAPID keys should only be generated only once.
    const vapidKeys = webpush.generateVAPIDKeys();
    console.log(vapidKeys.publicKey, vapidKeys.privateKey);

    Каждый прогон будет генерировать новую пару ключей, такую ​​как:

    publicKey:  BMgkd1qfOfI6vFBbxIFMgdxDGC6-j8NYTwF_MXOIZ-St9lPhhMdPuUyFfwg1DLY59WP0FEaX84ZJRwgztdpfBHs
    privateKey: LUeSF8DCv-NBxIfaeWeKTux858H45_V75vT0zZQLEbY

    Пока открытый ключ может быть сопоставлен, открытый ключ используется на стороне браузера для генерации подписки, а ключ используется на стороне сервера для отправки Push.

    Если пользователь соглашается с тем, что браузер запросит службу FCM для создания подписки, а затем выполнит тогда в цепочке обещаний, вернет подписку и затем отправит подписку на сервер для сохранения в тогда. И наоборот, если пользователь не согласен или не может подключиться к серверу FCM, будет выдано исключение:

    DOMException: Registration failed – push service error

    Пока открытый ключ может быть сопоставлен, открытый ключ используется на стороне браузера для генерации подписки, а ключ используется на стороне сервера для отправки Push.

    Если пользователь соглашается с тем, что браузер запросит службу FCM для создания подписки, а затем выполнит тогда в цепочке обещаний, вернет подписку и затем отправит подписку на сервер для сохранения в тогда. И наоборот, если пользователь не согласен или не может подключиться к серверу FCM, будет выдано исключение:

    DOMException: Registration failed – push service error

    Созданная подписка выглядит следующим образом:

    {"endpoint":"https://fcm.googleapis.com/fcm/send/ci3-kIulf9A:APA91bEaQfDU8zuLSKpjzLfQ8121pNf3Rq7pjomSu4Vg-nMwLGfJSvkOUsJNCyYCOTZgmHDTu9I1xvI-dMVLZm1EgmEH0vDA7QFLjPKShG86W2zwX0IbtBPHEDLO0WgQ8OIhZ6yTnu-S","expirationTime":null,"keys":{"p256dh":"BAdAo6ldzRT5oCN8stqYRemoihPGOEJjrUDL6y8zhdA_swao_q-HlY_69mzIVobWX2MH02TzmtRWj_VeWUFMnXQ=","auth":"SS1PBnGwfMXjpJEfnoUIeQ=="}}

    (2) Что такое FCM

    Официальный FCMЭто вводится так:

    Firebase Cloud Messaging (FCM) — это кроссплатформенное решение для обмена сообщениями, которое позволяет доставлять сообщения бесплатно и надежно.

    С помощью FCM вы можете уведомлять клиентские приложения о наличии новой электронной почты или других данных, которые можно синхронизировать. Вы можете отправлять уведомления, чтобы снова привлечь пользователей и удержать их. В случаях использования, таких как обмен мгновенными сообщениями, одно сообщение может доставить клиентскому приложению максимальную полезную нагрузку 4 КБ.

    FCM — это надежная платформа для обмена сообщениями, наибольшее преимущество которой заключается в том, что на терминалах IOS / Android / Web можно использовать один и тот же набор механизмов Push:

    Это значение очень важно, потому что Android push всегда был грязным. Некоторые домашние приложения используют сервис Push от Xiaomi, некоторые используют Baidu, а некоторые используют почтовых голубей Tencent. Эти Push должны запускать потоки в фоновом режиме и не могут Спящий режим, в результате которого многие потоки работают, когда телефон находится в спящем режиме, что заставляет телефон быстро потреблять энергию. Наконец, это напрямую привело к созданию в этом году Министерством промышленности и информационных технологий Android Unified Push Alliance. И у Apple есть единый механизм push: каждый отправляет Push на сервер Apple, а затем Apple отправляет его на соответствующее устройство Apple. Safari в настоящее время не поддерживает Service Workers, но можно использовать Apple Push.Недостаток в том, что этот тип push Apple говорит, что его нельзя использовать для отправки важных данных, а визуальный осмотр может отображать только кадр, нет способа обработать сообщение в фоновом режиме, не выдвинув кадр.

    (3) Отправить толчок

    Send push может использовать библиотеку web push, предоставляемую FCM, которая поддерживает несколько языков, включая Node.js / PHP и другие версии. Используйте Node.js для отправки Push следующим образом:

    const webpush = require('web-push');
     // Подать заявку на API-ключ fcm с учетной записью Google
    let fcmAPIKey = "AIzaSyDIAaIMTZeVmEorOJVBxxxx";
    let privateKey = "Wo8g-2YBCkDhMRPsvoxxxx";
     
    webpush.setVapidDetails(
        'mailto:[email protected]',
        publicKey,
        privateKey
    );
     
     // Извлекаем подписку пользователя из базы данных
    const pushSubscription = {"endpoint":"https://fcm.googleapis.com/fcm/send/ci3-kIulf9A:APA91bEaQfDU8zuLSKpjzLfQ8121pNf3Rq7pjomSu4Vg-nMwLGfJSvkOUsJNCyYCOTZgmHDTu9I1xvI-dMVLZm1EgmEH0vDA7QFLjPKShG86W2zwX0IbtBPHEDLO0WgQ8OIhZ6yTnu-S","expirationTime":null,"keys":{"p256dh":"BAdAo6ldzRT5oCN8stqYRemoihPGOEJjrUDL6y8zhdA_swao_q-HlY_69mzIVobWX2MH02TzmtRWj_VeWUFMnXQ=","auth":"SS1PBnGwfMXjpJEfnoUIeQ=="}};
     
     // выдвигаем данные
    const payload = {
             название: «Новая статья»,
             Тело: «Нажми и посмотри»,
        icon: '/html/app-manifest/logo_512.png',
        data: {url: "https://fed.renren.com"}
      //badge: '/html/app-manifest/logo_512.png'
    };
     
    webpush.sendNotification(pushSubscription, JSON.stringify(payload));

    После эксперимента, в большинстве случаев, эта задержка в основном составляет 1 с. После нажатия Enter браузер получит его, но иногда его не удастся отправить (проблема внутренней сети?). Если этот код должен быть запущен на сервере, то вам нужен сервер в Гонконге. Например, автор помещает данные и сервисы для отправки Push на сервер в Гонконге. Когда требуется Push, сервер в Северном Китае обращается к этому серверу для отправки запросов. Пока пользователь может подключиться к FCM, он может с радостью отправлять Push, если пользователь не может подключиться, то это невозможно.

    (4) получать push-сообщения

    Используйте Service Worker, работающий в фоновом режиме, для получения и прослушивания push-событий:

    this.addEventListener('push', function(event) {
        console.log('[Service Worker] Push Received.');
        console.log(`[Service Worker] Push had this data: "${event.data.text()}"`);
     
        let notificationData = event.data.json();
        const title = notificationData.title;
        // Может отправить сообщение на страницу уведомления
        //util.postMessage(notificationData); 
             // всплывающее окно сообщения
        event.waitUntil(self.registration.showNotification(title, notificationData));
    });

    В основном вызывайте showNotification, чтобы открыть окно, или используйте страницу уведомлений postMessage для соответствующей обработки. В ходе экспериментов, если пользователь закрывает браузер, если в течение периода закрытия происходит нажатие, он снова появляется, когда пользователь снова открывает браузер. Затем пользователь может щелкнуть всплывающее окно, чтобы открыть указанную страницу, для этого необходимо прослушать событие messagesclick:

    this.addEventListener('notificationclick', function(event) {
        console.log('[Service Worker] Notification click Received.');
     
        let notification = event.notification;
        notification.close();
        event.waitUntil(
            clients.openWindow(notification.data.url)
        );
    });

    Вызовите clients.openWindow, чтобы открыть новую страницу.

    Это в основном завершает строительство толчка,

    Краткое описание:

    Service Worker позволяет нам иметь Push-уведомления, такие как собственное приложение, на веб-стороне, делая веб-сторону все более похожей на нативное приложение, наряду с другими новыми функциями HTML5, такими какWebAssemblyУвеличить скорость работы,WebWorkerМногопоточная поддержка,база данныхПоддержка управления и поддержки больших объемов данных,WebsocketСвязь в реальном времени, WebRTC для мультимедийной передачи P2P, а также WebGL, новый WebVR и т. Д. Позволяют делать все больше и больше вещей на стороне браузера, опыт становится все более насыщенным, и это веб-приложение все еще является кроссплатформенным. Быстрое развитие веб-технологий заставляет нас верить, что у Интернета есть преимущество.

    I am trying to enable push notifications on my website using VAPID keys.
    When i include the gcm_sender_id and remove the applicationServerKey from the pushManager.subscribe method, it runs fine.
    Only when i enable VAPID keys and remove the gcm_sender_id from manifest.json file. i get the foloowing error.
    DOMException: Registration failed - push service error
    I am using Chrome browser.
    

    The applicationServerKey that i was using in the pushManager.subscribe method was somehow incorrect.
    It worked when i regenerated the keys in node using the following module.
    const webpush = require('web-push');
    const vapidKeys = webpush.generateVAPIDKeys()

    Related

    admin.credential.applicationDefault() errors when testing Firebase Cloud Function on build server: Could not refresh access token

    I have an automated test that runs the cloud function locally, signs in as an admin, and writes data to Firestore. Previously it has worked great with non-admin permissions, and now we are upgrading the cloud function to have admin permissions. I can run the test fine locally, and I can serve the function locally and hit it with Postman and it works fine.
    However, when running on our build server (Travis CI - paid) the function throws an error: 14 UNAVAILABLE: Getting metadata from plugin failed with error: Could not refresh access token.
    This is the first test that signs in, so it would be unexpected to already have an access token that is being refreshed.
    Locally, I have signed in to firebase using firebase login. I have already exported a login token for Travis using firebase login:ci and travis encrypt.
    Any thoughts on why we see this error on Travis and not locally?
    Here is the stack trace:
    14 UNAVAILABLE: Getting metadata from plugin failed with error: Could not refresh access token.
    at Object.<anonymous>.exports.createStatusError (node_modules/google-gax/node_modules/grpc/src/common.js:87:15)
    at Object.onReceiveStatus (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:1188:28)
    at InterceptingListener.Object.<anonymous>.InterceptingListener._callNext (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:564:42)
    at InterceptingListener.Object.<anonymous>.InterceptingListener.onReceiveStatus (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:614:8)
    at callback (node_modules/google-gax/node_modules/grpc/src/client_interceptors.js:841:24)
    I am initializing Firebase with:
    const admin = require('firebase-admin');
    admin.initializeApp({
    'credential': admin.credential.applicationDefault(),
    'databaseURL': firebaseConfig.databaseURL
    });
    
    Application Default Credentials (ADC) do not support Firebase login tokens (regardless of what you mean by that). For ADC to work in a dev/test environment, you should have one of the following things configured:
    Have a service account JSON file in the file system with the GOOGLE_APPLICATION_CREDENTIALS environment variable pointing to it.
    Have a ~/.config/gcloud/application_default_credentials.json file with a valid refresh token configuration. This file is usually managed by the gcloud and firebase CLIs.
    Local Functions emulator creates the file in (2), which is why the code works locally. You have to have one of the above configured for Travis.

    Firebase Cloud Messaging not work behind a proxy

    Is there a strategy to make FCM work under a proxy?
    I am trying to send push messages through NodeJS on a corporate network underneath a proxy.
    The FCM connection code is the default generated within the Console itself:
    var admin = require ("firebase-admin");
    var serviceAccount = require ("path/to/serviceAccountKey.json");
    admin.initializeApp ({
      credential: admin.credential.cert (serviceAccount),
      databaseURL: "https://my-firebase-url.firebaseio.com"
    });
    All proxy configuration variables are set up and working correctly for NPM and Node, but when the message is sent via admin.messaging (), send (message) realizes that the requests are sent directly without respecting the proxy , generating the following error message:
     
    Error: Credential implementation to initializeApp () via the
    "credential" property failed to fetch a valid Google OAuth2 access
    token with the following error: "connect ETIMEDOUT 172.217.29.173:443"
    When I run the same code out of a proxy everything works fine.
    I've run the forums searching for the same problem, but I have not found a solution. Within the FCM documentation I also did not find anything about it.
    Is anyone experiencing the same problem, or was it able to work out a solution?
    Thank you.

    Firebase Error — net::ERR_NAME_NOT_RESOLVED

    I am facing a strange issue with trying to update Firebase database. The following error is thrown on the chrome developer console:
    I am facing a strange issue with trying to update Firebase database. The following error is thrown on the chrome developer console:
    This issue happens only from the UAE Region. So I think it's because the network operator has blacklisted this URL
    s-usc1c-nss-109.firebaseio.com
    My question is:
    Is there a way I can tell the firebase API to use a different server for database ?
    
    firebaser here
    There is no API to control which domain name your Firebase Database is served from.

    Cloud Functions for Firebase sometimes have Invalid credential error

    Not appear every time, but sometimes this error appears in the log:
    FIREBASE WARNING: {"code":"app/invalid-credential","message":"Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "read ECONNRESET"."}
    Is there any way to handle this kind of error like retry?
    Or is it okay to ignore it?
    
    Just ensure that your machine time auto sync. and not manualy,
    And your XXX......json from firebase is the latest downloaded. (if you dont sure, download it again - and this file will be the newer one)
    that what helped me.
    
    I am also facing this issue. Looks like it retries and get the job done but cloud functions are taking time to process data.

    How to connect to Firebase by Firebase Admin against a proxy?

    Currently, I am using Firebase Admin SDK to connect a Firebase database in a NodeJS server side application.
    But I do not find an option to connect Firebase via proxy settings, or it can detect my system HTTP_PROXY environment variable.
    When I run the node script by node index.js, and got some timeout messages like this(I know in my work network, I can not connect to Firebase directly).
    Error: Credential implementation provided to initializeApp() via the "credential
    " property failed to fetch a valid Google OAuth2 access token with the following
    error: "connect ETIMEDOUT 216.58.200.237:443".
    at ....ervernode_modulesfirebase-adm
    inlibfirebase-app.js:74:23
    at process._tickCallback (internal/process/next_tick.js:103:7)
    I also use browser to access the firebase console via proxy, it works.
    But how to resolve this issue in NodeJS server side scripts?
    
    This error also happens if the date and time on your host machine where you run NodeJS process is not set right. Make sure to keep the server time synced.
    The full error message:
    Error: Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Error fetching access token: invalid_grant (Invalid JWT: Token must be a short-lived token and in a reasonable timeframe)". The most likely cause of this error is using a certificate key file which has been revoked. Make sure the key ID for your key file is still present at https://console.firebase.google.com/iam-admin/serviceaccounts/project. If not, generatea new key file at https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk.

    Я пытаюсь включить push-уведомления на своем веб-сайте с помощью ключей VAPID. Когда я включаю gcm_sender_id и удаляю applicationServerKey из метода pushManager.subscribe , он работает нормально.

    Только когда я включаю ключи VAPID и удаляю gcm_sender_id из файла manifest.json. я получаю следующую ошибку.

    DOMException: Registration failed - push service error
    

    Я использую браузер Chrome.

    2 ответа

    Лучший ответ

    ApplicationServerKey, который я использовал в методе pushManager.subscribe, был каким-то образом неправильным. Это сработало, когда я регенерировал ключи в узле, используя следующий модуль.

    const webpush = require('web-push');
    const vapidKeys = webpush.generateVAPIDKeys()
    


    2

    Kaushik Wavhal
    22 Фев 2017 в 10:36

    У меня есть приложение PWA, использующее Polymer 2.0 и firebase. Обмен сообщениями Firebase выдает ошибку.

     Firebase v3.18.4
     "polymer": "Polymer/polymer#^2.0.0",
     "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
     "polymerfire": "firebase/polymerfire#^2.2.0",
    
    Uncaught (in promise) DOMException: Registration failed - push service error
      Promise.then (async)      
      refreshToken  @   firebase-messaging.html:87
      activateMessaging @   firebase-messaging.html:125
      activate  @   firebase-messaging.html:243
      _bootstrapApp @   firebase-messaging.html:259
      runMethodEffect   @   property-effects.html:813
      runEffectsForProperty @   property-effects.html:159
      runEffects    @   property-effects.html:125
      _propertiesChanged    @   property-effects.html:1703
      _flushProperties  @   properties-changed.html:338
      _flushProperties  @   property-effects.html:1551
      _invalidateProperties @   property-effects.html:1523
      _setProperty  @   property-effects.html:1508
      Object.defineProperty.set @   properties-changed.html:150
      __appNameChanged  @   firebase-common-behavior.html:47
      runObserverEffect @   property-effects.html:214
      runEffectsForProperty @   property-effects.html:159
      runEffects    @   property-effects.html:125
      _propertiesChanged    @   property-effects.html:1703
      _flushProperties  @   properties-changed.html:338
      _flushProperties  @   property-effects.html:1551
      ready @   property-effects.html:1656
      ready @   element-mixin.html:546
      ready @   dir-mixin.html:140
      ready @   legacy-element-mixin.html:198
      ready @   class.html:232
      ready @   class.html:232
      ready @   class.html:232
      _enableProperties @   properties-changed.html:321
      connectedCallback @   properties-mixin.html:208
      connectedCallback @   element-mixin.html:532
      connectedCallback @   dir-mixin.html:150
      connectedCallback @   legacy-element-mixin.html:105
      _attachDom    @   element-mixin.html:588
      _readyClients @   element-mixin.html:561
      _flushClients @   property-effects.html:1565
      _propertiesChanged    @   property-effects.html:1699
      _flushProperties  @   properties-changed.html:338
      _flushProperties  @   property-effects.html:1551
      ready @   property-effects.html:1656
      ready @   element-mixin.html:546
      ready @   my-app.html:540
      _enableProperties @   properties-changed.html:321
      connectedCallback @   properties-mixin.html:208
      connectedCallback @   element-mixin.html:532
      (anonymous)   @   my-app.html:849
    

    Обмен сообщениями не работает в Chrome Desktop — [Google Chrome обновлен
    Версия 66.0.3359.139 (Официальная сборка) (64-разрядная)], а также в Chrome Android — [Версия приложения Chrome 66.0.3359.126

    Используемый код

    My-app.html (PolymerElement)

    <script src = "bower_components/firebase/firebase-app.js"></script>
    <script src = "bower_components/firebase/firebase-auth.js"></script>
    <script src = "bower_components/firebase/firebase-database.js">      
     </script>
     <script src = "bower_components/firebase/firebase-firestore.js">  
     </script>
     <script src = "bower_components/firebase/firebase-messaging.js">   
     </script>
     <script src = "bower_components/firebase/firebase-storage.js"> 
     </script>
    
      <firebase-app
        auth-domain = "[[configFirebase.authDomain]]"
        database-url = "[[configFirebase.databaseURL]]"
        api-key = "[[configFirebase.apiKey]]"
        storage-bucket = "[[configFirebase.storageBucket]]"
        messaging-sender-id = "[[configFirebase.messagingSenderId]]">
      </firebase-app>
    
      <firebase-auth
        id = "auth"
        user = "{{user}}"
        signed-in = "{{signedIn}}"
        status-known = "{{statusKnown}}"
        on-error = "_handleError">
      </firebase-auth>
    
      <firebase-messaging
            id = "messaging"
            token = "{{token}}"
            on-message = "handleMessage"
            active = "{{fcmActive}}"
            status-known = "{{fcmStatusKnown}}">
      </firebase-messaging>
    
       <firebase-document path = "/users/[[user.uid]]/token" data = ". 
        {{tokenDocVal}}">
       </firebase-document>
    
      class MyApp extends Polymer.Element {
           static get is() { return 'my-app'; }
    
        ready() {
          this.addEventListener('request-fcm-permission',        
             this._requestFcmPermission);
          super.ready();
        }
    
       _requestFcmPermission() {
          var fcm = this.$.messaging;
          var self = this;
          if (this.user && !fcm.active) {
            fcm.requestPermission()
              .then(function(){
                console.info('FCM permission granted');
                console.info('[[token]] ->' + self.token);
                self.tokenDocVal = self.token;
              })
              .catch(function(e){
                console.warn('FCM permission blocked', e);
              })
          }
        }
    
        ... other html code ....
    

    И
    firebase-сообщения-sw.js

        importScripts('/bower_components/firebase/firebase-app.js');
        importScripts('/bower_components/firebase/firebase-
           messaging.js');
    
       firebase.initializeApp({
        'messagingSenderId': '<project-ms-id>'
       });
    
       var messaging = firebase.messaging();
    
       messaging.setBackgroundMessageHandler(function(payload) {
       console.info('[firebase-messaging-sw.js] Received background 
         message 
          ', payload);
    
       var notificationTitle = payload.notification.title;
       var notificationOptions = {
       body: payload.notification.body,
       icon: '../images/fresh/android/android-launchericon-24-24.png'
        };
       return self.registration.showNotification(notificationTitle,
        notificationOptions);
       });
    
       Manifest.json includes "gcm_sender_id": "103953800507",
    

    Запросите помощь в решении проблемы. Я давно занимаюсь этой проблемой и не знаю, почему это происходит и как это исправить.

    Я также добавил комментарий к проблеме на GITHUB —
    https://github.com/firebase/firebase-js-sdk/issues/152

    Исходный код для репликации:
    Исходный код Git для репликации проблемы
    https://github.com/vinvantest/git_issue_firebase_login

    Понравилась статья? Поделить с друзьями:
  • Dom invalid character error
  • Dolphin emulator error
  • Doh server connection error ssl internal error
  • Doh server connection error ssl handshake timed out 6
  • Doh server connection error ssl handshake failed unable to get certificate crl 6