默认FirebaseApp未初始化

时间:2016-10-17 08:19:24

标签: android firebase-remote-config

我们在刚刚添加了Firebase远程配置的Android应用中看到了Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.消息的一些例外情况。

堆栈跟踪如下:

Fatal Exception: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.app. Make sure to call FirebaseApp.initializeApp(Context) first.
       at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
       at com.google.firebase.remoteconfig.FirebaseRemoteConfig.getInstance(Unknown Source)
       at com.example.app.fragments.SomeFragment.updateFooter(SourceFile:295)
       at com.example.app.fragments.SomeFragment.onCreateView(SourceFile:205)
       at android.support.v4.app.Fragment.performCreateView(SourceFile:2080)
       at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1108)
       at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1290)
       at android.support.v4.app.BackStackRecord.run(SourceFile:801)
       at android.support.v4.app.FragmentManagerImpl.execSingleAction(SourceFile:1638)
       at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(SourceFile:679)
       at android.support.v4.app.FragmentPagerAdapter.finishUpdate(SourceFile:143)
       at android.support.v4.view.ViewPager.populate(SourceFile:1240)
       at android.support.v4.view.ViewPager.populate(SourceFile:1088)
       at android.support.v4.view.ViewPager.setAdapter(SourceFile:542)
       at com.example.app.SomeActivity.onSomeAsyncCallback(SourceFile:908)
       at com.example.app.SomeDataRetriever.onAsyncHttpCompleted(SourceFile:72)
       at com.example.app.io.AsyncHttp.onPostExecute(SourceFile:141)
       at com.example.app.io.AsyncHttp.onPostExecute(SourceFile:19)
       at android.os.AsyncTask.finish(AsyncTask.java:679)
       at android.os.AsyncTask.access$500(AsyncTask.java:180)
       at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:696)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:150)
       at android.app.ActivityThread.main(ActivityThread.java:5665)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689)

这是版本9.6.1,我们还使用其他Firebase组件:

compile 'com.google.firebase:firebase-ads:9.6.1'
compile 'com.google.firebase:firebase-config:9.6.1'
compile 'com.google.firebase:firebase-invites:9.6.1'
compile "com.google.firebase:firebase-messaging:9.6.1"

我可以看到from the documentationthe Javadoc我们不应该在我们的案例中进行任何手动初始化。

在各种设备的Android 4-6上发生异常。

修改

我看到这个问题引起了一些关注。我认为这个解释对你们中的一些人来说很有意思:https://firebase.googleblog.com/2016/12/how-does-firebase-initialize-on-android.html

30 个答案:

答案 0 :(得分:265)

确保添加到根级build.gradle

buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

然后,在您的模块级Gradle文件(通常是app / build.gradle)中,添加' apply插件'在文件底部的行以启用Gradle插件:

apply plugin: 'com.android.application'

android {
  // ...
}

dependencies {
  // ...
  compile 'com.google.firebase:firebase-core:9.6.1'
  // Getting a "Could not find" error? Make sure you have
  // the latest Google Repository in the Android SDK manager
}

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

documentation所述。忘记在我的gradle文件中添加此内容时,我在上面的问题中有异常。

答案 1 :(得分:115)

似乎select group_concat(distinct str_ separator ' ') as str from ( select str_ from ( select q.n, substring_index(substring_index(str, ' ', n), ' ', -1 ) as str_ from tab inner join ( select ordinal_position as n from INFORMATION_SCHEMA.COLUMNS t where table_name='COLUMNS' ) q on char_length(str) >= n - 1 ) q1 order by str_ ) q2; str ------------- Hanoi Sapa to 有问题。要么降级到

google-services:4.1.0

或将其升级到

classpath 'com.google.gms:google-services:4.0.0'

classpath 'com.google.gms:google-services:4.2.0'

希望有帮助

答案 2 :(得分:111)

我前段时间遇到同样的问题。

