В запросе отсутствует ошибка необходимых учетных данных аутентификации: Firebase Cloud Messaging - PullRequest
1 голос
/ 06 августа 2020

Я реализую функцию веб-уведомлений в React + Firebase. Несмотря на успешное получение токена веб-уведомления, ошибка возникает при отправке с помощью Firebase Cloud Messaging.

Ошибка ниже:

Обмен сообщениями: возникла проблема при подписке пользователя на FCM: В запросе отсутствуют необходимые учетные данные для аутентификации. Ожидаемый токен доступа OAuth 2, логин Cook ie или другие действительные учетные данные для аутентификации. См. https://developers.google.com/identity/sign-in/web/devconsole-project.

Код Firebase (React):

import * as firebase from 'firebase/app'
import 'firebase/analytics'
import 'firebase/auth'
import 'firebase/database'
import 'firebase/firestore'
import 'firebase/functions'
import 'firebase/storage'
import 'firebase/messaging'

const firebaseConfig = {
  apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
  authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
  databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL,
  projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
  storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.REACT_APP_FIREBASE_APP_ID,
  measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID,
}

// Initialize Firebase
firebase.initializeApp(firebaseConfig)
firebase.analytics()

// comment out when debug
// firebase.firestore.setLogLevel('debug')

export const database = firebase.database()
export const firestore = firebase.firestore()
export const functions = firebase.functions()
export const storage = firebase.storage()

// comment out when use emulator
// functions.useFunctionsEmulator('http://localhost:5001')

export default firebase
firestore
  .doc(`users/${currentUserUid}`)
  .get()
  .then((userDocSnap) => {
    if (!userDocSnap.exists) return
    if (userDocSnap.data().webNotification) return

    if (firebase.messaging.isSupported()) {
      const messaging = firebase.messaging()
      messaging.usePublicVapidKey(
        process.env.REACT_APP_FIREBASE_PUBLIC_VALID_KEY,
      )
      messaging
        .requestPermission()
        .then(() => {
          messaging
            .getToken()
            .then((token) => {
              userDocSnap.ref.update({
                webNotification: token,
              })
            })
            .catch((err) => {
              console.log('Failed to get token', err)
            })
        })
        .catch((err) => {
          console.log("Can't get permission", err)
        })
    }
  })

Pu sh уведомление (функция)

const sendWebNotification = (data) => {
  try {
    const headers = {
      headers: {
        'Content-Type': 'application/json',
        Authorization: 'Bearer ' + webApiKey,
      },
    }
    axios
      .post('https://fcm.googleapis.com/fcm/send', data, headers)
      .catch((err) => {
        console.log('Error:', err)
      })
  } catch (error) {
    console.log(error)
  }
}
...