【问题标题】:Android Firebase version upgradingAndroid Firebase 版本升级
【发布时间】:2020-03-12 05:20:28
【问题描述】:

我有一个应用程序使用 Firebase 和 GMS 服务,版本为 11.8.0 2 年,现在,我想升级到最新版本是 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 安装,但没有任何变化。那么有人可以帮我找出解决这个问题的方法吗?非常感谢大家!

【问题讨论】:

  • 只需从 android 项目中删除构建文件夹并重新构建您的项目..
  • 添加这个版本classpath 'com.google.gms:google-services:4.3.3
  • 感谢您的推荐,但我已删除构建文件夹并将 google-services 升级到 4.3.3 但无法解决。本期
  • 你更新classpath 'com.android.tools.build:gradle:3.6.1了吗?
  • 是的,这是我目前的classpath 'com.android.tools.build:gradle:3.6.1'

标签: android firebase firebase-cloud-messaging


【解决方案1】:

firebase-messaging 版本更改为20.1.0

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

【讨论】:

    【解决方案2】:

    不推荐降级 firebase-messaging 库。

    从 Firebase 云消息传递 v20.1.1 和 Firebase InstanceId 20.1.0 开始,这些库依赖于 Firebase 安装 SDK。这让事情与以前有些不同。

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

    根据release note

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

    参考:Firebase android release note

    TL;博士

    总而言之,您应该寻找影响您的代码的重大更改,并按照最新版本支持的方式更新它们。

    【讨论】:

    • 感谢您的支持,按您说的降级解决了,辛苦了一天。
    • @Shaw 我想你误会了。建议不要降级。
    • @Shaw 这正是第一行。
    • @Mahdi-Malv 这不对。我的应用使用 Firebase 自动初始化过程和 Gradle 插件将 google-services.json 转换为资源。但是,它们会受到影响并需要使用 FirebaseOptions 进行初始化。您能否提出可能导致此错误的原因?
    • 我引用的是 FCM 发行说明。也许应该从 firebase 控制台刷新 json 文件。打开它并查看所有数据(apiKey、applicationId 等)。如果他们这样做,您可能需要联系 fcm 或自己提出问题,然后添加 firebase 标签或提及其中一个 firebases。
    【解决方案3】:

    Firebase Android SDK updates on February 27 (M65) 之后引入了一项新的基础架构服务,即 Firebase 安装 SDK,它依赖于 Firebase Installations API
    Firebase 安装需要有效的 Firebase 选项 API keyproject IDapplication ID(又名“appId”)才能与 Firebase 服务器成功通信。

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

    缓解问题

    • 确保您的应用程序使用来自 Firebase 控制台的最新 google-services.json 文件中的有效 Firebase 选项: Firebase options: instructions and background
    • 如果您使用 API 限制,请确保您的应用程序使用的 API 密钥已列入 Firebase Installations API(以及您的应用程序)的白名单: API restrictions: instructions and background
    • 关于Application restrictions:将单选按钮设置为None 或确保您的应用列入白名单(使用正确的SHA-1 certificate)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2022-06-20
      • 2011-02-19
      • 2017-04-12
      • 2021-08-18
      相关资源
      最近更新 更多