您尝试在不初始化的情况下获取Firebase的实例。 在尝试获取Firebase实例之前,请添加以下代码行:

FirebaseApp.initializeApp(this);

答案 3 :(得分:44)

我在 app / build.gradle 文件

中缺少以下行
apply plugin: 'com.google.gms.google-services'

并且一旦清理项目并再次运行。这为我解决了。

答案 4 :(得分:16)

    classpath 'com.google.gms:google-services:4.1.0'

有问题。而是使用:

    classpath 'com.google.gms:google-services:4.2.0'

答案 5 :(得分:12)

首先需要在root级别build.gradle添加com.google.gms:google-services:x.x.x

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

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

之后,您需要应用插件:' com.google.gms.google-services'在app / build.gradle

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'

compile 'com.google.android.gms:play-services-gcm:9.8.0'
compile 'com.google.android.gms:play-services-maps:9.8.0'
compile 'com.google.android.gms:play-services-location:9.8.0'
compile 'com.google.firebase:firebase-messaging:9.8.0'
testCompile 'junit:junit:4.12'
}


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

如果你仍然遇到问题,那么你需要添加

FirebaseApp.initializeApp(this);

在你打电话之前

FirebaseInstanceId.getInstance().getToken();

答案 6 :(得分:11)

更新各种依赖关系后,我在编译时遇到了Crashlytics错误,“ Crashlytics发现无效的API密钥:null。检查Crashlytics插件以确保已成功添加该应用程序!请联系support@fabric.io寻求帮助。我反复尝试到support@fabric.io时得到的一个非自动响应错误将您引向您,因为Fabric和Crashlytics是独立的团队,因此他们无法为我提供帮助。我避免为Crashlytics实施多余的Fabric层,并且无法从Fabric站点获取新密钥,甚至无法使该站点识别我。在尝试通过仅从代码中删除Crashlytics来解决此问题时,我得到了“默认FirebaseApp在此过程com.example.app中未初始化”。确保在运行中首先调用FirebaseApp.initializeApp(Context)崩溃。

我从来不必添加'FirebaseApp.initializeApp(this)'的初始化行,实际上已经注释掉了。文档甚至提到如果仅将Firebase用于一项活动,则不需要这样做。添加它没有区别,仍然出现运行中止错误。

找出导致新的模糊错误的原因是更新的google-services依赖关系。现在,我没有时间花更多的时间来解决新依赖项引起的shot弹枪错误,因此在有人提出解决方案之前,我将坚持使用旧版本。除了奇怪的初始化崩溃外,新版本还可能迫使Fabric应用于Crashlytics用户。用户也为此被迫回到旧的依赖版本:Crashlytics found an invalid API key: null. after updated com.google.gms:google-services:4.1.0

com.google.gms:google-services:4.1.0//BAD
com.google.gms:google-services:4.0.1//GOOD

编辑10/17/18:再次更新以下依赖关系

implementation 'com.google.firebase:firebase-ads:17.0.0'
implementation 'com.google.firebase:firebase-auth:16.0.4'
implementation 'com.google.firebase:firebase-database:16.0.3'
implementation 'com.google.firebase:firebase-core:16.0.4

当我尝试安装“ xxx已意外关闭”时,我立即崩溃,就像我尝试更新google-services依赖项时一样。在日志中,我发现了一个链接,该链接指示我将其添加到清单中

<meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-xxxxxx~xxxxxx"/>

这是新的,此处https://firebase.google.com/docs/android/setup和此处https://developers.google.com/admob/android/interstitial的设置和插页式说明中未提及。

我以前只需要为我的应用处理一个与广告相关的ID,即INTERSTITIAL_UNIT_ID。现在需要处理两个。除了上述添加之外,文档还指导在此处添加ADMOB_APP_ID(与新清单代码中与ads.APPLICATION_ID相同的数字)

MobileAds.initialize(this, ADMOB_APP_ID);

