В настоящее время мой код проверяет, видели ли мы кортеж (userId, messageId) раньше и перестаем получать новые сообщения, если они есть. Кажется, что история делает то же самое? Я пытаюсь понять разницу между двумя подходами.Зачем нам нужен historyId, когда мы можем просто проверить, обработали ли мы (userId, messageId) кортеж?
0
A
ответ
0
Что касается получения сообщения в Gmail, мы используем кортеж userId и messageId с помощью messages.get.
Где, как в интерфейсе Gmail, сообщения отображаются на основе historyId.
Надеюсь, что объясняет основную цель historyId.
0
Я знаю, что это уже поздно, но я изучал это сам.
Получение списка писем на основе historyId с помощью Users.History.List предоставит вам все изменения с момента прохождения истории. Поэтому, если ярлык добавлен, например, тогда он будет возвращен со списком.
Ваш подход просто ищет новые сообщения, которые не были видны с помощью Users.Messages.List. Изменения не будут возвращаться при таком подходе - скорее, просто новые сообщения.
Смежные вопросы
- 1. Зачем нам нужен буфер, когда мы получаем вход от пользователя?
- 2. Зачем нам нужно значение NaN, когда мы можем использовать TypeErrors?
- 3. Зачем нам нужен HTTPS, когда мы посылаем результат пользователь
- 4. Зачем нам нужен contexClassLoader
- 5. Зачем нам нужен метод setup() в MapReduce, когда мы можем инициализировать параметры в map() или reduce()?
- 6. Зачем нам нужен конструктор по умолчанию, когда мы можем инициализировать элементы данных в java?
- 7. Зачем нам нужен @GeneratedValue?
- 8. Зачем нам нужен strdup()?
- 9. Зачем нам нужен новый оператор?
- 10. Зачем нам нужен обратный адрес?
- 11. Зачем нужен messageId в AMQP?
- 12. Почему нам нужно создавать представления, когда мы можем просто использовать SELECT INTO?
- 13. Зачем нам нужен конструктор в ООП?
- 14. Как мы можем проверить это лямбда-выражение?
- 15. Зачем нам нужен cmake?
- 16. Зачем нам нужен частный конструктор?
- 17. Зачем нам нужен ключ маршрутизации в rabbitmq
- 18. Зачем нам нужен кеш?
- 19. Зачем нам устанавливать временную метку, когда мы выполняем кодовое обозначение?
- 20. Как мы можем проверить, защищено ли устройство?
- 21. Зачем нам нужен analysis_export, когда у нас есть analysis_port
- 22. Зачем нам нужен scalaz.stream над итерацией?
- 23. Зачем нам нужен полукруглый разъем?
- 24. Зачем нам нужен org.junit.ComparisonFailure?
- 25. Зачем нам нужен Control.Lens.Reified?
- 26. Зачем нам нужен сгенерированный код?
- 27. Зачем нам нужен двумерный массив?
- 28. Зачем нам нужен enabled_shared_from_this
- 29. Зачем нам нужен кометный или HTTP-опрос, когда мы не пользуемся браузером?
- 30. Зачем нам нужен загрузчик во встроенном устройстве?