将客户端与 Gmail 同步

本文档介绍了如何将客户端与 Gmail API 同步。

在大多数应用场景中,让客户端与 Gmail 保持同步非常重要。同步方法有两种:完全同步部分同步。在客户端首次连接到 Gmail 时以及在极少数情况下,您必须执行完全同步。如果您的客户端最近同步过,那么部分同步是完整同步的轻量级替代方案。您还可以使用推送通知来触发实时部分同步,并且仅在必要时触发,从而避免不必要的轮询。

完全同步

如果您的应用是首次连接到 Gmail,或者无法进行部分同步,则必须执行完整同步。在完全同步操作中,应用应检索并存储尽可能多的最新消息或会话,以满足您的需求。例如,如果您的应用显示最近消息的列表,您可以检索并缓存足够的消息,以便在用户滚动浏览超出前几条显示的消息时,界面能够快速响应。

请按照以下步骤执行完整同步:

  1. 调用 messages.list 方法可检索第一页消息 ID。

  2. 为列表请求返回的每条消息创建 messages.get 方法请求的批量请求

    如果您的应用显示消息内容,请在应用首次检索消息时将 format 参数设置为 format=fullformat=raw,并缓存结果以避免额外的检索操作。如果您要检索之前缓存的消息,请使用 format=minimal 来减小响应的大小,因为只有 labelIds 可能会发生变化。

  3. 将更新合并到缓存结果中。您的应用应存储最新消息(list 响应中的第一条消息)的 historyId,以供将来进行部分同步。

部分同步

如果您的应用最近同步过,则可以使用 history.list 方法执行部分同步,以返回比您在请求中必须指定的 startHistoryId 查询参数更新的所有历史记录。

startHistoryId 查询参数必须设置为最近一条消息的 historyId。如需检索最近一条消息的 historyId,请使用 messages.getmessages.list 方法。您还可以在完全同步或部分同步期间设置该值,以供日后使用。

返回的 History 对象包含自所提供的 startHistoryId 时间以来每封邮件的消息 ID 和更改类型,例如添加邮件或修改标签。

限制

历史记录通常至少保留一周,有时会保留更长时间。 不过,记录的可用时间段可能会短得多,并且在极少数情况下,记录可能不可用。

如果客户端提供的 startHistoryId 超出了历史记录的可用范围,Gmail API 会返回 HTTP 404 错误响应。在这种情况下,您的客户端必须执行完全同步