Estoy desarrollando una aplicación React Native con Expo SDK 43 y Firebase 9.6.1, y mi aplicación no puede llamar a funciones en la nube que se ejecutan localmente en el emulador de FB. Puede llamar con éxito a las funciones de la nube si las implemento en producción, verificado al verificar los registros de FB. Aquí está el código relevante:
import { initializeApp } from 'firebase/app'; import { connectFunctionsEmulator, getFunctions, httpsCallable } from 'firebase/functions'; import Constants from 'expo-constants'; import firebaseConfig from './firebaseConfig'; const app = initializeApp(firebaseConfig); const functions = getFunctions(app); const host = `http://${Constants.manifest.debuggerHost.split(':')[0]}`; const port = 5001; connectFunctionsEmulator(functions, host, port); const helloWorld = httpsCallable(functions, 'helloWorld'); helloWorld();La consola muestra:
[Unhandled promise rejection: FirebaseError: internal] at http://192.168.1.166:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:173824:321 in _createSuperInternal at node_modules/@firebase/util/dist/index.esm2017.js:538:139 in createMockUserToken at http://192.168.1.166:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:188248:321 in _createSuperInternal at node_modules/@firebase/auth/dist/rn/phone-1d904137.js:7922:16 in tslib.__generator$argument_1 at node_modules/@firebase/auth/dist/rn/phone-1d904137.js:7995:0 in <global> at http://192.168.1.166:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:188924:37 in call$Obtiene la dirección IP y el puerto correctos y, de hecho, puedo visitar la URL en el navegador ( http://192.168.1.166:5001/MY-PROJECT/us-central1/helloWorld ) y ver que se está llamando la interfaz de usuario del emulador de FB. Simplemente no puedo hacer que la aplicación lo haga.
He podido usar el emulador de funciones antes con un Expo SDK y FB 8 más antiguos, pero prefiero quedarme con lo que tengo.
Aquí está el código para la función de nube real, aunque no creo que importe:
import * as functions from 'firebase-functions'; export const helloWorld = functions.https.onCall((data, context) => { console.log('something ran'); console.log(data); return data; });