使用Firebase离线时观察员挂起

时间:2016-09-15 17:57:16

标签: ios firebase firebase-realtime-database offline

我正在尝试为我们的iOS应用添加离线功能(简单地说,这是一个管理用户和项目的应用),它依赖于Firebase。这是使用Swift 3.0。我按照指南进行了以下操作:

  1. 在FIRApp.configure()之后立即将此添加到我的应用程序委托:

    FIRDatabase.database()。persistenceEnabled = true

  2. 在users / userKey和所有用户的项目/ projectKey节点上调用keepSynced(true)。

  3. 该应用程序在线(显然)工作正常,并保持同样良好的离线工作,即使我在断开互联网时重新启动它。当我在离线时创建新项目时出现问题。我使用以下内容创建一个新项目:

    let projectKey = FIRDatabase.database().reference(withPath: "projects").childByAutoId().key
    let logsKey = FIRDatabase.database().reference(withPath: "projects").child(projectKey).child("logs").childByAutoId().key
    FIRDatabase.database().reference().updateChildValues([
        "projects/\(projectKey)/key1" : value1,
        "projects/\(projectKey)/key2" : [
            "subkey1" : subvalue1,
            "subkey2" : subvalue2
        ],
        "projects/\(projectKey)/key3/\(logKey)" : [
            "subkey3" : subvalue3,
            "subkey4" : subvalue4
        ]
    ]) { error, ref in
        if error != nil {
            print("Error")
            return
        }
    }
    

    在项目创建之后,如果我尝试在“projects / projectKey / key1”或“projects / projectKey / key2”上调用observeSingleEvent,一切都很好。但是,在“projects / projectKey / key3 / logKey”上调用相同的函数永远不会触发阻塞/回调 - 只有在连接回来时才会调用它。

    我已启用FIRDatabase日志记录(确认发生本地写入)以查找提示但似乎无法找出问题。

    我有什么遗失的吗?

    注意:使用最新的Firebase iOS SDK(3.5.2)。

    编辑:如果我扩展深层链接似乎工作正常:

    let projectKey = FIRDatabase.database().reference(withPath: "projects").childByAutoId().key
    let logsKey = FIRDatabase.database().reference(withPath: "projects").child(projectKey).child("logs").childByAutoId().key
    FIRDatabase.database().reference().updateChildValues([
        "projects/\(projectKey)" : [
            "key1" : value1,
            "key2" : [
                "subkey1" : subvalue1,
                "subkey2" : subvalue2
            ],
            "key3" : [
                logKey : [
                    "subkey3" : subvalue3,
                    "subkey4" : subvalue4
                ]
            ]
        ]
    ]) { error, ref in
        if error != nil {
            print("Error")
            return
        }
    }
    

    这可能是Firebase在离线时管理其本地缓存状态的方式中的错误吗?就好像它不知道在updateChildValues中使用深层链接创建的中间密钥。

0 个答案:

没有答案