FirebaseApp名称为[DEFAULT]的应用不存在。

85

迁移到 Firebase Cloud Messaging 后,打开我的应用程序时会崩溃,并抛出以下错误:java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. 我已经放置了新的 google-services.json 文件并更新了我的 SDK。

这是我的 MainActivity:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

//Check Google play service
    GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
    int resultCode = googleAPI.isGooglePlayServicesAvailable(this);

    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                    PLAY_SERVICES_RESOLUTION_REQUEST).show();
        } else {
            Log.e(LOG_TAG, "This device is not supported.");
            finish();
        }
    }

    Log.i(TAG, "InstanceID token: " + FirebaseInstanceId.getInstance().getToken());

}
}
14个回答

115
请务必仔细检查,您已添加了。
apply plugin: 'com.google.gms.google-services' 

在应用的gradle文件底部添加此内容,然后进行清理和重建项目。


我从我的应用gradle中删除了apply plugin: 'com.google.gms.google-services',但在我的MainActivity调用FirebaseInstanceId.getInstance().getToken()时遇到了一个新错误,导致我的应用程序崩溃。 - natsumiyu
1
我的错...我需要添加 apply plugin: 'com.google.gms.google-services' 吗?尝试添加它时,我仍然遇到错误。它说“未找到类“com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor””。 - natsumiyu
嗨Mori,您现在可以忽略此错误,他们将在下一个版本中修复此问题。这是Firebase团队的说法 :)。 - Venkatesan
当我添加这个时,我得到了以下错误提示:"Error:Execution failed for task ':app:mergeModernDebugResources'.
[string/google_api_key] /<path>/app/src/main/res/values/defaults.xml [string/google_api_key] /<path>/app/build/generated/res/google-services/modern/debug/values/values.xml: Error: Duplicate resources"
我在FCM的设置或迁移指南中也没有看到这一步骤。你有我可能错过的链接吗?
- C Nick
1
Flutter可能需要像答案中建议的那样执行flutter clean&flutter run - Nae
1
如果我使用Firebase Java Admin呢?(Java后端而不是Android客户端应用程序) - user924

21

不确定这是否与此相关。但是有另一种情况会导致崩溃。


如果您的应用程序具有服务(使用不同进程),并且您正在创建自己的Application类,则服务和前台应用程序将使用相同的Application class(而不是相同的实例)进行初始化。现在,当我使用com.google.firebase:firebase-crash依赖项处理崩溃时,它会创建一个后台服务your.app.packagename:background_crash。由于某种原因,这会在我的应用程序上引发崩溃。具体来说,因为在我的Application类中,我像这样调用:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

我假设在使用我们的Application类进行初始化时,后台服务未能正确初始化Firebase。为了解决这个问题,我做了以下操作:

if (!FirebaseApp.getApps(this).isEmpty())
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

这种情况也会发生在广告中。如果用户点击了广告,然后返回应用程序,Firebase 将不再可用。 - theJosh
@Codevalley,在我的情况下,还有另一个进程(Adobe Creative SDK Image Editor)名为app:editor。它正在使用相同的应用程序类,因此尝试从不存在的Firebase应用程序获取令牌。在获取令牌之前进行检查解决了我的问题。非常感谢! :) - rzaaeeff

12

我遇到了类似的问题,对我来说是清单合并中的一个错误/问题。我发现因为我应用程序的清单文件中有 tools:node="replace" 标签,导致 FirebaseInitProvider 没有被注入到最终的清单文件中。所以请尝试删除这个 XML 标签,FirebaseInitProvider 就会被注入,Firebase 就可以正确地初始化了。


你能否更新一下你的回答,以便那些不太熟悉合并工具的人能够理解?@jmodrako - Shubham AgaRwal
目前我已经更新为使用tools:replace="android:name"而不是tools:node="replace"。希望这有所帮助。 - Shubham AgaRwal

11

build.gradle文件:

buildscript {
    repositories {
        jcenter()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

\app\build.gradle 文件:

apply plugin: 'com.android.application'

android {
    ..
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    ..
    compile 'com.google.firebase:firebase-core:9.0.2'
    compile 'com.google.firebase:firebase-messaging:9.0.2'
}

apply plugin: 'com.google.gms.google-services'

错误:(90,0)找不到ID为“com.google.gms.google-services”的插件。 - Gilberto Ibarra

10

@jmodrako的答案解决了我的问题...将tools:node="replace"改为tools:node="merge"

解释...在AndroidManifest.xml上

来自:

<application
...
tools:node="replace">

目标

<application
...
tools:node="merge">

库主题合并问题? 使用tools:replace="android:theme"解决构建问题。

感谢https://dev59.com/_loU5IYBdhLWcg3wjHZL#38060272的贡献。


2
请核实以下所有配置:
1- Firebase项目设置: google-services.json是否正确? enter image description here 2- 添加Firebase SDK enter image description here 3- 清理并重新构建您的项目
希望这能帮到您!

2

将Firebase的初始化移到Application类的onCreate方法中。 此外,如果您已经启用了离线持久性,则FirebaseDatabase.getInstance().setPersistenceEnabled(true)应该在任何其他初始化之前调用。


误点了踩,现在不让我点赞了 :( - Developine

2
请将以下行添加到app/build.gradle文件中。
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

在项目的 build.gradle 文件中添加以下行:
classpath 'com.google.gms:google-services:4.3.3'

0

在 Firebase 中注册您的应用程序并将 google-services.json 复制到您的根项目。

classpath 'com.google.gms:google-services:3.1.0' 应用于您的根 build.gradle。

apply plugin: 'com.google.gms.google-services' 应用于您的项目 gradle。


0

将构建操作(GoogleServicesJson)更改为文件名Google-Services.Json。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接