【问题标题】:Enable Firebase offline persistence for web after Firebase object already being accessed在 Firebase 对象已被访问后启用 Web 的 Firebase 离线持久性
【发布时间】:2019-09-30 21:40:28
【问题描述】:

遇到错误
访问 Firebase 方法后尝试为 Web 启用离线持久性会输出以下错误:

You can only call enablePersistence() before calling any other methods on a Firestore object.

背景:
在初始 PWA 加载时,用户拒绝启用离线支持。因此,对于这种情况,我正在寻找一种允许之后启用它的可能性。

个人想法:
我相信应该可以强制使用当前使用的框架重新渲染应用程序,并临时存储将要求 firebase 启用离线支持的标志。但我想知道是否有一些 Firebase SDK 提供了一种解决方案,可以实现更优雅的方式。

附注
另外我想知道一旦启用了离线持久性选项,是否可以相信每次用户打开 PWA 时都会启用离线持久性,除非从设备中删除了 PWA 相关数据

【问题讨论】:

    标签: firebase progressive-web-apps


    【解决方案1】:

    您的意思可能是 Cloud Firestore,因为 Firebase 仅针对移动开发而非 Web 具有离线持久性。

    正如错误提示的那样,在导入/引用 Firestore 时,您应该首先调用 enablePersistance()
    我在 Angular 应用程序中使用它,并在我的 appModule 中调用它:

    @NgModule({
        declarations: [AppComponent, CardComponent],
        imports: [
            BrowserModule,
            AppRoutingModule,
            AngularFireModule,
    
            AngularFirestoreModule.enablePersistence(),  <--
    
            AngularFireAuthModule,
            AngularFirestoreModule,
            HttpClientModule
        ],
        providers: [{ provide: FirebaseOptionsToken, useValue: environment.firebaseConfig }],
        bootstrap: [AppComponent],
    })
    export class AppModule {}
    

    启用离线持久性后,Firestore 会将所有访问的文档缓存到定义的缓存限制(默认为 40 MB,但您可以更改此值)。 如果达到缓存限制,Firestore 将删除最旧的文档。

    如果您想了解有关启用full offline CRUD operations for PWAs, have a look at here 的更多信息。

    很酷的是,离线时所做的所有更改都将通过 Firestore 自动与服务器同步,开箱即用。


    更新

    如果您的应用处理敏感信息并且您想提供额外的安全性,那么您必须找到一种方法来解决 Firestore 的要求,愿意启用离线持久性作为第一种方法。
    也许您应该考虑一下删除导入的 Firebase 模块然后使用 enablePersistence() 再次导入它的方法。

    以 Node.js 为例:

    var name = require.resolve('moduleName');
    
    delete require.cache[name];
    

    【讨论】:

    • 感谢您的建议。我过去问过一个问题 stackoverflow.com/questions/57999550/… 。根据它,通常不建议默认启用对 Web 的离线支持。所以我会提示一个弹出窗口,询问用户他或她是否信任该设备来启用它
    • 但如果用户拒绝它,我想提供一种可能性,以便将来从应用程序的某种设置部分启用它。所以我想知道在firestore对象已经被操纵之后是否有办法做到这一点。
    猜你喜欢
    • 2017-04-05
    • 2020-07-07
    • 1970-01-01
    • 2020-05-31
    • 2019-11-22
    • 2021-10-27
    • 2019-05-22
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多