Стратегия для получения «реального» времени устройства в автономном режиме

1

Мы разрешаем пользователям подключаться к часам через наше интерактивное приложение.

Мы также разрешаем офлайн-тайм-аут, сохраняя местоположение GEO и временную метку действия и ожидая активного подключения к Интернету.

Есть ли способ определить, изменил ли умный пользователь время работы устройства во время автономной работы и синхронизации?

Мы думали, что мы можем начать некоторый интервал, когда приложение последний раз связалось с сервером, но лучший вариант? Я не уверен, правильно ли будет выполняться интервал, когда приложение находится в фоновом режиме и тому подобное.

  • 1
    Если кто-то действительно хочет вас обмануть, он сможет обойти все контрмеры.
  • 0
    @JonasW. Я предполагаю, что это правильно, но мы стремимся найти способ предотвратить это от обычного пользователя, а не от Сноудена или около того ... ;-)
Теги:
react-native
datetime

5 ответов

0
Лучший ответ

Я нашел следующий Gist, который возвращает количество секунд с момента загрузки устройства.

С этим модулем NPM, который основан на Gist, я делаю следующее:

  1. После ответа сервера: я сохраняю время сервера вместе с тиками OS
  2. Пользователь проверяет в автономном режиме: сохранение тиков ОС
  3. Соединение восстанавливается: отправьте вычисленную дату из тиков diff

Единственная ошибка неспособна обнаружить "истинное" время устройства, которое было перезапущено во время автономной работы. Тем не менее, наш PM может просто решить заблокировать автономные проверки для этого сценария.

1

Используя Node.JS, вы можете захватить время безотказной работы системы. См. Https://nodejs.org/api/os.html#os_os_uptime.

Сценарий - os.uptime() и возвращается как целое число. Если они изменят свои часы/дату, это число по-прежнему будет продолжать тикать. Вы можете проверить дельту, чтобы увидеть, изменили ли они свое время (обратите внимание: изменения в часовых поясах могут по-прежнему возникать естественным образом). Если они перезапустят свое устройство, установите свое текущее время в качестве новой базовой линии и продолжите проверку изменений оттуда.

Это не мешает всему (так как все не предотвратимо), но уверен, что это намного сложнее обойти, предполагая, что они могут понять, что делает ваш черный ящик.


Замечания:

Модуль: const os = require('os');


Ex Использование:

console.log(require('os').uptime())

  • 0
    Вы знакомы с методом безотказной работы в React Native? Полезно узнать об этом методе NodeJS, однако сценарий, который мы пытаемся решить, - это когда приложение находится на темной стороне луны, то есть вне досягаемости сервера
  • 0
    @ Насколько я могу судить, это должно работать в автономном режиме? Я могу что-то упустить; Я не совсем знаком с ж / реактивным нативом, но у меня сложилось впечатление, что Node.JS может работать с ним, находясь в автономном режиме. Если нет, надеюсь, кто-то еще может помочь вам в любом случае, удачи!
Показать ещё 1 комментарий
0

Если вы просто хотите получить "трудное время мошенничества":

  var now = +new Date(); // or contact server

  setInterval(() => now += 1000, 1000);

 // Somewhen:
 console.log(new Date(now));
  • 0
    Да, поэтому мне интересно, есть ли у вас опыт работы с интервалами в React Native, когда приложение работает в фоновом режиме. Они все еще в игре?
  • 0
    @ Да нет, они не будут работать в фоновом режиме, но тут появился быстрый гугл github.com/jamesisaac/react-native-background-task/blob/master/…
Показать ещё 2 комментария
0

Это немного сложно, вместо активной проверки вы можете сделать пассивную проверку мошеннических часов.

Вы можете запустить фоновое задание, которое получает время устройства каждый час или каждые 10 минут и сохраняет таблицу базы данных (скажем, timelog_table).

Теперь, если пользователь меняет время устройства и отправляется в будущем! или в прошлом! вы сможете увидеть колебания в timelog_table

теперь вам решать, что вы хотите обработать/проанализировать этот timelog_table на самом устройстве или на стороне сервера.

Я бы предложил сделать это на стороне сервера, но здесь вам нужно будет отправить эти данные на сервер.

  • 0
    Пожалуйста, спросите меня, если у вас есть какие-либо вопросы / сомнения.
  • 0
    Вся эта таблица даже не нужна, он может просто сохранить process.uptime() в начале запуска приложения и проверить дельту
Показать ещё 2 комментария
0

Вы можете ответить Альберту и добавить еще один крючок.

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

Что-то вроде qaru.site/questions/645962/...

Единственная установленная здесь мобильная ОС обычно ограничивает фоновые действия...

  • 1
    Да, фоновая активность, кажется, подвох. Если бы в RN был какой-то внутренний счетчик тиков, который не связан с датой и временем устройства, это наверняка спасло бы день (для нас ... ;-))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню