如何同时在单个Android应用程序中使用两个firebase项目?



我需要两个firebase项目为单个Android应用程序。一个项目是为用户,另一个是为管理员。由于某些原因,我正在使用管理员的firebase项目。

现在我需要连接这两个项目在管理应用程序,我想添加或修改firebase数据在两个firebase项目从管理应用程序的时间。

如何在Android中获得两个firebase项目的实例?

我已经看到一些关于这个的stackoverflow问题,但是他们没有同时得到两个实例。

有人能回答我的问题吗?

不要改变你的默认应用程序。正常连接你的应用程序到主firebase项目。此外,将应用程序注册到第二个firebase项目。现在,不要将google-services.json文件直接导入到android项目中,而是像下面这样创建一个Singleton类,并将其替换为第二个firebase项目详细信息。

public class MySecondaryProject {
private static FirebaseApp INSTANCE;
public static FirebaseApp getInstance(Context context) {
if (INSTANCE == null) {
INSTANCE = getSecondProject(context);
}
return INSTANCE;
}
private static FirebaseApp getSecondProject(Context context) {
FirebaseOptions options1 = new FirebaseOptions.Builder()
.setApiKey("AI...gs")
.setApplicationId("1:5...46")
.setProjectId("my-project-id")
// setDatabaseURL(...)      // in case you need firebase Realtime database
// setStorageBucket(...)    // in case you need firebase storage MySecondaryProject
.build();
FirebaseApp.initializeApp(context, options1, "admin");
return FirebaseApp.getInstance("admin");
}
}

现在,当你需要第二个项目实例时,你可以像下面这样使用:

FirebaseFirestore db = FirebaseFirestore.getInstance(); //- DEFAULT PROJECT
FirebaseFirestore secondDB = FirebaseFirestore.getInstance(MySecondaryProject.getInstance(this)); // - SECOND PROJECT

你必须遵循单例模式来避免重复的实例,否则应用程序会崩溃。您可以同时使用这两个实例。

有关更多详细信息,请访问一些有用的链接

  • 官方文档
  • 一些Stackoverflow问题
  • 其他来源形式:itone.com.vn

我想这将是你问题的完美答案。

简短的回答:不要。

您希望在单个项目上具有基于角色的访问控制,而不是管理员一个项目,用户一个项目。例如,管理员可以删除文件,而用户不能。

Firebase文档中提供了基于角色的访问的完整指南,以及一些变体。你的规则可能看起来像这样:

service cloud.firestore {
match /databases/{database}/documents {
match /stories/{story} {
function isSignedIn() {
return request.auth != null;
}
function getRole(rsc) {
// Read from the "roles" map in the resource (rsc).
return rsc.data.roles[request.auth.uid];
}
function isOneOfRoles(rsc, array) {
// Determine if the user is one of an array of roles
return isSignedIn() && (getRole(rsc) in array);
}
function isValidNewStory() {
// Valid if story does not exist and the new story has the correct owner.
return resource == null && isOneOfRoles(request.resource, ['owner']);
}
// Owners can read, write, and delete stories
allow write: if isValidNewStory() || isOneOfRoles(resource, ['owner']);
match /comments/{comment} {
// ...
}
}
}
}

如果您只有标准用户和管理员,则只需使用自定义声明。不要将角色写入Firestore。

它将使设置更容易,并且不会在规则中花费昂贵的get调用。

相关内容

  • 没有找到相关文章

最新更新