Firebase 实时数据库中的子键问题仅在发布版本中
Posted
技术标签:
【中文标题】Firebase 实时数据库中的子键问题仅在发布版本中【英文标题】:Child key issues in Firebase Realtime database only in release Version 【发布时间】:2021-12-10 20:24:34 【问题描述】:我已将用户数据存储在 firebase 实时数据库中。问题是当我从调试 APK 存储数据时,它会写入正确的键和值。但是当请求是从发布 aab 或 APK 发送时,存储的值是正确的,但密钥与我提供的不匹配。它用 (a, b, c ....) 更改了键名。
请查看快照以获得更好的理解。第一个用户数据是从调试 APK 发送的。第二个用户数据是从发布的 APK 发送的。
这也是我的用户数据类
data class UserModel(@SerializedName("u_id") val u_id: String? = null, @SerializedName("user_name") val user_name: String? = null,
@SerializedName("phone_number") val phone_number: String? = null, @SerializedName("business_name") val business_name: String? = null)
这里是数据集方法
private fun sendDataToFirebase()
val database = Firebase.database.reference
val userData = UserModel(u_id, user_name, phone_number, business_name)
database.child("User").child(user.u_id).setValue(userData).addOnSuccessListener
// some otherscode
【问题讨论】:
另外,我试过不使用@SerializedName,但还是同样的问题。 请检查副本以了解如何解决此问题。 【参考方案1】:SerializedName
注释由 GSON 使用,而不是由 Firebase 使用。对于 Firebase,请使用 PropertyName
annotation。
但问题更可能是由 ProGuard 引起的,它正在缩小您的属性名称。您需要禁用 ProGuard 或(更有可能)从中排除您的数据类:
-keep class com.yourpackage.UserModel *;
或者更好:
-keep class com.yourpackage.model.** *;
另见:
configuring ProGuard 上的 Firebase 文档 更多search results【讨论】:
以上是关于Firebase 实时数据库中的子键问题仅在发布版本中的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift 中的 firebase 实时数据库推送等价物是啥?
无法显示来自 firebase 实时数据库的数据,错误列表<Object?> 不是 Map<dynamic,dynamic> 的子类型