调用firebase.messaging.getToken()时出现“请求缺少身份验证凭据”错误

时间:2019-04-22 20:17:11

标签: javascript firebase firebase-cloud-messaging

我正在遵循tutorial向Web应用程序添加推送通知,包括使用VAPID密钥调用firebase.messaging.usePublicVapidKey。但是,当我致电getToken时,出现以下错误:

  

请求缺少必需的身份验证凭据。预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据。参见https://developers.google.com/identity/sign-in/web/devconsole-project

我已经在使用VAPID密钥,在本教程中的任何地方Google都没有说需要Google OAuth登录。我该如何解决?

 var messaging = firebase.messaging();
 messaging.usePublicVapidKey('redacted');

 function obtenerToken() {
         messaging.getToken().then(function (nuevoToken) {
                if (nuevoToken) {
                    token = nuevoToken;
                } else {
                    messaging.requestPermission().then(obtenerToken)
                        .catch(function (err) { console.log('La web no tiene permiso para recibir notificaciones ', err); });
                }
            }).catch(function (err) { console.log('Error al obtener token de Firebase ', err); });
        }
        obtenerToken();

4 个答案:

答案 0 :(得分:0)

您是否使用Firebase配置对象初始化了?

import firebase from "firebase/app";
import "firebase/messaging";

const firebaseConfig = {
  apiKey: "api-key",
  authDomain: "project-id.firebaseapp.com",
  databaseURL: "https://project-id.firebaseio.com",
  projectId: "project-id",
  storageBucket: "project-id.appspot.com",
  messagingSenderId: "sender-id",
};

if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig);
}

let messaging;
try {
  messaging = firebase.messaging();
  messaging.usePublicVapidKey("publicVapidKey");
} catch (e) {
  messaging = null;
}

您是否已将生产域的白名单设置为Google Developer Console中的浏览器API密钥和客户端ID?

您是否设置了firebase-messaging-sw.js文件?

喜欢这个。

// change your using firebase version
importScripts("https://www.gstatic.com/firebasejs/5.10.0/firebase-app.js");
importScripts("https://www.gstatic.com/firebasejs/5.10.0/firebase-messaging.js");

const messagingSenderId = "your sender id here";
firebase.initializeApp({ messagingSenderId });

try {
  const messaging = firebase.messaging();
} catch (e) {}

请参阅:

如果不起作用,则应尝试quickstart

答案 1 :(得分:0)

Managed to fix the issue. It turns out I copied the config from one project and the VAAPI key from another project. D'oh!

答案 2 :(得分:0)

清除您的站点数据!

经过一段时间的努力后,我清除了我的站点数据,并且再次没有发生auth错误。我们将Firestore与自定义身份验证令牌一起使用,以检索站点另一部分的实时数据,我怀疑这是造成问题的原因。

答案 3 :(得分:0)

出于不同的原因,我遇到了同样的问题。我们正在使用两个Firebase项目(一个开发人员,一个产品)。这两个应用程序在同一配置文件中配置。我刚刚了解到firebase.messaging()函数可以接受一个参数:初始化的Firebase应用程序。如果没有此参数,则在我的情况下,const devMessaging正在使用默认应用程序设置进行配置。这是固定代码:

export const app = firebase.initializeApp(config);
export const devApp = firebase.initializeApp(devConfig, "secondary");

const devMessaging = firebase.messaging(devApp);
devMessaging.usePublicVapidKey("this_is_private");

devMessaging.getToken().then(() => {
  // continue with the rest of the code 
});

资源:https://firebase.google.com/docs/reference/js/firebase.messaging