我在尝试迁移到FireBase托管推送时遇到错误,我尝试使用类FCMservice作为示例中的推送应用,但我的应用崩溃了这个日志:
FATAL EXCEPTION: AsyncTask #3
Process: com.galsa.example, PID: 17415
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:318)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.galsa.example. Make sure to call FirebaseApp.initializeApp(Context) first.
at com.google.firebase.FirebaseApp.getInstance(Unknown Source)
at com.google.firebase.iid.FirebaseInstanceId.getInstance(Unknown Source)
at com.sinch.android.rtc.internal.client.fcm.FcmTask.doInBackground(Unknown Source)
at com.sinch.android.rtc.internal.client.fcm.FcmTask.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
答案 0 :(得分:2)
IN BREIF:很可能在应用的gralde文件中未正确配置Firebase服务依赖项。您应该在Firebase控制台中注册您的应用程序,将 google-services.json 文件下载到您的应用程序主文件夹中,Firebase gradle插件可以在其中找到它,它将为您完成所有工作。尝试构建并运行我们的示例推送应用程序,查看gradle文件
apply plugin: 'com.google.gms.google-services'
详细信息:您可以在崩溃日志中看到:
…Default FirebaseApp is not initialized in this process com.galsa.example. Make sure to call FirebaseApp.initializeApp(Context) first.
但实际上,Firebase如果正确添加到项目中,会自动为您完成所有操作,包括初始化调用。你可以在这里找到很好的解释:https://firebase.googleblog.com/2016/12/how-does-firebase-initialize-on-android.html。要将Firebase功能添加到您的应用程序,理论上需要做很多事情 - 定义资源,使用服务声明和权限嵌入清单,添加依赖关系jar / aars,最后提供一些代码以向SDK提供应用程序上下文以进行初始化。幸运的是,Firebase开发人员提供了gradle插件,可以为您完成所有这些操作。但是,为了使其工作,它需要google-services.json,您可以从Firebase控制台下载。如果您查看我们的推送示例应用程序的build.gradle文件,您会发现它使用运行该插件的apply plugin: 'com.google.gms.google-services'
命令完成,并且它具有“魔力”。如果一切顺利,您应该在.apk的合并清单中看到如下内容:
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:exported="false"
android:authorities="…"
android:initOrder="100" />
如果缺少此部分,它肯定是您的应用程序构建配置问题,再次查看我们的推送示例应用程序。如果它存在,请确保没有冲突的库版本,例如,如果您使用谷歌的播放服务,他们应该匹配如下:
compile 'com.google.android.gms:play-services:11.0.1'
compile 'com.google.firebase:firebase-messaging:11.0.1'
最后,请确保使用最新版本的库。 11.0.1在我们的测试中看起来很不错。
祝你好运, 维克多
答案 1 :(得分:0)
首先,您需要在根gradle文件中的依赖项中添加此行:
classpath 'com.google.gms:google-services:3.1.0'
然后你必须在项目gradle文件中的依赖项中添加这一行:
implementation 'com.google.firebase:firebase-messaging:11.6.0'
并在项目gradle文件的末尾添加此行:
apply plugin: 'com.google.gms.google-services'
然后您必须按照此link中的步骤生成google-services.json
文件并将其放在项目的根文件夹中。