到目前为止,我还没有看到任何讨论或意识,Firebase确实通过他们返回的“快照”为每个特定数据记录提供了一个唯一的标识符 - 实际上是完整的URL - 即包装器数据记录(通过snapshot.val()访问)。通过对快照进行基本属性检查,我发现可以使用唯一的URL(参见下面的示例)。但是,由于某种原因,Firebase似乎每隔几天就会更改密钥的名称,导致我的应用程序崩溃。我必须进入并重新发现新的URL属性键并进行更改,以便它可以再次使用。
以下是我迄今为止看到关键更改的三个示例。每个值都相同,但密钥随时间不断变化(即:“Wb”,“Xb”,“bc”)。:
getMemberBySnapshot - snapshot has prop Wb with value https://prototype1.firebaseio.com/users/-IwohKfw1l5F3gFqyJJ5
getMemberBySnapshot - snapshot has prop Xb with value https://prototype1.firebaseio.com/users/-IwohKfw1l5F3gFqyJJ5
getMemberBySnapshot - snapshot has prop bc with value https://prototype1.firebaseio.com/users/-IwohKfw1l5F3gFqyJJ5
我已经阅读过Firebase的建议,即开发人员应该使用电子邮件地址,如果他们想要一个唯一的密钥(如果我的模型不使用电子邮件字段怎么办?如果用户想要更改他们的电子邮件怎么办?),或者Firebase建议使用检索所有现有记录,然后在客户端上搜索它们。这些解决方案都不令人满意。但我发现他们确实为“快照”中的每个数据记录提供了唯一的URL。为什么他们没有提供稳定的密钥,以便开发人员可以一致地调用它?
答案 0 :(得分:2)
Firebase.js是一个已编译的脚本。每次编译它们并发布新版本时,内部变量的名称都会改变,所以你绝对不应该依赖我们网站上没有记录的任何属性。
对于您的具体情况,您应该使用:
snapshot.ref().toString()
以获取网址。