开发 SDK - 如何将 Firebase 事件发送到 SDK firebase 帐户,而不是应用程序帐户?
Developing an SDK - How to send Firebase events to SDK firebase account, not the app one?
Firebase 很棒,它在很多方面都有帮助,并且与 crashalytics、Google Analytics、Google Tag Manager 等完美集成。
我们正在构建一个移动 SDK,但是,您似乎只能在应用程序级别 link 到 Firebase(您不能初始化自己的 SDK 以发送到与应用程序的 Firebase 帐户不同的帐户).
作为 SDK 开发人员,是否有解决方法允许我将事件、崩溃报告......收集到仅与 SDK 相关的 Firebase 帐户,而不考虑使用 SDK 的应用程序?
非常感谢
一次可以初始化多个SDK实例。但是,您应该让您的 SDK 的消费者知道它正在这样做,并且他们应该有一个明确的方式来选择退出。
启动应用程序时,FirebaseInitProvider
will handle initialization of the default application instance. This default app instance has a name of "[DEFAULT]"
。
如果你想让第二个用户登录,使用一个单独的项目,使用一个辅助数据库等等——你可以只初始化另一个应用程序实例。重要的是(取自 docs),任何 FirebaseApp
初始化都必须只发生在应用程序的主进程中。不支持在主进程以外的进程中使用 Firebase,这可能会导致与资源争用相关的问题。
这是使用 FirebaseApp.initializeApp()
完成的,如下所示:
FirebaseApp nameApp = FirebaseApp.initializeApp(context, config, "name");
要复制默认实例以便您可以让多个用户登录,您可以使用:
FirebaseApp defaultApp = FirebaseApp.getInstance();
FirebaseApp secondaryApp = FirebaseApp.initializeApp(
defaultApp.getApplicationContext(),
defaultApp.getOptions(),
"secondary"
);
要完全使用单独的实例,您可以使用以下方法将配置加载到 FirebaseOptions 对象中:
FirebaseOptions sdkAppOptions = new FirebaseOptions.Builder()
.setApiKey(sdkApiKey)
.setApplicationId(sdkAppId)
.setDatabaseUrl(sdkDatabaseUrl)
.setGcmSenderId(sdkGcmSenderId)
.setProjectId(sdkProjectId)
.setStorageBucket(sdkStorageBucket)
.build();
FirebaseApp sdkApp = FirebaseApp.initializeApp(
sdkContext,
sdkAppOptions,
"com-example-mysdkproject" // <- use namespace as best practice
);
一旦您拥有 FirebaseApp
的实例,您就可以使用以下方式将其传递给其他服务:
FirebaseAuth sdkAuth = FirebaseAuth.getInstance(sdkApp);
// or
FirebaseApp sdkApp = FirebaseApp.getInstance("com-example-mysdkproject");
FirebaseAuth sdkAuth = FirebaseAuth.getInstance();
Firebase 很棒,它在很多方面都有帮助,并且与 crashalytics、Google Analytics、Google Tag Manager 等完美集成。
我们正在构建一个移动 SDK,但是,您似乎只能在应用程序级别 link 到 Firebase(您不能初始化自己的 SDK 以发送到与应用程序的 Firebase 帐户不同的帐户).
作为 SDK 开发人员,是否有解决方法允许我将事件、崩溃报告......收集到仅与 SDK 相关的 Firebase 帐户,而不考虑使用 SDK 的应用程序?
非常感谢
一次可以初始化多个SDK实例。但是,您应该让您的 SDK 的消费者知道它正在这样做,并且他们应该有一个明确的方式来选择退出。
启动应用程序时,FirebaseInitProvider
will handle initialization of the default application instance. This default app instance has a name of "[DEFAULT]"
。
如果你想让第二个用户登录,使用一个单独的项目,使用一个辅助数据库等等——你可以只初始化另一个应用程序实例。重要的是(取自 docs),任何 FirebaseApp
初始化都必须只发生在应用程序的主进程中。不支持在主进程以外的进程中使用 Firebase,这可能会导致与资源争用相关的问题。
这是使用 FirebaseApp.initializeApp()
完成的,如下所示:
FirebaseApp nameApp = FirebaseApp.initializeApp(context, config, "name");
要复制默认实例以便您可以让多个用户登录,您可以使用:
FirebaseApp defaultApp = FirebaseApp.getInstance();
FirebaseApp secondaryApp = FirebaseApp.initializeApp(
defaultApp.getApplicationContext(),
defaultApp.getOptions(),
"secondary"
);
要完全使用单独的实例,您可以使用以下方法将配置加载到 FirebaseOptions 对象中:
FirebaseOptions sdkAppOptions = new FirebaseOptions.Builder()
.setApiKey(sdkApiKey)
.setApplicationId(sdkAppId)
.setDatabaseUrl(sdkDatabaseUrl)
.setGcmSenderId(sdkGcmSenderId)
.setProjectId(sdkProjectId)
.setStorageBucket(sdkStorageBucket)
.build();
FirebaseApp sdkApp = FirebaseApp.initializeApp(
sdkContext,
sdkAppOptions,
"com-example-mysdkproject" // <- use namespace as best practice
);
一旦您拥有 FirebaseApp
的实例,您就可以使用以下方式将其传递给其他服务:
FirebaseAuth sdkAuth = FirebaseAuth.getInstance(sdkApp);
// or
FirebaseApp sdkApp = FirebaseApp.getInstance("com-example-mysdkproject");
FirebaseAuth sdkAuth = FirebaseAuth.getInstance();