【问题标题】:FCM doesn't work after enabling Proguard in gradle在 gradle 中启用 Proguard 后 FCM 不起作用
【发布时间】:2019-11-08 00:13:27
【问题描述】:

我之前连接了FCM 并进行了测试。而且效果很好。

但是,我已准备好发布我的应用并在build.gradle 中启用了proguard

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt')
            proguardFile 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt')
            proguardFile 'proguard-rules.pro'
//            proguardFile 'proguard_debug.pro'
        }
    }

并将其应用到proguard-rules.pro

-keep class com.firebase.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-dontwarn com.firebase.**
-dontnote com.firebase.client.core.GaePlatform

每个人都收到推送消息,但只有我的测试手机没有收到它们,这是 proguard 启用的。我将data 模型转换为Serialize 格式。但是现在这个问题正在发生。

如何使用 FCM 或其他 Firebase 功能,例如 Remote ConfigCrashlystics

【问题讨论】:

  • data 模型是 Kotlin data 类?
  • 它是data class,但将其更改为class MyClass: Serializable,然后为每个变量提供@SerializedName('variable_name'),并解决了序列化问题。但这是另一个问题。我现在遇到FCM 的问题。

标签: android firebase push-notification firebase-cloud-messaging proguard


【解决方案1】:

混淆重命名 Kotlin data class 中的变量而没有 @SerializedName 并且结果 Json 不解析为模型类。 为了防止这种情况,您可以使用@Keep 注释

@Keep
data class MyClass(...)

或将@SerializedName 设置为所有值

【讨论】:

  • 谢谢。但是..你对FCM有什么想法吗?
  • @c-an 您可以将-dontnote com.google.** 添加到proguard-rules.pro 但我没有使用Firebase 的任何特定配置
  • 我需要实现Serializable吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
相关资源
最近更新 更多