我尝试根据用户语言偏好来初始化 Firebase。
例如:
用户打开应用程序。
选择语言A:Flutter应该初始化项目A(配置等)。
当用户选择不同的语言时也是如此。
问题是 iOS 需要有默认的 GoogleService-Info.plist 文件。
在 Firebase 的动态初始化过程中,会创建一个应用程序,但默认应用程序来自默认文件,并且优先级高于项目 A。最终,创建了两个应用程序(DEFAULT 和 A)。这会导致 FirebaseMessaging 被分配给默认 Firebase 应用,而不是根据用户首选项分配给第二个应用。
根据消息传递.dart docs:
/// If [app] is not provided, the default Firebase app will be used.
// TODO: messaging does not yet support multiple Firebase Apps. Default app only.
在这种情况下,不可能支持 Firebase 配置文件的动态初始化,因为总会有一个从默认配置文件启动的默认应用程序。
在本机应用程序中,我可以创建许多 .plist 文件并调用FirebaseApp.configure(options: options)
您知道如何在 Flutter 中解决这个问题吗?
您在使用 FirebaseMessaging 时遇到的问题是由于 firebase_messaging 包尚不支持 .instanceFor() 造成的。否则,默认应用程序的存在不会成为问题,但默认应用程序被硬编码为 FirebaseMessaging 中唯一受支持的应用程序。
FirebaseAuth、FirebaseFirestore 和 FirebaseStorage 包中已添加对 .instanceFor() 的支持。如果 Firebase 消息传递
支持instanceFor(),您可以简单地传入辅助应用程序名称并使用该方法引用它。相反,该软件包中缺乏支持增加了不必要的复杂性。有关实例的更多信息,请参见此处:https://firebase.flutter.dev/docs/core/usage/#secondary-firebase-apps https://firebase.flutter.dev/docs/core/usage/#secondary-firebase-apps.
有关 fcm 缺乏多应用程序支持的更多信息可以在此处找到:https://github.com/FirebaseExtended/flutterfire/issues/5844 https://github.com/FirebaseExtended/flutterfire/issues/5844。其中提到了一种可能的解决方法(我个人没有尝试过),并且还有一个公开的 PRhttps://github.com/FirebaseExtended/flutterfire/pull/6549 https://github.com/FirebaseExtended/flutterfire/pull/6549目前仍处于草案阶段。
您也许能够使用风味来完成所需的功能,但我对它们不够熟悉,无法在该主题上提供帮助:https://flutter.dev/docs/deployment/flavors https://flutter.dev/docs/deployment/flavors.
我处于同样的情况,选择将所有应用程序用户订阅到默认应用程序实例,然后代表我的默认项目通过 firebase 云函数执行所有 fcm 调度,直到 firebase_messaging 包团队修复了其实现中的这个明显漏洞。
如果您有能力将所有数据包含在一个项目中,按语言集合组织并按规则隔离,您可能也需要考虑该选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)