Изменено имя переменной Firebase firestore - PullRequest
0 голосов
/ 17 марта 2020

Переменные моего хранилища сохраняются под другими именами в облачном хранилище. Я думаю, что это связано с ProGuard, но я не получаю его.

Ниже приведены мои имя пользователя.

public String id;
public String name;
public String number;
public String profilePic;
public String shopPic;

и ниже скриншот, что сохраняется в FireStore. sc

Вот некоторый связанный код, который очень прост

        FirestoreUrls.get().getAccountsCollection()
                .document().set(binding.getUser()).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                hideProgressBar();
                handleFirebaseException(getClass(), task, true);
            }
        });

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Вы столкнулись с этой проблемой, потому что вы используете Proguard для безопасности, которая перетасовывает код, чтобы другие не могли его увидеть сразу после создания APK приложения. Это также доступно в случае Firebase. Чтобы решить эту проблему, добавьте следующие строки кода в файл build.gradle:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt')
    }
}

Затем добавьте следующие правила в файл Proguard вашего проекта, чтобы предотвратить такое поведение, заменив имя пакета собственным пакетом. имя:

-keepattributes Signature //Global rule

-keepclassmembers class com.example.pojos.** {
  *;
}

Пожалуйста, проверьте документы для получения дополнительной информации:

1 голос
/ 17 марта 2020

proguard переименовывает поля и имена классов в более короткие. Чтобы предотвратить это, вы можете исключить этот класс из оптимизации proguard с помощью строки "-keep class com.package.MyClass" в файле proguard-android.txt.

Но, ИМХО, вместо этого вам следует где-то в вашем коде сопоставить ваши переменные с соответствующими строками, а затем отправить строки в Облачный пожарный. Потому что на данный момент любой рефакторинг в вашем классе (например, переименование полей) может нарушить совпадение имен вашего пожарного хранилища.

ОБНОВЛЕНИЕ :

Похоже, вы можете сопоставить файлы объектов с правильные строки следующим образом:

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)...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...