所以我通过AngularFire调用一个firebase函数如下:
const response = await this.aFunctions.httpsCallable<void, ResponseType>('funcName')().toPromise();
这在部署到firebase(托管)时有效,但在本地环境(使用ionic serve
)中,它会抛出以下错误:
ERROR Error: Uncaught (in promise): FirebaseError: Messaging: We are unable to register the default service worker. Failed to register a ServiceWorker for scope ('http://localhost:8100/firebase-cloud-messaging-push-scope') with script ('http://localhost:8100/firebase-messaging-sw.js'): A bad HTTP response code (404) was received when fetching the script. (messaging/failed-service-worker-registration).
FirebaseError: Messaging: We are unable to register the default service worker. Failed to register a ServiceWorker for scope ('http://localhost:8100/firebase-cloud-messaging-push-scope') with script ('http://localhost:8100/firebase-messaging-sw.js'): A bad HTTP response code (404) was received when fetching the script. (messaging/failed-service-worker-registration).
我在这个项目中没有使用FCM。你知道为什么会发生这种情况吗?
4条答案
按热度按时间laawzig21#
在我的例子中,我通过注解掉messagingSenderId解决了这个问题。
我的情况有点不同和奇怪。我需要部署一个Angular项目到Firebase托管。
验证码:
错误:
环境:
我不知道原因,但希望它可以帮助你和其他人谁有类似的问题。
bjp0bcyl2#
好的,我通过在我的应用程序中导入Firebase来修复它。
//此导入加载firebase命名空间沿着所有类型信息。
import firebase from 'firebase/app';
//这些导入将各个服务加载到firebase命名空间中。
import 'firebase/auth';
import 'firebase/database';
我能够删除firebase-messaging-sw.js文件,所有onCall函数都可以正常工作。
我以前有一个混合:
import firebase from 'firebase;
import * as firebase from 'firebase'
标准化一切从'firebase/app'导入firebase+后续包你需要
import 'firebase/functions'
现在一切正常
cld4siwp3#
我希望我有一个更好的答案,但在我的情况下,我支持FCM,所以我需要提供
messagingSenderId
(虽然注解了没有修复的问题w/调用我的云函数)。看起来如果你支持FCM并且想使用
htttpsCallable
,你需要先获得FCM代币🤷♂️在我的例子中,在我的云函数调用解决了我的问题之前移动这个:
apeeds0o4#
如果你在使用firease 9模块和compat库之间的混合,它可能会导致一些不可想象的行为。
例如,如果您使用模块库进行FireBase消息传递,使用Compat库进行函数传递
然后在我的例子中,在注册一个FCM标记后调用一个函数会导致你所遇到的错误
因此,要么将您的所有FireBase库调用迁移到模块化版本,要么保留消息传递库的Compat版本