sinch 库 3.12.2 托管推送通知错误

sinch library 3.12.2 managed push notification error

我在尝试迁移到 FireBase 托管推送时遇到错误,我尝试使用 class FCMservice 作为示例中的推送应用程序,但我的应用程序崩溃并显示此日志:

FATAL EXCEPTION: AsyncTask #3
                                                                   Process: com.galsa.example, PID: 17415
                                                                   java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                       at android.os.AsyncTask.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.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.call(AsyncTask.java:304)
                                                                       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                       at android.os.AsyncTask$SerialExecutor.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)

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 功能添加到您的应用程序,理论上需要做很多事情——定义资源、嵌入带有服务声明和权限的清单、添加依赖项 jars/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" />

如果缺少这部分,那肯定是您的应用程序构建配置问题,请再次查看我们的推送示例应用程序。如果存在,请确保没有冲突的库版本,比如如果您使用 google 的播放服务,它们应该像这样匹配:

compile 'com.google.android.gms:play-services:11.0.1'
compile 'com.google.firebase:firebase-messaging:11.0.1'

最后,确保使用最新版本的库。 11.0.1 在我们的测试中看起来不错。

此致, 维克多

首先,您需要在根 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文件并将其放在项目的根文件夹中。