可以在您的Google AdMob控制台中找到INTERSTITIAL_UNIT_ID和ADMOB_APP_ID ID。我的游戏应用在首次更新Firebase依赖项时停止投放广告,但仍然不投放广告,在

中给出错误代码0
public void onAdFailedToLoad(int errorCode){...

即使在所有这些增加了混乱之后,如果没有初始化错误运行崩溃,我仍然无法更新google-services依赖项。我预计会停留在google-services:4.0.1一段时间。

编辑10/24/18:经过数周的通信后,从mobileadssdk-advisor+support@google.com更新后没有获得广告投放:

'感谢您共享设备日志。从日志来看,这似乎是一个现有问题,这已在我们的优先级列表上,我们的团队正在努力进行修复,而这仅在Android O和P设备上才发生。

仅O和P设备?那是最后两个版本,O于2017年9月25日发布。

答案 7 :(得分:8)

正如@PSIXO在评论中提到的那样,这可能是google-services依赖版本的问题。对于我来说,改变

buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:4.1.0'
    }
}

buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:4.0.1'
    }
}

有效。4.1.0版本可能存在问题。因为我在此上浪费了很多时间,所以我想将此作为答案。

答案 8 :(得分:7)

如果您在FirebaseUI的代码中使用the sample不需要 FirebaseApp.initializeApp(this);

确保添加到根级 build.gradle:

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        ...
        classpath 'com.google.gms:google-services:3.1.1'
        ...
    }
}

然后,在模块级 Gradle文件中:

dependencies {

    ...

    // 1 - Required to init Firebase automatically (THE MAGIC LINE)
    implementation "com.google.firebase:firebase-core:11.6.2"

    // 2 - FirebaseUI for Firebase Auth (Or whatever you need...)
    implementation 'com.firebaseui:firebase-ui-auth:3.1.2'
    ...
}

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

就是这样。不需要更多。

答案 9 :(得分:5)

另一种可能的解决方案-如果您使用的是某些Beta,请尝试使用其他Android Studio。对我有帮助。新的Android Studio根本没有正确添加Firebase。就我而言3.3预览

经过更多调查后,我发现问题是新的Android Studio使用较新的Google服务版本启动了项目,而这似乎是原始问题。正如@Ammar Bukhari所建议的,此更改有所帮助:

classpath'com.google.gms:google-services:4.1.0'-> classpath'com.google.gms:google-services:4.0.0'

答案 10 :(得分:4)

我猜想google-services版本和firebase版本存在兼容性问题。

我在项目的build.gradle文件中更改了依赖项

classpath'com.google.gms:google-services:4.1.0'至4.2.0

,然后将模块的build.gradle依赖项更新为:

实现'com.google.firebase:firebase-database:16.0.6'

实现'com.google.firebase:firebase-core:16.0.7'

一切都像一个咒语,不需要键入FirebaseApp.initializeApp(this);

答案 11 :(得分:3)

您需要在 build.gradle(项目级)

中添加Firebase Gradle buildscript依赖项
classpath 'com.google.gms:google-services:3.1.0'

app / build.gradle

中为Gradle添加Firebase插件
apply plugin: 'com.google.gms.google-services'

build.gradle will include these new dependencies:
    compile 'com.google.firebase:firebase-database:11.0.4'

来源:Android Studio助理

答案 12 :(得分:3)

就我而言,Google Services gradle插件未从values.xml文件生成所需的google-services.json文件。 Firebase库使用此生成的值文件进行自身初始化,并且如果找不到值文件,则似乎不会引发错误。检查值文件是否位于以下位置,并用您的google-sevices.json文件中的适当字符串填充该文件:

app/build/generated/res/google-services/{build_type}/values/values.xml

和/或

app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml

有关更多详细信息,请参见: https://developers.google.com/android/guides/google-services-plugin

我的特殊情况是由于使用的gradle工具版本对于我正在运行的Android Studio版本而言过于先进(例如,请确保您在Android Studio v3.2上运行等级工具v3.2.X-YYY)。

