Рассмотрим эти строки:
Map<String, Object> the_data = new HashMap<>();
the_data.put("login", "Anonymous");
the_data.put("avatar_is_defined", false);
the_data.put("amount", 0.0);
the_data.put("deleted", false);
the_data.put("can_read_user", true);
Toast.makeText(this, "Initializing your data... Please wait until the screen appears.", Toast.LENGTH_SHORT).show();
user_database_model.getReferenceToUser(signed_in_user_uid).set(the_data, SetOptions.mergeFields("")).addOnCompleteList[...]
При первом входе в систему пользователь должен выполнить этот вызов set
, и все эти поля должны быть фактически установлены в документе, UID которого равен signed_in_user_uid
.
Но, если пользователь снова выполняет вход (, т. Е .: документ уже существует), этот set
либо должен игнорироваться (не выполняться) (в действительности это невозможно, см. Последний абзац), или его поля не должны быть обновлены (вот почему я неудачно намеревался написать SetOptions.mergeFields("")
).
Можно ли вызвать функцию set
, сообщающую: «Firestore, пожалуйста, создайте этот документ и заполните его предоставленными полями, если он не существует; но если он уже существует, просто ... не делайте» ничего не делать "?
Важно: из-за правил безопасности Firestore я не могу get()
документ узнать, существует он или нет. (в обратном вызове я бы позвонил set
, только если он не существует). Поэтому избежать вызова set
(не выполняя его) невозможно в реальности.