安卓 Firebase 版本升级

5

我曾使用Firebase和GMS服务的11.8.0版本开发了一个应用程序,已经使用了两年。现在,我想升级到最新的17.0.0版本。gradle中的依赖关系如下:

升级前:

implementation 'com.google.firebase:firebase-core:11.8.0'
implementation 'com.google.android.gms:play-services-location:11.8.0'
implementation 'com.google.android.gms:play-services-base:11.8.0'
implementation 'com.google.firebase:firebase-invites:11.8.0'
implementation 'com.google.firebase:firebase-messaging:11.8.0'
implementation 'com.google.firebase:firebase-config:11.8.0'
implementation 'com.google.android.gms:play-services-maps:11.8.0'

升级后:
implementation 'com.google.firebase:firebase-analytics:17.2.3'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-base:17.1.0'
implementation 'com.google.firebase:firebase-invites:17.0.0'
implementation 'com.google.firebase:firebase-messaging:20.1.1'
implementation 'com.google.firebase:firebase-config:19.1.2'
implementation 'com.google.android.gms:play-services-maps:17.0.0'

并修改代码:

    public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

        @Override
        public void onTokenRefresh() {
            //Getting registration token
            String token = FirebaseInstanceId.getInstance().getToken();
            // Save token
        }
    }

public class MyFirebaseInstanceIDService extends FirebaseMessagingService {

    @Override
    public void onNewToken(@NonNull String s) {
        super.onNewToken(s);
        // Save token
    }
}

而在 Manifest 中,我将服务注册如下:

<service android:name=".notification.MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

之前我设置的所有内容都没有变化。 但是在构建和运行时,我遇到了以下堆栈跟踪错误:

2020-03-12 11:38:29.225 26475-26543/com.example E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Won't retry the operation.
2020-03-12 11:38:29.460 26475-26550/com.example E/FirebaseInstanceId: Failed to get FIS auth token
    java.util.concurrent.ExecutionException: com.google.firebase.installations.FirebaseInstallationsException
        at com.google.android.gms.tasks.Tasks.zzb(Unknown Source:61)
        at com.google.android.gms.tasks.Tasks.await(Unknown Source:23)
        at com.google.firebase.iid.zzs.zzb(com.google.firebase:firebase-iid@@20.1.0:54)
        at com.google.firebase.iid.zzs.zza(com.google.firebase:firebase-iid@@20.1.0:89)
        at com.google.firebase.iid.zzv.run(Unknown Source:12)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: com.google.firebase.installations.FirebaseInstallationsException
        at com.google.firebase.installations.FirebaseInstallations.doRegistrationInternal(com.google.firebase:firebase-installations@@16.0.0:333)
        at com.google.firebase.installations.FirebaseInstallations.doGetId(com.google.firebase:firebase-installations@@16.0.0:280)
        at com.google.firebase.installations.FirebaseInstallations.access$lambda$0(Unknown Source:0)
        at com.google.firebase.installations.FirebaseInstallations$$Lambda$1.run(Unknown Source:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 

在谷歌上寻找解决方案后,我发现了这样的东西: https://firebase.google.com/support/release-notes/android#2020-03-03

然后我进入我的Firebase控制台并启用Firebase安装,但没有任何变化。所以有人能帮我找出解决此问题的方法吗?非常感谢大家!


1
只需从 Android 项目中删除 build 文件夹并重新构建您的项目即可。 - Nensi Kasundra
你改过 classpath 'com.android.tools.build:gradle:3.6.1 吗? - Nensi Kasundra
是的,这是我目前的classpath 'com.android.tools.build:gradle:3.6.1' - Shaw
firebase-messaging 版本更改为 20.1.0 - Nensi Kasundra
相关链接:https://dev59.com/11MH5IYBdhLWcg3wvx84#58496014 - Big McLargeHuge
显示剩余4条评论
3个回答

7

firebase-messaging版本更改为20.1.0

implementation 'com.google.firebase:firebase-messaging:20.1.0'

3

降级firebase-messaging库不是推荐的解决方案。

从Firebase云消息中心v20.1.1和Firebase InstanceId 20.1.0版本开始,这些库依赖于Firebase安装SDK。这使得事情与以前略有不同。

例如,如果您使用FirebaseOptions而不是google-services.json文件来初始化这些库,则需要额外的信息传递给FirebaseOptions

根据发布说明

使用Firebase自动初始化过程和Gradle插件将google-services.json转换为资源的应用程序不受影响。但是,创建其自己的FirebaseOptions实例的应用程序必须提供有效的API密钥、Firebase项目ID和应用程序ID。

参考资料:Firebase Android发布说明

TL;DR

因此,总之,您应该寻找影响您的代码的破坏性更改并根据最新版本的支持更新它们。


1
感谢您的支持,我按照您的建议降级版本解决了问题,这一天真是太难了。 - Shaw
2
@Shaw 我想你误解了。建议不是降级。 - Big McLargeHuge
@Shaw 这正是第一行。 - Mahdi-Malv
@Mahdi-Malv,这样做是不对的。我的应用程序使用 Firebase 的自动初始化过程和 Gradle 插件将 google-services.json 转换为资源,但它们受到影响并需要使用 FirebaseOptions 进行初始化。你能提出可能导致此错误的建议吗? - Mashal Rashid
我引用的是 FCM 发布说明。也许需要从 Firebase 控制台刷新 JSON 文件。打开它并查看所有数据是否存在(apiKey、applicationId 等)。如果存在,您可以联系 FCM 或自己提问,然后添加 Firebase 标签或提及其中一个 Firebase 团队成员。 - Mahdi-Malv

0

Firebase Android SDK 2月27日的更新(M65)及其后版本引入了一个新的基础设施服务,Firebase Installations SDK,它依赖于Firebase Installations API

Firebase Installations需要有效的Firebase选项API密钥项目ID应用程序ID(也称为"appId"),以便成功与Firebase服务器通信。

与Firebase Installations API通信期间出现的错误表明Firebase选项无效或API密钥配置错误。

为了缓解这个问题,

请确保您的应用程序使用来自 Firebase 控制台最新的google-services.json文件中的有效 Firebase 选项: Firebase 选项:说明和背景
如果您使用 API 限制,请确保您的应用程序使用的 API 密钥已被列入 Firebase 安装 API(以及您的应用程序)的白名单中: API 限制:说明和背景 关于应用程序限制:将单选按钮设置为,或确保您的应用程序在白名单中(具有正确的SHA-1 证书)。

详情请访问:
https://firebase.google.com/support/privacy/init-options


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