答案 13 :(得分:3)

如果您最近将com.google.gms:google-services(低于4.2.0)依赖性存在问题的Android Studio更新到3.3.1,那么请将com.google.gms:google-services更新到4.2。 0。

dependencies {
    classpath 'com.android.tools.build:gradle:3.3.1'
    classpath 'com.google.gms:google-services:4.2.0'
    }

答案 14 :(得分:2)

我们确实无需在任何地方手动致电FirebaseApp.initializeApp(this); 。而且我们也不应该。

我只是面临着同样的问题,并且得到了意想不到的奇怪解决方案。

来自this answer:

我删除了tools:node="replace",它的工作原理很吸引人。

答案 15 :(得分:2)

发生这种情况的原因是 com.google.gms:google-services 版本。当我使用 4.1.0 时,遇到了同样的错误。然后我降级了版本。 之前

classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.1.0'

之后

classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:3.2.0'

希望,它将解决错误。

答案 16 :(得分:2)

对我来说,它是将build.gradle中的com.google.gms:google-services依赖项升级到

@PersistenceContext
private EntityManager entityManager = 
EntityManagerFactory.createEntityManager();

答案 17 :(得分:0)

就我而言,当我升级 Google gms 类路径时发生此错误。 上午

classpath 'com.google.gms:google-services:4.3.9'

所以我必须降级到:

classpath 'com.google.gms:google-services:4.3.8'

而且效果很好。

答案 18 :(得分:0)

我将项目 gms:google_services 降级为 类路径 'com.google.gms:google-services:4.0.1' 它对我有用。

答案 19 :(得分:0)

如果您使用Xamarin并来到这里寻找该问题的解决方案,here it's from Microsoft

在某些情况下,您可能会看到以下错误消息: Java.Lang.IllegalStateException:默认FirebaseApp不是 在此过程中初始化请确保调用 首先是FirebaseApp.initializeApp(Context)。

这是一个已知问题,您可以通过清洁 解决方案并重建项目(“构建”>“清洁解决方案”,“构建”>“ 重建解决方案)。

答案 20 :(得分:0)

按照@Gabriel Lidenor的回答,在我的情况下无法使用上下文初始化应用程序。如果您尝试在没有google-service.json的情况下创建firebase-app怎么办?因此,在初始化任意数量的firebase应用之前,首先需要将初始化为;

FirebaseOptions options = new FirebaseOptions.Builder().setApplicationId("APP_ID")
                    .setGcmSenderId("SENDER_ID").build();
FirebaseApp.initializeApp(context, options, "[DEFAULT]");

答案 21 :(得分:0)

更改

classpath 'com.google.gms:google-services:4.1.0'

classpath 'com.google.gms:google-services:4.0.1'

为我工作

答案 22 :(得分:0)

使用com.google.gms:google-services:4.0.1'代替4.1.0

答案 23 :(得分:0)

通过Android Studio工具安装了Firebase ... Firebase ...

我通过Android Studio中的内置工具进行了安装(遵循Firebase的最新文档)。 这样就安装了基本的依赖关系,但是当我尝试连接到数据库时,总是会给我一个我需要首先调用初始化的错误,即使我是:

  

默认FirebaseApp在此过程中未初始化。确保   首先调用FirebaseApp.initializeApp(Context)。

无论我做什么,我都会遇到此错误。

最后,在其他答案之一中看到评论后,我在gradle中将以下内容从4.1.0版本更改为:

classpath 'com.google.gms:google-services:4.0.1'

当我这样做的时候,我终于看到了一个对我有帮助的错误:

  

