Получить текущую дату и время на сервере в Firebase Firestore - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу получить время моего сервера в Firebase Firestore, чтобы я мог использовать его для своей логики обратного отсчета c. Я нигде не могу найти, и в основном они предлагают использовать FiedValue.serverTimeStamp или ServerValue.TIMESTAMP, которые оба используются для сохранения данных. Я не хочу сохранять данные, я просто хочу получить время сервера.

Есть ли способ c, например FirebaseFirestore.getInstance().getServerTime()?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Как сказал @Doug, нет никакого способа получить только время от Firebase. Тем не менее, есть много способов сделать то же самое.

Во-первых, , вы можете использовать обратный отсчет, используя устройство пользователя приложения, поскольку все время в сегодняшнюю эпоху синхронизируется со спутником. , Это можно сделать с помощью:

Date dateStart = new Date();
Date dateEnd = new Date();
System.out.println(dateEnd.getTime() - dateStart.getTime()/1000);

Во-вторых , создайте объект в firebase для времени начала (для конкретного пользователя), а затем, когда обратный отсчет закончится, подсчитайте разницу между текущее время и время, загруженное в базу данных.

FirebaseFirestore db = FirebaseFirestore.getInstance();

// At the time of setting.

Map<String, Object> map= new HashMap<>();
map.put("startTime", (new Date()).getTime());

db.collection(userdata).document(userid).set(map);

// At the time of retrieving:

db.collection(userdata).document(userid).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                // Here you can get the time..
            }
        } else {
            Log.d(TAG, "get failed with ", task.getException());
        }
    }
});

Теперь, если вам не нравится какой-либо из вышеперечисленных методов, вы можете отправить запрос в службу поддержки на время в https://firebase.google.com/support

0 голосов
/ 11 апреля 2020

Не существует метода для получения фактического времени сервера.

Серверные метки времени - это просто значения токенов на клиенте, которые дают окончательное значение при достижении Firestore. Лучшее, что вы можете сделать, это записать метку времени сервера в поле в документе, а затем прочитать документ обратно из Firestore после того, как поле имеет значение. Имейте в виду, что отметка времени будет «запаздывать» в этот момент из-за времени, которое требуется вашему коду для фактической записи и чтения данных. У вас нет гарантии, сколько времени займет этот процесс.

Для более подробного объяснения того, как работают временные метки сервера, прочтите эту статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...