【问题标题】:Firebase android not working outside testing devicesFirebase android不能在测试设备之外工作
【发布时间】:2021-03-08 20:02:02
【问题描述】:

我有这个新应用并添加了 Firebase Firestore 和 Cloud Firestore。 用户可以用邮箱注册并通过,成功登录。 然后用户可以在我的个人资料中输入生日并更新信息。

问题是这样的,它在模拟器中运行良好。它在测试设备中运行良好。但是当我发布应用程序并用另一部安卓手机下载它时,它停止工作。 我有 2 种不同情况的数据库图片。

第一个:

我使用真实设备和从商店下载的应用程序注册用户:我的user1

第二个:

是从模拟器设备相同版本的注册。我的user2

从下载的应用程序注册时出现问题:

a "aJ3vfJUiNFQXbQ394SHbGUlV7eu2"
b "My name"
c "5@6.com"
d ""
e "" 

从模拟器中纠正一个:

birthday ""
email "7@8.com"
id "ldYDz3GAo6YOUNiIGZyMg3lwVXH3"
image ""
userName "My name 2" 

【问题讨论】:

  • “它停止工作”是什么意思?你有什么错误吗?
  • 我的意思是在模拟器中它会显示用户名,你可以更改姓名、生日等,但是当我从商店下载应用程序并运行它并登录时,它会改变,你不能做这些功能.
  • 我发现了我认为的问题。 toObject 方法似乎无法正常工作。我将数据一一作为字符串发送,它现在可以工作了。但任何帮助都会很棒,因为我知道这不是最好的解决方案。
  • 看起来它可能与将变量重命名为“a、b、c、d、e”的 pro-guard 有关,尝试使用 progueard 规则来保留您上传到 firebase 的数据类

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

当您为 android 制作发布版本时,通常会使用 proguard 来混淆您的代码 - 这意味着将您的所有类重命名为 A、B、C 之类的东西,并将所有变量重命名为 a、b、c、d、e 之类的东西。看起来这就是这里可能发生的事情。您正在上传这样的数据对象:

data class PersonInfo(
    var birthday: String = "",
    var email: String = "",
    var id: String = "",
    var image: String = "",
    var userName: String = "" 
)

proguard 将其混淆为:

data class A(
    var a: String = "",
    var b: String = "",
    var c: String = "",
    var d: String = "",
    var e: String = "" 
)

要告诉 proguard 不混淆特定类,您可以在 proguard-rules.pro(应该位于您的 /app/ 文件夹中)中添加一条规则,如下所示:

-keep class your.package.name.ClassName

这应该保留原始类并解决您的问题(假设问题来自我怀疑的 proguard)

【讨论】:

  • 我刚刚在将应用上传到 Google Play 后遇到了一个问题。正如许多人所建议的那样,问题可能出在 ProGuard 配置上,我所做的与您的帖子完全一样。我为我的所有模型类添加了-keep class(我认为这是我应该做的)。既然我的应用已经上传到 Google Play,接下来我需要做什么?谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多