这个问题非常明显,但是google文档没有一个直接的答案,我无法对其进行测试
让我描述一下情况:
1-我有一个数据库,只允许经过身份验证的用户查询
2-我自己对用户进行身份验证,但我使用Firebase用户为他们分配令牌
3- Firefire将令牌分配给用户时,其他线程可能会开始查询
代码:
//do my stuff to authenticate
//....
//....
FirebaseAuth.getInstance().signInWithCustomToken(token);
DatabaseReference fire = ((App) getApplication()).getFirebase();
fire.child("actions").orderByChild("added").startAt(from).addListenerForSingleValueEvent(new ValueEventListener(){/*do my stuff*/});
因此,在调用signInWithCustomToken
之后,我将始终只进行查询,但是在开始查询之前,我不会等待其结果... firebase是否在内部对其进行同步?
答案 0 :(得分:1)
signInWithCustomToken是异步的,并返回一个Task指示完成时间。在执行需要身份验证的查询之前,您的代码需要等待该任务完成。您现在写的内容无法按预期方式运行,因为在执行查询之前身份验证尚未完成。
这里的问题不是线程安全。您只需要正确地对Tasks进行异步编程即可。
Read about the Play Services tasks API. Learn more about using Tasks with Firebase.