没有 google-services.json 和 GoogleService-Info.plist 的 Flutter Firebase

问题描述 投票:0回答:1

我的 pubspec.yaml 中有这些包:

  firebase_core: ^2.25.5
  firebase_crashlytics: ^3.4.16
  firebase_analytics: ^10.8.7
  firebase_messaging: ^14.7.17

(使用最新版本并没有改变我的情况)

我正在尝试通过

配置 Flutter Firebase
Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform
);

而不是使用 google-services.json(适用于 Android)和 GoogleService-Info.plist(适用于 iOS)中的值。 我的目标是使用 dart-define 参数或 .env 或类似的所有 Api 密钥、捆绑包 ID 等配置单个入口点(例如由 flutterfire_cli 生成的 DefaultFirebaseOptions,可以使用常规方法进行修改) Dart 语法,具有平台检查、风格检查等)。 然而,似乎不可能删除甚至填充这 2 个 Android 和 iOS 配置文件的一些存根值,因为 FB 插件在初始化期间无论如何都会查看它们。所以我得出的结论是, Firebase.initializeApp 方法中的 options 参数几乎没有任何作用,并且如果您的应用程序中不需要多个 FB App 实例(其中之一),则使用“Pure Dart”方法初始化 Firebase 是没有用的被视为“默认”,另一个应该具有由 name 参数传递的原始名称)。 flutterfire_cli可以与firebase_options.dart一起生成这些配置文件,但看起来我必须继续管理Android的google-services.json和iOS的GoogleService-Info.plist,就像没有Dart一样配置。

你可以问我为什么需要这个? 第一个答案是:“安全”。我的客户希望从源代码中隐藏 Firebase Api 密钥,尽管官方 FB 文档中提供的信息表明这些密钥被设计为公开的。从技术上讲,可以编写一个脚本将 Api 密钥粘贴到 google-services.jsonGoogleService-Info.plist 中,但这似乎很尴尬,因为这些文件受源代码控制,我团队中的每个开发人员都需要它们来启动该应用程序。 第二个答案是:方便。管理单个 dart 入口点而不是 2 个平台入口点会更舒服。

我尝试完全删除 google-services.jsonGoogleService-Info.plist,但应用程序无法构建。 我尝试从其中完全删除 api 关键字段或替换为一些无效字符串,但应用程序在运行时崩溃。 我查看了 firebase_coreFirebase.initializeApp 方法的实现,发现它以 _initializeCore() 开头,它会查看本机配置文件(source

android ios flutter firebase dart
1个回答
0
投票

您不需要使用给定的配置文件。 它们只是为了方便而提供。 您可以安排自己获取必要的配置值,将它们注入到您的应用程序构建中,然后在可选的 FirebaseOptions 参数中将它们传递给您自己的 initializeApp 。 来自链接的 API 文档:

await Firebase.initializeApp(
  name: 'SecondaryApp',
  options: const FirebaseOptions(
    apiKey: '...',
    appId: '...',
    messagingSenderId: '...',
    projectId: '...',
  )
);
© www.soinside.com 2019 - 2024. All rights reserved.