我正在开发一个聊天库,我想在其中显示登录用户的对话。制作库的原因是我想将它集成到多个项目中。
我现在面临的问题是,dat$id <- row.names(dat)
表示用户未登录(FirebaseAuth
始终返回FirebaseAuth.getInstance(mFirebaseApp).getCurrentUser()
),即使用户在应用内进行了身份验证
模块/库如何知道用户已通过身份验证?
我正在尝试以下代码:
null
答案 0 :(得分:8)
您需要添加一个侦听器/观察者来获取每个身份验证状态更改的用户标识。
FirebaseAuth.getInstance().addAuthStateListener(firebaseAuth -> {
if (firebaseAuth.getCurrentUser() == null) {
your code goes here
}
});
https://firebase.google.com/docs/auth/android/manage-users
另一种方法是登录获取用户ID并存储在LocalStorage中,同时注销清除localstorage,这样您就可以在离线状态下维护。
答案 1 :(得分:1)
在Android中,FirebaseApp
对象管理所有Firebase API的配置。这在应用程序启动时由内容提供商自动初始化,您通常永远不需要与其进行交互。但是,当您想要从单个应用程序访问多个项目时,您需要一个独特的FirebaseApp来单独引用每个项目。
在初始化第二个项目之前,请确保已初始化Firebase defaultApp实例。从您的基础/主项目的Application类调用FirebaseDatabase.getInstance()
- OnCreate(),如下所示,
// Primary project database
FirebaseDatabase database = FirebaseDatabase.getInstance();
要从库项目连接第二个项目数据库,请使用辅助配置初始化FirebaseApp
以及一些不同的标识符(例如:“secondary”),如下所示,
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("1:530266078999:android:481c4ecf3253701e") // Required for Analytics.
.setApiKey("AIzaSyBRxOyIj5dJkKgAVPXRLYFkdZwh2Xxq51k") // Required for Auth.
.setDatabaseUrl("https://project-1765055333176374514.firebaseio.com/") // Required for RTDB.
.build();
FirebaseApp.initializeApp(this /* Context */, options, "secondary");
然后检索secound App
// Retrieve the second app.
FirebaseApp secondApp = FirebaseApp.getInstance("secondary");
// Get the database of second app.
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(secondApp);
注意:在您的图书馆模块中,请务必参考您的图书馆 第二个项目。更好地创建单例引用
// Make singleton reference
public static FirebaseApp getFirebaseApp() {
if (mFirebaseApp == null) {
Context context = getAppContext();
FirebaseOptions options = getLibraryModuleFirebaseOptions();
mFirebaseApp = FirebaseApp.initializeApp(context, options, "library");
}
return mFirebaseApp;
}
有关详细信息,请参阅Firebase博客文章here
希望这会对你有所帮助..