文件google-services.json丢失。 Google服务插件   没有它就无法运行。搜索位置:   C:\ Users \%username%\ AndroidStudioProjects \ TxtFwd \ app \ src \ nullnull \ debug \ google-services.json
  C:\ Users \%username%\ AndroidStudioProjects \ TxtFwd \ app \ src \ debug \ nullnull \ google-services.json
  C:\ Users \%username%\ AndroidStudioProjects \ TxtFwd \ app \ src \ nullnull \ google-services.json
  C:\ Users \%username%\ AndroidStudioProjects \ TxtFwd \ app \ src \ debug \ google-services.json
  C:\ Users \%username%\ AndroidStudioProjects \ TxtFwd \ app \ src \ nullnullDebug \ google-services.json
  C:\ Users \%username%\ AndroidStudioProjects \ TxtFwd \ app \ google-services.json

就是这个问题。似乎4.1.0版本由于某种原因没有给出该构建错误-更不用说您缺少google-services.json文件。我的应用程序中没有google-services.json文件,所以我出去添加了它。

但是,由于这是一次升级,使用了现有的实时firsbase数据库,因此我从不需要过去生成该文件。 我去了Firebase并生成并添加了它,它解决了问题。

更改回4.1.0

一旦发现了所有这些内容,便将classpath变量改回(至4.1.0)并重新构建,并再次崩溃,并出现尚未初始化的错误。

根本问题

  • 使用4.1.0进行编译无法在预编译时为您提供有效的错误,因此您可能不知道发生了什么。
  • 针对4.1.0运行会导致初始化错误。

答案 24 :(得分:0)

尽管使用FirebaseApp.initializeApp(this);手动初始化Firebase会使错误消失,但它无法解决根本原因,一些奇怪的问题似乎无法解决,例如

  • FCM需要com.google.android.c2dm.permission.RECEIVE权限 仅适用于GCM
  • 令牌在首次发送通知后取消注册
  • 未收到消息/ onMessageReceived()永远不会被调用,

使用较新的Gradle插件(例如Android插件2.2.3和Gradle 2.14.1)修复了所有内容。 (当然,根据Firebase documentation

,设置必须正确

答案 25 :(得分:0)

我们必须在Application Class的onCreate函数中初始化Firebase。

main

}

清单文件中的代码: -

 package com.rocks.music.videoplayer;

 import android.app.Application;
 import android.content.Context;

 import com.google.firebase.FirebaseApp;


/**
* Created by ashish123 on 22/8/15.
  */
 public class MyApplication extends Application {

private static MyApplication mInstance;

@Override
public void onCreate() {
    super.onCreate();
    mInstance = this;
    try {
        FirebaseApp.initializeApp(this);
    }
    catch (Exception e) {
    }
}

public static Context getInstance() {
    return mInstance;
}

答案 26 :(得分:0)

发生这种情况的原因之一可能是忘记在android.permission.INTERNET

中添加AndroidManifest.xml权限

<uses-permission android:name="android.permission.INTERNET" />

答案 27 :(得分:0)

点击工具> Firebase以打开“助手”窗口。

单击以展开列出的功能之一(例如,Analytics(分析)),然后单击提供的教程链接(例如,记录Analytics(分析)事件)。

点击“连接到Firebase”按钮以连接到Firebase并将必要的代码添加到您的应用中。

https://firebase.google.com/docs/android/setup

答案 28 :(得分:0)

此过程无法解决我的问题

FirebaseApp.initializeApp(this); 

所以我尝试了其他操作,现在我的Firebase已成功初始化。尝试在app module.gradle中添加以下内容

BuildScript{
dependencies {..
classpath : "com.google.firebase:firebase-plugins:1.1.5"
    ..}
}

dependencies {...
implementation : "com.google.firebase:firebase-perf:16.1.0"
implementation : "com.google.firebase:firebase-core:16.0.3"
..}

答案 29 :(得分:-1)

原因和解决方法: 这是您大多数时间都会遇到的常见错误。 原因:当您将项目与Firebase集成时,它会添加依赖项

implementation 'com.google.firebase:firebase-auth:16.1.0' implementation 'com.google.android.gms:play-services-auth:16.0.1'

和类路径

classpath 'com.google.gms:google-services:4.1.0'

您只需要更新它们

这是更新方式

go to gradle sript and do this