我的flutter应用程序与firebase集成,一切都很好,但当我将firebase项目迁移到客户端firebase控制台时,添加了他的谷歌服务文件,更改了DefaultFirebaseOption.currentplatform文件凭据,但每当我尝试运行应用程序时,我都会出错。我的主要方法如下:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
token = await FirebaseMessaging.instance.getToken();
Provider.debugCheckInvalidValueType = null;
runApp(const MyApp());
}
错误为:
E/flutter(28330(:[错误:flutter/lib/ui/ui_start_state.cc(209(]未处理的异常:[core/dupplicate-app]一个名为"的Firebase应用程序;[DEFAULT]";已存在。
我在这里搜索,从这里找到了一个解决方案,并更新了我的主要方法,如下所示:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (Firebase.apps.isNotEmpty) {
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
}else{
Firebase.app()
}
//await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
token = await FirebaseMessaging.instance.getToken();
Provider.debugCheckInvalidValueType = null;
runApp(const MyApp());
}
但这次我没有出错,但我的应用程序UI没有显示,我只看到黑屏。我已经尝试解决这个问题4到5个小时了,但没有找到解决方案。任何帮助都将不胜感激。
更新我在两个场景中都提供了name参数,我的应用程序在第一次安装时运行良好,但当我重定向或关闭应用程序并重新运行时,我遇到了与上述情况相同的错误。
我在使用flatterfire CLI按口味创建firebase应用程序时遇到了类似的问题。我意识到flatterfire在不同的项目中创建了同名的应用程序。然后我尝试了两种方法,都奏效了。
-
1st:手动更改每个firebase项目中的应用程序名称。
-
第二:初始化时添加参数名称,例如在main_dev.dart 中
await Firebase.initializeApp( name: "dev project", options: DefaultFirebaseOptions.currentPlatform);
添加名称参数是为了避免问题,但并不能解决真正的问题。
在我的案例(Flutter(中,我一直在使用firebase_options.dart生成的文件,而在每个android风格目录中仍然有一些旧的谷歌服务.json文件
android/app/src/<flavor>/google-services.json
在ios:上也是如此
ios/Runner/<flavor>/GoogleService-Info.plist
删除那些旧文件可以解决问题。
如果没有删除,请在之后进行"Flutter clean"并手动删除android/build
在处理firebase项目和升级包时出错。
修复
flutter clean
flutter pub get
然后重新构建项目。
我在不同的项目中有相同名称的应用程序,这似乎不会导致错误。
在我的案例中,不正确的GoogleService-Info.plist从下载文件夹链接到了xCode中。但正确的是在Runner文件夹中,所以我认为这没关系。所以在Build Phases -> Copy Bundle Resources
中检查GoogleService-Info.plist是否存在,路径是否正确。
这可能发生在过时的谷歌服务文件中,或者使用flutter fire工具从项目切换到另一个项目
android/app/src/<flavor>/google-services.json
ios/Runner/<flavor>/GoogleService-Info.plist
lib/firebase_options.dart
然后写这些命令
1-flutter clean
2-然后安装flatterfire cliflutterfire configure
3-flutter pub get
这应该可以解决问题
c在await Firebase.initializeApp(.....
中挂起带有name的名称将导致firebase服务出现问题
这对我有效
if (Platform.isAndroid) {
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
} else if (Platform.isIOS) {
await Firebase.initializeApp();
}
尝试
1(颤振清洁&flutter pub获取
2(删除google-services.json并从firebase下载新的google-services.json。如果您正在使用cli,请再次运行fluttefire configure
。
如果您使用的是flatterfire,您应该匹配FirebaseOptions和google-services.json
firebase_options.dart
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'your_api_ky',
appId: 'your_api_id',
messagingSenderId: '...',
projectId: '...',
storageBucket: '...',
);
谷歌服务.json
"project_info": {
"project_number": "...",
"project_id": "...",
"storage_bucket": "..."
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "your_api_id",
"android_client_info": {
"package_name": "com.app_your"
}
},
"oauth_client": [
{
"client_id": "",
"client_type": 3
}
],