我已经阅读了有关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,并在解决之前关闭了我的浏览器,实际上我的数据库不再一致,保存了一个没有相应列表的额外索引.
有什么建议?
我想在我的应用程序中创建一个简单的搜索,但在关于它的互联网上找不到任何东西,这比2014年更新.必须有更好的方法.有startAt和endAt函数,但它们不能按预期工作,并且区分大小写.你们是如何解决这个问题的?2016年该功能如何仍然不存在?
我已将firebase auth与我的Android应用程序集成.让我们说用户有邮件abc@abc.com.我想向用户添加一些额外的信息,如用户名,职业和地址.如何将用户auth表与我的Android应用程序连接起来呢?
我需要为此编写任何API吗?
android firebase firebase-authentication firebase-realtime-database
我的应用使用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缓存.我的问题是
persistence objective-c ios firebase firebase-realtime-database
我启动了我的第一个开放式存储库项目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
当我像下一个把值推到它时,我想要检索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) 在下面的示例中,有没有办法获取写入/ 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
我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
我根据说明在我的应用中集成了Firebase并添加了[FIRApp配置]; 但是在代码中,在编译应用程序时,我收到以下错误:
架构armv7的未定义符号:"_ OBJC_CLASS _ $ _ FIRApp",引用自:AppDelegate.o中的objc-class-ref ld:未找到架构armv7的符号
我正在尝试使用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
firebase ×10
firebase-realtime-database ×10
android ×3
javascript ×2
angular ×1
angularfire ×1
angularjs ×1
asynchronous ×1
ios ×1
nosql ×1
objective-c ×1
persistence ×1
web ×1