标签: firebase-realtime-database

如何在Firebase中编写非规范化数据

我已经阅读了有关Stucturing Data的Firebase文档.数据存储很便宜,但用户的时间不是.我们应该优化get操作,并在多个地方写.

那么我可能会存储一个列表节点和一个列表索引节点,两者之间有一些重复的数据,至少是列表名称.

我正在使用ES6并在我的javascript应用程序中承诺处理异步流,主要是在第一次数据推送后从firebase获取ref密钥.

let addIndexPromise = new Promise( (resolve, reject) => {
    let newRef = ref.child('list-index').push(newItem);
    resolve( newRef.key()); // ignore reject() for brevity
});
addIndexPromise.then( key => {
   ref.child('list').child(key).set(newItem);
 });
Run Code Online (Sandbox Code Playgroud)

我知道我的应用程序只在客户端上运行,如何确保数据在所有地方保持同步

为了进行健全性检查,我在我的承诺中设置了一个setTimeout,并在解决之前关闭了我的浏览器,实际上我的数据库不再一致,保存了一个没有相应列表额外索引.

有什么建议?

javascript nosql web firebase firebase-realtime-database

31
推荐指数
2
解决办法
4719
查看次数

如何在Firebase数据库中进行简单的字符串搜索?

我想在我的应用程序中创建一个简单的搜索,但在关于它的互联网上找不到任何东西,这比2014年更新.必须有更好的方法.有startAt和endAt函数,但它们不能按预期工作,并且区分大小写.你们是如何解决这个问题的?2016年该功能如何仍然不存在?

android firebase firebase-realtime-database

31
推荐指数
3
解决办法
5万
查看次数

使用firebase添加额外的用户信息

我已将firebase auth与我的Android应用程序集成.让我们说用户有邮件abc@abc.com.我想向用户添加一些额外的信息,如用户名,职业和地址.如何将用户auth表与我的Android应用程序连接起来呢?

我需要为此编写任何API吗?

android firebase firebase-authentication firebase-realtime-database

31
推荐指数
3
解决办法
4万
查看次数

Firebase持久性,清除Firebase缓存

我的应用使用Firebase同步和恢复数据.我使用该setValue:withCompletionBlock:方法插入,更新和删除Firebase对象.只要存在CoreData保存,就会调用此方法,从而将所有本地更改同步到Firebase

- (void) setValue:(id)value withCompletionBlock:(void (^)(NSError* error, Firebase* ref))block;
Run Code Online (Sandbox Code Playgroud)

现在同步将所有本地数据上传到firebase,而restore则使用firebase数据替换本地数据.

- (void) observeSingleEventOfType:(FEventType)eventType withBlock:(void (^)(FDataSnapshot* snapshot))block;
Run Code Online (Sandbox Code Playgroud)

我观察FEventTypeValue并使用它FDataSnapshot来从Firebase获取数据并恢复本地数据.

所以一切都适合我,直到我开始persistence使用Firebase.

[Firebase setOption:@"persistence" to:@YES];
Run Code Online (Sandbox Code Playgroud)

现在persistence,当我打开时,当我更新时,比如将对象插入Firebase,然后恢复,恢复插入前的数据.即没有恢复新插入的对象.但是,如果我再次恢复,则会恢复插入的对象.删除对象时会发生同样的事情.当我第一次恢复时,删除的对象重新出现,当我再次恢复时,删除的对象消失.我可以看到通过Firebase数据视图正确插入和/或删除了Firebase对象.

我不确定我在这里做错了什么.我恢复时只有问题.我认为Firebase缓存导致此恢复问题.我正在考虑在恢复之前清除Firebase缓存.我的问题是

  1. 在恢复之前清除缓存是一个好方法吗?
  2. 如果是,请问如何清除Firebase缓存?
  3. 如果不是,您能否建议我恢复数据的最佳方法.

persistence objective-c ios firebase firebase-realtime-database

30
推荐指数
1
解决办法
8336
查看次数

安全规则中的Firebase速率限制?

我启动了我的第一个开放式存储库项目EphChat,人们立即开始充斥它的请求.

Firebase是否有办法对安全规则中的限制请求进行评级?我假设有一种方法可以使用请求的时间和先前写入的数据的时间,但在文档中找不到有关如何执行此操作的任何内容.

目前的安全规则如下.

