Firebase Firestore 变量名称已更改
Posted
技术标签:
【中文标题】Firebase Firestore 变量名称已更改【英文标题】:Firebase firestore variable name changed 【发布时间】:2020-06-28 09:09:02 【问题描述】:我的 Firestore 变量以其他名称保存在 Cloud Firestore 中。我认为这与proguard有关,但我不明白。
以下是我的用户名。
public String id;
public String name;
public String number;
public String profilePic;
public String shopPic;
以下是屏幕截图,保存在 Firestore 中。
这里有一些相关代码,很简单
FirestoreUrls.get().getAccountsCollection()
.document().set(binding.getUser()).addOnCompleteListener(new OnCompleteListener<Void>()
@Override
public void onComplete(@NonNull Task<Void> task)
hideProgressBar();
handleFirebaseException(getClass(), task, true);
);
【问题讨论】:
【参考方案1】:您遇到此问题是因为您使用 Proguard 来确保安全,它会打乱代码,因此在您创建应用的 APK 后其他人无法立即看到它。这也适用于 Firebase。要解决这个问题,请在您的 build.gradle
文件中添加以下代码行:
buildTypes
release
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
然后在项目的 Proguard 文件中添加以下规则,通过将包名替换为您自己的包名来防止这种行为:
-keepattributes Signature //Global rule
-keepclassmembers class com.example.YourModelClass.**
*;
请查看文档以获取更多信息:
https://firebase.google.com/docs/database/android/start#proguard【讨论】:
我检查了这个配置,还是一样 也许this可以帮到你一点。 还没有 Alex Mamo 嗨@AlexMamo我面临同样的问题,这解决了我的问题(谢谢),但我在谷歌播放的应用程序版本仍在更改名称。是否应该重新创建一个新的 APK 并将其上传到 google play 以解决问题? @AmrJyniat 是的,一个新的 APK,因为文件现在已更改。【参考方案2】:proguard
将字段和类名重命名为更短的名称。为了防止这种情况,您可以使用proguard-android.txt
文件中的"-keep class com.package.MyClass"
行将此类从proguard 优化中排除。
但是恕我直言,您应该在代码中的某个位置将您的变量映射到正确的字符串,然后将字符串发送到云存储。因为目前您的类中的任何重构(例如重命名字段)都可能会破坏您的 Firestore 名称匹配。
更新:
看起来您可以通过这种方式将对象文件映射到正确的字符串:
User user = binding.getUser()
Map<String, Object> docData = new HashMap<>();
docData.put("id", user.id);
docData.put("name", user.name);
docData.put("number", user.number);
docData.put("profilePic", user.profilePic);
docData.put("shopPic", user.shopPic);
FirestoreUrls.get().getAccountsCollection()
.document().set(docData)...
【讨论】:
但是proguard适用于发布版本,我目前正在调试apk。 是的,这是一种方式以上是关于Firebase Firestore 变量名称已更改的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Firestore 实时更新能否监听多个集合,即集合名称中有一个变量? [复制]
如何从 Firebase 获取按变量排序的文档(文档名称未知)[关闭]
仅当 UID 与 Firebase Firestore 中的集合名称匹配时,如何读取集合?
SwiftUI Firebase Firestore 查询函数
如何按字段值(即“原因”字段名称及其值可能是“垃圾邮件”、“裸露”等)对 Firebase Firestore 数据进行排序