Tengo la siguiente aplicación de mensajería trivial
// Import the functions you need from the SDKs you need import { initializeApp } from "firebase/app"; import { getMessaging, getToken } from "firebase/messaging"; // Your web app's Firebase configuration const firebaseConfig = { apiKey: "AI...Y", authDomain: "xyz.firebaseapp.com", databaseURL: "https://xyz.firebaseio.com", projectId: "xyz", storageBucket: "xyz.appspot.com", messagingSenderId: "441...38", appId: "1:....f", measurementId: "G-...", }; // Initialize Firebase const app = initializeApp(firebaseConfig); const vapidKey = "BLFWI5-...opE"; console.log("have app"); const messaging = getMessaging(app); console.log("have messaging", messaging); getToken({ vapidKey }) .then((res) => console.log("token", res)) .catch((err) => console.error(err)); haveApp y haveMessaging parecen registrarse correctamente, pero termino en getToken.catch con
TypeError: Cannot destructure property 'appConfig' of 'undefined' as it is undefined. at getKey2 (idb-manager.ts:104:19) at dbGet (idb-manager.ts:50:15) at getTokenInternal (token-manager.ts:52:30)De hecho, tengo una aplicación mucho más compleja que funciona con una configuración similar, pero quería volver a lo básico para comprobar que entendía algunas cosas fundamentales. Alguna idea.
Probé con el servidor integrado de VSCode usando importaciones de CDN, y ahora con vite usando importaciones locales. El error es siempre el mismo mensaje, aunque con diferentes stacktraces
¿Usando v9? Debe pasar la instancia de Messaging como primer argumento...
getToken(messaging, { vapidKey })Consulte https://firebase.google.com/docs/reference/js/messaging_.md#gettoken
Firma:
export declare function getToken(messaging: Messaging, options?: GetTokenOptions): Promise<string>;
Este es uno de los principales cambios entre las versiones 8 y 9. Todas las funciones que importa desde las diversas bibliotecas requieren que se pase una FirebaseApp u otra instancia.