[英]Firebase firestore variable name changed
我的 firestore 變量以其他名稱保存在 Cloud firestore 中。 我認為這與混淆器有關,但我不明白。
以下是我的用戶名。
public String id;
public String name;
public String number;
public String profilePic;
public String shopPic;
下面是一些相關的代碼,很簡單
FirestoreUrls.get().getAccountsCollection()
.document().set(binding.getUser()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
hideProgressBar();
handleFirebaseException(getClass(), task, true);
}
});
您遇到此問題是因為您使用 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.** {
*;
}
請查看文檔以獲取更多信息:
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)...
# Add this global rule
-keepattributes Signature
-keep class <Your class package here>.** { *; }
<Your class package here>
可以在 class 文件中找到:package com.elliottsoftware.calftracker.domain.models.fireBase
//TODO THE GETTERS AND SETTERS USED BY FIREBASE ARE CASE SENSITIVE
data class FireBaseCalf(var calftag: String? = null,
var cowtag:String? = null,
var ccianumber: String? = null,
var sex:String? = null,
var details:String?=null,
var date: Date? = null,
var birthweight:String? = null,
var id: String? = null,
) {
// Null default values create a no-argument default constructor, which is needed
// for deserialization from a DataSnapshot.
}
注意com.elliottsoftware.calftracker.domain.models.fireBase
,這就是您要替換為<Your class package here>
所以最后你的 proguard-rules.pro 文件將如下所示:
# Add this global rule
-keepattributes Signature
-keep class com.elliottsoftware.calftracker.domain.models.fireBase.** { *; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.