{
    "rules": {
      "rooms": {
        "$RoomId": {
          "connections": {
              ".read": true,
              ".write": "auth.username == newData.child('FBUserId').val()"
          },
          "messages": {
            "$any": {
            ".write": "!newData.exists() || root.child('rooms').child(newData.child('RoomId').val()).child('connections').hasChild(newData.child('FBUserId').val())",
            ".validate": "newData.hasChildren(['RoomId','FBUserId','userName','userId','message']) && newData.child('message').val().length >= 1",
            ".read": "root.child('rooms').child(data.child('RoomId').val()).child('connections').hasChild(data.child('FBUserId').val())"
            }
          },
          "poll": {
            ".write": "auth.username == newData.child('FBUserId').val()",
            ".read": true
          }
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想对整个Rooms对象的db进行速率限制写入(和读取?),因此每秒只能生成1个请求(例如).

谢谢!

rate-limiting firebase firebase-security firebase-realtime-database

30
推荐指数
1
解决办法
8546
查看次数

获取firebase android中特定值的推送ID

当我像下一个把值推到它时,我想要检索firebase生成的id

火力地堡

我想检索"-KGdKiPSODz7JXzlgl9J"这个id我为getKey()尝试的那个电子邮件,但它返回"用户",当用户获取值时,它将整个对象从id返回到个人资料图片,这不会让我得到它作为我的应用中的用户对象

怎么解决这个?

    Firebase users = myFirebaseRef.child("users");
    users.orderByChild("email").equalTo("z@m.com").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            dataSnapshot.getKey();
            Log.d("User",dataSnapshot.getRef().toString());
            Log.d("User",dataSnapshot.getValue().toString());
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

            Log.d("User",firebaseError.getMessage() );
        }
    });
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-realtime-database

30
推荐指数
5
解决办法
7万
查看次数

从Cloud Functions for Firebase中的数据库触发器获取用户标识?

在下面的示例中,有没有办法获取写入/ messages/{pushId}/original的用户的uid?

exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
.onWrite(event => {
  // Grab the current value of what was written to the Realtime Database.
  const original = event.data.val();
  console.log('Uppercasing', event.params.pushId, original);
  const uppercase = original.toUpperCase();
  // You must return a Promise when performing asynchronous tasks inside a Functions such as
  // writing to the Firebase Realtime Database.
  // Setting an "uppercase" sibling in the Realtime Database returns a Promise.
  return event.data.ref.parent.child('uppercase').set(uppercase);
});
Run Code Online (Sandbox Code Playgroud)

javascript firebase firebase-realtime-database google-cloud-functions

30
推荐指数
2
解决办法
8706
查看次数

如何防止Firebase中出现重复的用户属性?

FirebaseSimpleLogin用来创建用户并处理身份验证.

当我尝试通过该$createUser()方法创建一个简单登录的新用户时,如果已经使用了电子邮件地址,firebase将不会创建用户.但是,$set()在创建它们之后,我还使用将创建的用户保存到我的firebase中,并将其user.uid用作密钥.当尝试写入数据库时​​,即使用户名不是唯一的,firebase也会保存记录,因为简单登录只需要电子邮件和密码.那么,当用户名不被用作用户对象的密钥时,如何验证用户名是否唯一?

我正在创建这样的新用户:

$scope.createUser = function() {
  $scope.auth.$createUser('trinker@gmail.com', 'password').then(function(user, err) {
    if (!err) {
      ref.child('users/' + user.uid).set({
        email: user.email,
        username: user.username
      });
      console.log("success!");
    }else{
      console.log(err.message);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

我的用户对象如下所示:

{
  "users" : {
    "simplelogin:28" : {
      "email" : "trinker@gmail.com",
      "username" : "jtrinker"
    },
    "simplelogin:30" : {
      "email" : "test@gmail.com",
      "username" : "jtrinker"
    }
  }
}

}
Run Code Online (Sandbox Code Playgroud)

我需要使用uid作为每个用户的密钥,但我仍然需要用户名是唯一的.

如果一个对象中的属性对于另一个对象内的属性不是唯一的,我怎么能阻止firebase保存记录?

angularjs firebase firebase-security angularfire firebase-realtime-database

29
推荐指数
1
解决办法
1万
查看次数

架构armv7的未定义符号:"_ OBJC_CLASS _ $ _ FIRApp"

我根据说明在我的应用中集成了Firebase并添加了[FIRApp配置]; 但是在代码中,在编译应用程序时,我收到以下错误:

架构armv7的未定义符号:"_ OBJC_CLASS _ $ _ FIRApp",引用自:AppDelegate.o中的objc-class-ref ld:未找到架构armv7的符号

firebase firebase-realtime-database

29
推荐指数
1
解决办法
2万
查看次数

在Angular2组件中找不到管道"async"

我正在尝试使用Angular 2和Firebase构建一个简单的博客,我在组件中使用异步管道时遇到问题.我在控制台中收到错误.

zone.js:344Unhandled Promise rejection:模板解析错误:找不到管道'async'("

[错误 - >] {{(blog.user | async)?. first_name}}

"):BlogComponent @ 6:3;区域:;任务:Promise.then;值:错误:模板解析错误:(...)错误:模板解析错误:无法找到管道"异步"("

blog.component.ts

import {Component, Input} from "@angular/core";

@Component({
  selector: 'blog-component',
  templateUrl: './blog.component.html',
  styleUrls: ['./blog.component.css'],
})

export class BlogComponent {
  @Input() blog;
}
Run Code Online (Sandbox Code Playgroud)

blog.component.html

<h1 class="article-title">{{ blog.title }}</h1>

<p>{{ (blog.user | async)?.first_name }}</p>
Run Code Online (Sandbox Code Playgroud)

app.component.ts

import { Component } from '@angular/core';
import { BlogService } from "./services/services.module";

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent {
  constructor(private blogService: BlogService) {}
  articles = this.blogService.getAllArticles();
}
Run Code Online (Sandbox Code Playgroud)

app.component.html …

asynchronous firebase firebase-realtime-database angular2-observables angular

29
推荐指数
8
解决办法
2万
查看次数